2026-04-28 App Store 分阶段发布、TestFlight「构建列车」,以及在香港 / 日本 / 韩国 / 新加坡 / 美国租用 Apple Silicon 云 Mac 上的上线清单
移动端发布经理若在新加坡或东京SSH 进租用的 Mac mini M4 跑 xcodebuild archive,往往同时撞上两套「慢」系统:TestFlight(beta、测试者与构建处理),以及App Store 的客户更新路径(分阶段或一次性)。苹果的App Store 更新分阶段上架——常被描述为对自动更新客户在约7 日内按百分比爬坡——并不是 TestFlight 特性,但值守手册、Slack 状态频道与 Git 标签仍需对齐。本篇 2026-04-28 手册:(1) 划分 TestFlight 内/外圈与 App Store 产品版本职责;(2) 明确构建列车工件(同一提交 → 同一 CFBundleVersion / 构建号家族)勿意外分叉;(3) 给出可与既有 IPA 导出 + App Store Connect API 自动化并列记录的数字化清单。若需证明分阶段上架的二进制即为测试二进制,可与 无界面 Archive + 签名及 xcodebuild 覆盖率门限 串联阅读。
TestFlight 与 App Store:两套受众,一条工具链
TestFlight 是产品与 QA对人证明行为之处(先内测后外测),苹果的处理队列、权利与出口合规元数据仍参与故事。App Store 客户更新——无论一次全量还是分阶段——面向商店里的版本记录,而非 beta 计划。经典运维失误:启用分阶段 App Store 的同时,市场仍指向某路TestFlight 构建号,而该号在该列车上永不会以相同叙事出现在商店。修复办法是词汇:工单里始终写清「TF 构建」与「商店版本 3.2.1 (8)」。
- TestFlight — 常见项目中外测可达 100–10,000 人;快速迭代崩溃与反馈,再把胜出构建推向发布。
- App Store — App Store Connect 中的产品版本 + 构建对,成为客户更新;分阶段发布决定该更新在一周内如何触达自动更新客户。
7 日 App Store 分阶段模型(关键数字)
苹果公开的分阶段日程会逐日提高自动更新客户比例;手动更新用户与新安装用户往往立即拿到最新,因此支持话术需覆盖两类人群。许多团队的操作节奏:第 0 天 开启分阶段并监控无崩溃会话;第 1–2 天 大流量反馈最快;到第 3–4 天 应观察工单是否被旧版 iOS 切片主导,而非意外权利回退。暂停是一等状态——把暂停当正式事件:记录批准人、时长与 App Store Connect UI/API 证据。
租用构建机上仍需完成的事
App Store 分阶段状态机不会免除你在可信主机上归档、导出与签名 IPA 的责任。租用的 Mac mini M4(HK / JP / KR / SG / US)仍是编译真值:你在 按作业固定 Xcode 中核验的 codesign 身份,以及 导出手册 中的 ExportOptions.plist 选择,必须在任何分阶段开关之前被 App Store Connect 正确摄入。
真实团队的「构建列车」:一位车长,不要三位
把构建列车想象成:某产品线的候选发布序列呈线性排列,且同一时间至多一个候选「上车」App Store。分布式团队的失败模式:两名发布经理在同一天上传不同 IPA,只因发布分支与热修分支在各自 Runner 上都有绿 CI。2026 年在繁忙 SSH 主机上最小可行纪律:每次触发 Archive 的 release/x.y 合并都必须在单次 CI 门禁提交里抬升 CFBundleVersion——精神上与已采用的 自托管 Runner 卫生一致。
git tag v3.2.1-build-4821
# 同一标签挂到 ASC 构建记录与 CI 日志工件桶路径
一张矩阵:从 CI 绿到「客户能更新」
| 渠道 | 证明什么 | 典型门禁 |
|---|---|---|
| PR CI(模拟器 + 单测) | 在固定 SDK 上编译 + 测试 | 红线拦截合并;参考 无头测试与 覆盖率门限 |
| TestFlight 内测 | 冒烟、权利健全性、人工关键路径 | 外扩前在同一构建上连续两个工作日夜间稳定 |
| TestFlight 外测 | 更广设备矩阵 + App 审核元数据 | 分层测试人群;首道指标无崩溃率 > 99.0% |
| App Store(分阶段或全量) | 商店页 + 法务 + 区域定价 | 值班与 PM 签署回滚与暂停手册 |
九步手册:周二归档 → 周五稳态
- 冻结分支 — 封板后不再随手改 CocoaPods 或 SwiftPM 解析;重读 缓存纪律。
- 在发布标签上跑 Archive — 在租用的 Mac 上记录
xcodebuild -version并做 签名 预检。 - 导出 IPA — 使用评审过的
ExportOptions.plist,按 导出指南 经 API 上传——CI 避免临时 Transporter。 - 跟踪处理 — 在 App Store Connect 观察;在日志桥接里输出
buildProcessingState等到 Slack;对ITMS-类错误带着原始 JSON 快速失败。 - TestFlight 先内测;收集两个工作日崩溃日志且无 sev-2 尖峰。
- 外测人群配书面测试说明(尤其针对14 天首装人群)。
- App Store 版本:附发布说明、如需则附截图差异,再按风险承受度选择分阶段或立即。
- 开启分阶段:定义谁可暂停(需来自不同团队的两把钥匙)、可接受的最长暂停墙钟(在文档中引用 Apple 的30 天上限语境),以及何时「向所有用户发布」。
- 发布后:若第 2 天无崩溃率相对基线偏离超过 0.3% 就开复盘——常见是权利差异,而不是「新加坡运气差」。
App Store Connect API、运维看板与证据
2026 年偏自动化的团队不会同一 UI 盯三遍;会用已在 CI 文档化的 JWT 密钥拉取版本资源,并把 phased release state 映射到仪表板。持久技能是:在合规允许范围内把 API 密钥角色收至最窄、与 CI 签名证书同周期轮换,且永远不要把密钥写进共享 SSH 用户的 shell 历史——与 无头签名及 访问模式 文章同构。若暂时无法接 API 读权限,至少 nightly 把 ASC UI 快照到工件桶,让审计有带时间戳的 PNG;朴素胜过英雄主义。
常见问题:不必问五个人就知道「我们是不是分阶段」
| 问题 | 2026-04-28 实务答复 |
|---|---|
| 活跃分阶段过程中上了热修复——接下来? | 先停:阅读 Apple 当前指南(旧帖可能在政策变动前);实践上常需新的 app 版本并决定是否在飞的车上先踩刹车——记录决策,别对第二个构建号「赌一把」。 |
| 小区域分阶段覆盖面是否不同? | 用户数因应用而异;若产品重度本地化,仍要按区域监控崩溃与假死——HK / JP / KR / SG / US 是 MacXCode 常见共置点,可对齐测试者与审核预期。 |
为何 Apple Silicon Mac mini M4 仍出现在这篇叙事里
发布速度取决于多快信任最后一次绿流水线:区域内裸金属 Mac mini M4 带来可预期的 xcodebuild 时间、对大 .xcarchive 树诚实的磁盘 IO,以及代码签名前稳定的时钟——这一切都在 App Store Connect 看到字节之前。虚拟化或共享 Runner 仍可用,但当周五活动依赖凌晨 3:00 UTC 的分阶段波次加上首尔同事盯崩溃时,编译主机活动部件越少,慌乱的 VNC 会话就越少。MacXCode 在香港、东京、首尔、新加坡与美国的 1–2 TB 节点,是为了让你的发布分支叙事与分阶段客户叙事不必在周五晚抢同一块 NVMe。