iOS 上传 App Store 时,
ITMS-90035 是一个典型的签名错误。很多人第一次看到时会以为 IPA 损坏了,但实际情况里,这个错误更多和 证书、描述文件、签名方式、导出方式有关。
尤其在 Flutter、uni-app、React Native、HBuilderX、Jenkins 自动构建,这些场景里更容易出现
错误信息一般类似ERROR ITMS-90035:Invalid Signature,或者This bundle is invalid
Apple 的意思是上传的 IPA 签名校验失败
需要先区分:
| 阶段 | 是否属于 ITMS-90035 |
|---|---|
| Xcode Archive 失败 | 否 |
| IPA 安装失败 | 不一定 |
| 上传后被 Apple 拒绝 | 是 |
| Processing 失败 | 很可能 |
这是实际项目里出现最多的情况。
例如使用了 Development 证书,但上传目标是 App Store,这种情况下 IPA 可以生成,真机可能能安装,上传失败
正确做法是上传 App Store 必须使用:
| 类型 | 用途 |
|---|---|
| iOS Distribution | App Store 发布 |
| App Store Profile | App Store 上传 |
另一个高频问题:描述文件和证书不一致,例如:
| 项目 | 实际类型 |
|---|---|
| 证书 | Distribution |
| Profile | Development |
或者反过来。
打开.mobileprovision文件,重点检查:
| 字段 | 内容 |
|---|---|
| Name | Profile 名称 |
| TeamIdentifier | 团队 |
| Entitlements | 权限 |
| ProvisionedDevices | 是否测试版 |
| ProvisionsAllDevices | 企业版 |
一个容易忽略的问题:Profile 中的 App ID 和实际打包 Bundle ID不一致,例如:Profile:com.demo.app,但实际是com.demo.test,上传时 Apple 会直接判定签名无效。
在 HBuilderX 云打包中,经常看到Profile 文件中的应用标识与包名不匹配原因就是manifest.json、Bundle ID、mobileprovision 三者不一致。
出现这些问题更省时间的方法是重新生成完整签名,包括 Bundle ID、证书、描述文件 一起重新生成。
Windows 环境里如何重新生成,这里可以直接使用 AppUploader(开心上架),在 Windows 中完成 Bundle ID 管理、Distribution 证书创建、App Store 描述文件生成、IPA 上传,不依赖 Xcode和钥匙串
例如,com.company.app,确保Apple 后台、打包配置、Profile 全部一致。
不要继续使用旧 Development 证书。
注意不要选 Development 类型
如果是 XcodeExport → App Store Connect,不要Ad Hoc
CI 环境中容易出现证书存在,但私钥丢失的情况,表现为本地能上传但是Jenkins 上传失败这是因为P12 不完整
所以要检查 IPA 是否真的被正确签名
解压 IPA 命令:
unzip app.ipa,查看Payload/App.app,检查"_CodeSignature"“embedded.mobileprovision"是否存在。
最近 Apple 对旧上传协议限制越来越严格,,如果看到
Deprecated Transporter usage,说明上传工具过旧或者 Transporter 协议被弃用
这时可以升级上传工具或者使用新上传通道。
GUI 上传很多错误会被折叠,CLI 更容易看到"metadata”、“transporter”、“signing”、“upload session"的完整日志。例如:
appuploader_cli upload \ -f app.ipa \ -u user@example.com \ -p xxxx-xxxx-xxxx-xxxx \ --type ios
最后可以把问题归纳成:
| 类型 | 是否高频 |
|---|---|
| 证书类型错误 | 很高 |
| Profile 类型错误 | 很高 |
| Bundle ID 不一致 | 很高 |
| 私钥缺失 | 中 |
| 上传协议过旧 | 中 |
| IPA 损坏 | 低 |
ITMS-90035 本质上是 Apple 在校验这份 IPA 是否来自合法完整的签名,因此排查重点不在“上传按钮”,而在证书、描述文件、Bundle ID、导出方式这些环节是否一致。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70046796/viewspace-3173546/ ,如需转载,请注明出处,否则将追究法律责任。