上传应用包至TestFlight时遭遇ERROR ITMS-90125错误,寻求解决方案
Hey,我之前踩过这个ITMS-90125的坑,也帮团队排查过好几次,结合Apple官方的要求和实际解决经验,给你梳理下完整的排查思路和解决办法:
ERROR ITMS-90125错误排查思路与解决办法
先简单说下这个错误的本质:Apple的官方链接器(ld64)在构建iOS包时,会自动在二进制文件中加入LC_ENCRYPTION_INFO段,用来标记App是否需要加密(TestFlight或正式上架的包默认要求开启加密,特殊情况除外)。如果这个段缺失、参数无效,或者你的二进制不是用Apple链接器构建的,就会触发这个错误。
排查思路
- 先确认构建工具链:是不是用了非Apple的链接器?比如用Rust、Go这类跨平台语言编译iOS包时,可能会默认使用它们自带的链接器,而非Xcode提供的ld64,这就会导致问题。
- 检查Xcode编译配置:有没有手动修改过链接相关参数?比如在
Other Linker Flags里加了奇怪的参数,干扰了链接器生成加密信息段。 - 确认包的加密状态:是不是手动用第三方工具加密过二进制?Apple需要自己处理加密流程,提前加密会导致它无法识别加密信息。
- 检查构建目标:是不是误传了Debug包?Debug包默认不生成加密信息段,TestFlight只接受Release包。
具体解决办法
1. 确保使用Apple官方链接器
- 如果是Xcode原生构建,打开
Build Settings,搜索Linker,确保是默认的ld(即Apple的ld64),不要替换成第三方链接器。 - 如果是跨平台框架(Flutter、React Native、Rust等)构建,要确保它们的构建脚本调用的是Xcode提供的链接器:
- Flutter用
flutter build ipa命令构建,不要用自定义编译脚本; - Rust的iOS目标要配置使用Apple链接器(可以通过修改
cargo配置实现)。
- Flutter用
2. 修复Xcode编译配置
- 打开
Build Settings,搜索Other Linker Flags,移除任何可能干扰加密信息生成的参数,比如-no_encryption或自定义链接脚本。 - 搜索
Enable Encryption(在Code Signing分类下),TestFlight/上架包建议设为YES;如果你的App确实不需要加密功能(比如未使用任何加密算法),可以设为NO,但需要在App Store Connect的App信息里说明原因。 - 务必用
Release配置构建:Debug版本默认不会生成LC_ENCRYPTION_INFO段,上传前确认构建配置是Release。
3. 检查二进制的加密信息
用otool命令查看二进制里的加密段信息,终端执行:
otool -l 你的App二进制路径 | grep -A 10 LC_ENCRYPTION_INFO
- 如果没有输出,说明链接器没生成
LC_ENCRYPTION_INFO段,需要重新检查构建配置; - 如果有输出,看
cryptid字段:cryptid 1表示已加密(符合TestFlight要求),cryptid 0表示未加密,需要调整Enable Encryption配置后重新构建。
4. 避免手动加密二进制
不要用第三方加密工具提前处理你的App二进制,Apple会在上传TestFlight后自动完成加密流程。如果已经手动加密过,重新构建一个未加密的版本再上传。
5. 清理缓存重新构建
有时候Xcode的缓存会导致奇怪的问题,执行以下操作后重新打包:
- 打开Xcode,选择
Product > Clean Build Folder; - 删除DerivedData目录,终端执行:
rm -rf ~/Library/Developer/Xcode/DerivedData
如果以上方法都没用,建议直接用Xcode的Archive功能打包,然后通过Xcode内置的上传工具提交到TestFlight,避免第三方工具(比如Transporter)可能带来的额外处理问题。
内容的提问来源于stack exchange,提问作者naijoug
相关产品推荐
相关产品推荐

