构建 Processing 完了之后:出现在 TestFlight Builds 面板
构建出现在 App Store Connect 之前
上传完 Archive 之后,你在 Xcode Organizer 里会看到 Processing 状态。这个阶段 Apple 在做什么?
- 把你上传的构建解压,校验签名。
- 用 App Store Connect 服务器重新签名一遍——这一步是 TestFlight 分发的核心,签名由 Apple 控制,防止你用非官方签名篡改构建。
- 提取元数据:版本号(CFBundleShortVersionString)、构建号(CFBundleVersion)、Bundle ID、支持的平台、App 大小、加密合规声明。
- 给这个构建分配一个 Build Number(不是你 App 里的 CFBundleVersion,是 Apple 内部的唯一标识)。
构建状态速查
Apple 处理完后,你会在 App Store Connect → TestFlight → Builds 里看到新构建。状态列会显示以下几种之一:
| 状态 | 含义 | 能做什么 |
|---|---|---|
| Processing | Apple 正在解析 | 等 |
| Ready to Submit | 准备好加入测试组 | 可以加进内部或外部组 |
| Waiting for Review | 加进外部组了,等 TestFlight 审核 | 等 Apple 审核(首构建) |
| Testing | 已在某个组里分发 | 测试者可以看到 |
| Inactive | 被手动过期了 | 测试者看不到 |
| Expired | 90 天到期了 | 测试者看不到 |
版本号和构建号的坑
很多开发者在这里踩坑:
- CFBundleShortVersionString(版本号,比如 1.0.0)可以重复上传到 TestFlight——同版本号下可以有多个构建版本。但提交 App Store Review 的正式版,版本号不能低于已上架的版本。
- CFBundleVersion(构建号,比如 123)必须每次上传都递增,而且在 App Store Connect 的全局范围内不能重复(同一个开发者账户下所有 App 的构建号必须唯一)。重复了 Apple 会直接拒绝上传。
- 内部测试不需要任何审核,但加进外部组的首构建要过 TestFlight 审核。审核通过后同版本号的后续构建可以直接 Push,不用再等审核。
Provisioning Profile 的 Application Identifier 要求
Apple 有一个隐藏规则:用于 TestFlight 的 Provisioning Profile 必须包含 Application Identifier。
- 自动签名模式(推荐)下 Xcode 自动帮你创建和更新 Profile,不会缺。
- 手动签名模式下,如果你发现构建上传后 Processing 完了但 Ready to Submit 之前卡着,或者加入测试组时报错「Profile missing Application Identifier」,回去登录 Apple Developer → Certificates, Identifiers & Profiles → 找到这个 Profile → Edit → 勾选 App ID → Save → Download → 重新 Archive + Upload。
构建列表视图
App Store Connect TestFlight → Builds 面板的表格列:
- Version:CFBundleShortVersionString
- Build:CFBundleVersion
- Platform:iOS / macOS / tvOS …
- Status:当前状态(见上方速查表)
- Activity:运行的会话总数
- Crashes:崩溃次数
- Feedback:收到的反馈数
- Installs:安装设备数
点一行进去可以看到这个构建的详细统计、关联的测试组、崩溃列表。