首页 文章 尺寸规范与审核 TestFlight 显示「缺少合规证明」怎么办?ITSAppUsesNonExemptEncryption 与出口合规加密问题设置

文章目录

  • 快速导航

觉得文章有帮助?

分享给更多需要的人吧!

TestFlight 显示「缺少合规证明」怎么办?ITSAppUsesNonExemptEncryption 与出口合规加密问题设置

官
应用截图工坊官方
10/25/2026
TestFlight 显示「缺少合规证明」怎么办?ITSAppUsesNonExemptEncryption 与出口合规加密问题设置

为什么会出现「缺少合规证明」

很多人第一次把构建传到 App Store Connect,会看到 TestFlight 里的构建状态是 Missing Compliance(缺少合规证明),测试员收不到新版本。原因来自 Apple 的加密出口合规说明:

  • 提交到 TestFlight 或 App Store 时,构建会上传到位于美国的服务器;
  • 只要 App 在美国或加拿大以外分发,无论你的公司在哪里,都要遵守美国出口法规;
  • App 使用、访问、包含或实现了加密,就视为出口加密软件,同时还要符合分发地的进口规定。

所以每次提交新版本,App Store Connect 都会问你一组加密相关问题。没回答之前,构建就停在「缺少合规证明」。这和你的 App 是不是做安全产品无关,几乎所有 App 都会碰到。

两种解决方式

方式做法适合
手动回答在 App Store Connect → TestFlight → 点击该构建旁的「管理」,按提示回答加密问题偶尔上传、临时处理
写进 Info.plist添加 ITSAppUsesNonExemptEncryption 键,之后上传的构建不再询问长期维护、CI 自动上传

手动回答只对当前构建有效,下一次上传还得再答。推荐直接写进 Info.plist。

这个键该填 NO 还是 YES

Apple 对 ITSAppUsesNonExemptEncryption 的说明很明确:

你的情况取值
App(包括它链接的所有第三方库)完全不使用加密NO
只使用豁免于出口合规文档要求的加密形式NO
使用了非豁免加密YES,通常还要提供合规文档

Apple 举的典型例子:使用操作系统内置的加密,比如通过 URLSession 发起 HTTPS 连接,通常豁免上传出口文档;而自研或专有加密算法则不属于豁免。很多普通 App 只是用 HTTPS 调接口、用系统 Keychain 存凭据,大多落在「豁免」一侧,但最终以你对照 Apple 的出口合规概览判断为准。

注意一条容易漏的:Apple 文档提到,使用豁免加密的 App 可能仍需要向美国政府提交年度自我分类报告;而使用非豁免加密并已向 Apple 提供文档的,则不需要该报告。是否适用请自行核实,必要时咨询专业人士。

不同工程怎么加这个键

原生 Xcode 工程

在 Target → Info 标签页的「Custom iOS Target Properties」里新增一项:

  • Key:App Uses Non-Exempt Encryption(即 ITSAppUsesNonExemptEncryption)
  • Type:Boolean
  • Value:NO(或按实际情况 YES)

直接编辑 Info.plist 源码时写成:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

Flutter

编辑 ios/Runner/Info.plist,加入上面那两行即可。

React Native / Expo

裸 React Native 项目同样改 ios/<项目名>/Info.plist。Expo 托管项目可以在 app.json 的 ios.config.usesNonExemptEncryption 里设置为 false,由构建流程写入 Info.plist。

加完后重新打包并上传新构建,已经上传的旧构建不会因此改变状态,旧构建仍需手动回答一次。

需要上传加密文档的情况

如果 App 使用非豁免加密(例如自研加密协议),流程是:

  1. 在 App Store Connect 的 App 信息里,按指引上传所需的加密文档;
  2. Apple 审核文档通过后会给你一个代码;
  3. 把这个代码填到 Info.plist 的 ITSEncryptionExportComplianceCode 键中;
  4. 同时保持 ITSAppUsesNonExemptEncryption 为 YES。

若 App 计划在法国上架并使用了加密,App Store Connect 的问题流程里还可能询问与法国相关的加密申报,按提示准备即可。

自动化上传时的建议

用 fastlane、Xcode Cloud 或其他 CI 自动上传构建时,「缺少合规证明」会让流水线最后一步卡住:构建传上去了,却没法自动分发给测试组。把 ITSAppUsesNonExemptEncryption 写进 Info.plist 后,新构建处理完成即可直接进入 TestFlight 分发,不再需要有人登录后台点「管理」。

建议在上传前做一次快速检查:

  1. 确认键存在:打包后在 .app 包里的 Info.plist 中查一下这个键,避免被构建脚本或多环境配置覆盖;
  2. 多 Target、多环境都一致:Debug、Release、不同 Scheme 用的是不是同一份 Info.plist;
  3. 新增 SDK 后复核:引入新的加密、VPN、即时通讯或支付类库时,重新判断取值是否仍然成立;
  4. 记录判断依据:在项目文档里写下为什么选 NO 或 YES,方便团队成员和以后版本复查。

常见问题

问题解答
加了键还是显示缺少合规证明确认是新上传的构建;检查键写在主 App Target 的 Info.plist,而不是某个扩展或测试 Target
扩展(Widget、通知扩展)也要加吗合规信息以 App 构建为单位回答,主 App 的 Info.plist 设置好即可;如果审核界面仍询问,按提示回答
用了 Firebase、支付 SDK 怎么办键的取值要把第三方库算进去;大多数 SDK 只用系统 HTTPS,但请以 SDK 文档和你的判断为准
选错了会怎样出口合规是法律责任,不只是审核问题;不确定时宁可查清楚再填
国内上架有类似要求吗这是 Apple 针对美国出口法规的流程;国内上架另有 App 备案 等要求,两者互不替代

小结

「缺少合规证明」不是被拒,只是 App Store Connect 在等你回答加密问题。弄清楚 App 属于不加密、豁免加密还是非豁免加密,在 Info.plist 里写好 ITSAppUsesNonExemptEncryption,以后每次上传都能直接进入 TestFlight。等构建跑通、要准备正式上架素材时,可以用 appshotmaker.com 把商店截图一起做好。

准备好开始设计你的应用截图了吗?

立即体验应用截图工坊,创建令人惊艳的视觉展示效果!