Xcode Archive + Upload:把构建传上 App Store Connect
上传构建的前置条件
在 Archive 上传之前,确保以下几点全部搞定:
- Xcode 登录了你的开发者 Apple ID:Xcode → Settings → Accounts → 加号 → 选 Apple ID → 登录。
- Bundle Identifier 已在 App Store Connect 创建:App Store Connect 里 App 的 Bundle ID 必须和 Xcode 里 Project → Signing & Capabilities 里选的完全一致。
- 签名设为 Automatic:Signing & Capabilities → Team 选你的开发者计划 → 勾选 Automatically manage signing。让 Xcode 帮你处理 Provisioning Profile,省去手动签名的麻烦。
- Deployment Target 满足 TestFlight 最低要求:iOS 16、macOS 13、tvOS 18、visionOS 1、watchOS 9 起才能跑 TestFlight。低于这些版本的设备装不了 TestFlight 也装不了你的 Beta 版。
- Provisioning Profile 里必须包含 Application Identifier:如果是手动签名,确保 Profile 里勾了 App ID,不然 TestFlight 不认。
Archive 上传流程
- 在 Xcode 里选 Any iOS Device (arm64) 或对应的 macOS / tvOS / visionOS / watchOS 目标设备。不能选模拟器。
- 顶部菜单 Product → Archive。Xcode 会编译、打包、签名,然后弹出 Organizer 窗口显示刚生成的 Archive。
- 在 Organizer 里选刚生成的 Archive → 点右上角 Distribute App。
- 选择分发方式 → App Store Connect → Upload → Next。
- Xcode 会帮你完成签名校验、加密合规自声明弹窗(见 02-developer-prep/03-encryption-compliance.md),然后上传到 Apple 的服务器。
- 上传完 Organizer 里会显示 Processing 状态,表示 Apple 正在解析构建。处理时间通常 1~30 分钟,大构建(超过 500MB)可能更久。
上传失败的常见原因
| 错误 | 原因 | 解决方式 |
|---|---|---|
| ITMS-90129 | Bundle Identifier 不匹配 | 检查 App Store Connect 和 Xcode 里的 Bundle ID,必须逐字一致 |
| ITMS-90530 | 签名 Profile 问题 | 在 Xcode 里清一下 Derived Data(Cmd+Shift+K),重新 Archive |
| ITMS-90171 | 包含非平台代码 | 别把 .dylib、framework 的源码目录打进 Bundle |
| 卡住 Processing 超过 2 小时 | 大构建或 Apple 服务器波动 | 用 Xcode 删掉当前 Archive,重新 Archive + Upload |
Alternative:Xcode Cloud 自动上传
如果你用 Xcode Cloud 做 CI/CD,可以让 Archive + Upload 完全自动跑起来。设置好 Workflow 之后,每次推代码到主分支,Xcode Cloud 自动 Archive、签名、上传到 App Store Connect。再给内部组开启自动分发,整个链路从 commit 到测试者设备全程自动,不用手动点任何按钮。