ITMS-91064 错误修复:隐私清单追踪信息无效
作者:Mehdi Azizi
发布于 ,5分钟
ITMS-91064 表示隐私清单里 NSPrivacyTracking 和 NSPrivacyTrackingDomains 相互矛盾。让两者一致,再重新构建即可。
ITMS-91064 是 Apple 的自动拒绝,在你提交构建后通过邮件发来。它的意思是:你的隐私清单里两个和追踪有关的键相互矛盾。解决办法:让 NSPrivacyTracking 和 NSPrivacyTrackingDomains 保持一致,然后重新构建。
我在 TradaZen(我做的交易练习 App)上加了一个广告归因工具之后,就碰到了这个错误。下面讲原因和修复方法。
ITMS-91064 错误是什么意思?
邮件标题是“ITMS-91064: Invalid tracking information”。它针对的是 PrivacyInfo.xcprivacy 文件,也就是每个 App 和每个 SDK 都可以内置的隐私清单。这个文件里有两个和追踪相关的键,这里的“追踪”是 App Tracking Transparency 意义上的追踪:
NSPrivacyTracking:如果 App 或 SDK 把数据用于追踪,就为 true。NSPrivacyTrackingDomains:为追踪而连接的域名列表。
Apple 在关于无效清单的技术说明里列出了三种会被拒的组合:
NSPrivacyTracking为 true,但域名列表是空的。需要把列表填上。我就是这种情况。NSPrivacyTracking为 true,但某个域名写错了。域名不能带路径,结尾也不能有斜杠。NSPrivacyTracking为 false,却列了域名。需要删掉这个列表。
根本规则写在隐私清单的文档里:NSPrivacyTracking 为 true 时,必须提供域名列表。
Apple 的邮件会给出出错文件的名称和路径。 仔细看这个路径:它能告诉你问题出在你 App 自己的清单,还是某个内置 SDK 的清单。
和其他 ITMS 错误一样,这不是审核员拒的。检查是自动的,在提交构建时进行,构建会被直接丢弃。
为什么会出现:每个目标各有一份清单
坑就在这里。SDK 往往自带一份清单,里面有它的域名。你可能以为这就够了。但你的 App 也有自己的清单,在我这里被 Apple 拒掉的正是 App 的那一份。
我的情况发生在 2026 年 7 月 21 日。给 TradaZen 接入广告归因工具时,我在 App 配置里声明了 NSPrivacyTracking: true,这本身没错。但我没有加 NSPrivacyTrackingDomains。SDK 的清单是完整的。而 App 的清单由 Expo 根据我的配置生成,写着“true”,列表却是空的。构建在处理阶段就被拒了。
教训:SDK 的清单覆盖不了你 App 的清单。只要你在配置里声明了追踪,就要同时声明域名。
在 Expo App 中修复 ITMS-91064
在 Expo 里,App 的清单在配置中的 ios.privacyManifests 下设置。原理见 Expo 的隐私文档,这个键的说明见配置参考。
- 找到 SDK 的追踪域名。 照抄你构建里实际内置的那个版本的清单列表,而不是网上最新版本的:两者可能不一样。不要自己编。
- 把它们加进配置。 下面两个域名只是示例,要换成真实的:
{
"expo": {
"ios": {
"privacyManifests": {
"NSPrivacyTracking": true,
"NSPrivacyTrackingDomains": [
"example-tracking-domain.com",
"another-tracking-domain.com"
]
}
}
}
}
- 在花钱构建之前检查生成的文件,前提是你的
ios目录由 Expo 生成并被 git 忽略。运行npx expo prebuild -p ios,然后打开ios目录里生成的PrivacyInfo.xcprivacy文件。里面应该有值为true的NSPrivacyTracking,以及完整的域名列表。 - 重新构建并重新提交。 清单是二进制文件的一部分:远程更新改不了它。
第 3 步要注意:这个命令可能会删除并重建 ios 目录。如果你手动改过里面的东西,就别在项目上直接运行。在副本上操作。
如果你的 App 根本不做追踪,那就更简单:把 NSPrivacyTracking 设为 false,并删掉列表。
这些域名对你的用户意味着什么
声明这些域名不只是走个形式。根据 Apple 的文档,如果用户没有在 App Tracking Transparency 弹窗里同意追踪,发往这些域名的请求就会失败。这是预期行为:只有用户同意了,追踪才会发出去。
你的 App Store 页面也要说同样的话。如果清单声明了追踪,页面上的隐私声明和你的隐私政策也必须写明。否则之后你可能会被审核员以 5.1.1 或 5.1.2 条款拒绝:详情见 App 的隐私政策。
顺利提交你的构建
ITMS 错误只要会看,修起来很快。之后的人工拒绝则需要更多思考:处理思路见 App 被 Apple 拒绝 页面,最常见的原因见 Apple 为什么拒绝 App。
想在提交前检查你的材料,Apple Review Kit 收录了我的检查清单,以及会帮你审查项目的 Claude Code skills。如果提交卡住了,想找个人帮你看看,和我预约一小时:我们视频连线,在你的屏幕上一起过你的项目。如果你正在准备第一次上架,做一下免费诊断:它会帮你理顺步骤顺序,并把我的 Apple 防拒检查清单发给你。
常见问题
ITMS-91064 算是 App Review 拒绝吗?
不算人工审核员的拒绝。这是构建提交时、进入审核之前的自动检查。构建会被丢弃:你需要修正隐私清单,再提交一个新构建。
NSPrivacyTrackingDomains 里应该填什么?
填你的 App 或 SDK 为追踪而连接的域名。照抄你构建中内置的那个版本的 SDK 清单里列出的域名。列表为空且 NSPrivacyTracking 为 true,正是 Apple 会拒绝的组合之一。
我的 SDK 清单还不够吗?
不够。在 TradaZen 上,SDK 的清单是完整的,构建照样被拒:因为 App 的清单声明了追踪,却一个域名都没有。只要 App 配置声明了追踪,就必须同时列出域名。
我的 App 不做追踪,该怎么办?
在配置里把 NSPrivacyTracking 设为 false,并删掉域名列表。然后确认你的 App Store 页面和隐私政策说的是同一回事。
不重新构建能修复 ITMS-91064 吗?
不能。隐私清单是提交给 Apple 的二进制文件的一部分。你必须修改配置、重新构建并重新提交。