每个构建 90 天到期:手动 Expire 和自动过期
90 天有效期的工作原理
Apple 对每个上传到 TestFlight 的构建版本有一个硬期限:自上传日期起 90 天。90 天后:
- 测试者设备上的 Beta App 图标还在,但点开后会弹出提示「此构建的测试期已结束」。
- App Store Connect 里该构建的状态变成 Expired,从测试组里自动移除。
- 测试者可以继续保留旧构建但无法运行,要继续测试必须等开发者上传新构建。
过期前的提醒
TestFlight App 会在每个 Beta App 的名称下方显示剩余测试天数,例如「剩余 27 天」。开发者在 App Store Connect → TestFlight → Builds 面板里,每个构建旁边也会显示过期日期。
手动提前过期
开发者可以在 App Store Connect 里主动过期一个构建:
- 进入 App → TestFlight → Builds。
- 找到要过期的构建 → 点状态旁的菜单 → Expire。
- 确认后,该构建从所有测试组中移除,测试者设备上变成不可运行状态。
手动过期的常见场景:
- 构建有严重 bug,不想让更多测试者装:立刻 Expire,同时推一个修 bug 的新构建。
- 已经有新版本了,旧版本不再需要测试:手动 Expire 清理 Builds 列表,节省名额。
- 测试完成准备上架了:把所有旧构建 Expire,只留准备提交 App Store Review 的那个构建。
构建名额:最多 100 个在 TestFlight
TestFlight 有一个不太显眼的限制:每个 App 同时处于 TestFlight 状态的构建版本最多 100 个。超过后无法再往 Builds 面板里加新构建(即使你 Archive + Upload 成功了,Ready to Submit 之后加不进任何组)。
解决方式就是手动 Expire 旧构建。通常活跃测试中不会达到 100,除非你上传了很多小版本又没清理。
测试者侧:过期后的体验
90 天到期后,测试者打开 Beta App 会看到:
「此 App 的测试期已结束。要继续使用,请联系开发者获取新版本,或从 App Store 下载正式版。」
Beta App 不会自动从设备上卸载,图标还在。测试者可以在 TestFlight App 里点「停止测试」彻底移除,也可以直接在主屏长按图标删除。
实操建议
- 每周至少推一个新构建:这样测试者永远有新鲜的 90 天有效期,不用专门去管过期问题。
- 在外部组里同时保留 2~3 个构建:万一最新构建崩了,可以让测试者切回上一个稳定版。
- 手动 Expire 比等 90 天更干净:App Store Connect 里留太多 Inactive / Expired 构建不好看,定期清理。