# TestFlight 使用教程：iPhone 应用上架前测试

> 内部与外部测试员、Beta 审核、公开链接、构建版本有效期 90 天：一文讲清 TestFlight。

原始页面：[TestFlight 使用教程：iPhone 应用上架前测试](https://devoria.fr/zh-hans/blog/testflight-guide-test-iphone-app)
作者：[Mehdi Azizi](https://devoria.fr/zh-hans/mehdi-azizi)
发布：2026-09-23
内容最后修订：2026-10-09


## TestFlight 是什么，有什么用？

TestFlight 是 Apple 提供的服务，让你在应用上架 App Store 之前，把它装到真实的 iPhone 上。你把构建版本（build）上传到 App Store Connect，邀请测试员，他们用 App Store 上免费的 TestFlight 应用安装即可。测试员分两类：内部测试员，最多 100 名团队成员，不需要 Apple 审核；外部测试员，最多 10,000 人，通过邮件或公开链接邀请，你的第一个构建版本要先通过 Beta 审核。每个构建版本可测试 90 天。

| 项目             | 内部测试员           | 外部测试员         |
| ---------------- | -------------------- | ------------------ |
| 人数上限         | 100                  | 10,000             |
| 能否访问你的账号 | 能，需分配角色       | 不能               |
| 邀请方式         | 加入内部群组         | 邮件或公开链接     |
| Apple Beta 审核  | 无                   | 第一个构建版本需要 |
| 适合谁           | 你自己、合伙人、亲友 | 朋友、早期用户     |

使用 TestFlight 需要一个[付费的 Apple Developer 账号](https://devoria.fr/zh-hans/blog/apple-developer-account-price-free-or-99)：[免费账号用不了这项服务](https://developer.apple.com/support/compare-memberships/)。本指南后面的内容都默认你有一个标准计划的账号：Apple 企业计划不能使用 TestFlight。

我的每个应用，用 EAS Submit 上传的每个构建版本，都会先经过 TestFlight 和我自己的 iPhone，然后才提交审核。开发时看不出来的问题，我都是在这一步发现的。

## 把构建版本上传到 TestFlight

构建版本就是你应用编译并签名后的版本：签名有问题的话，Apple 会在上传时以 ITMS-90034 拒收。要让它出现在 TestFlight 里，你得把它上传到 App Store Connect。用 Expo 的话，就是先 `eas build --platform ios`，再 `eas submit --platform ios`，构建镜像要够新，才能避免 ITMS-90725。[根据 Expo 文档](https://docs.expo.dev/submit/ios/)，Apple 处理完之后构建版本就会出现在 TestFlight 里，一般需要 10 到 15 分钟。这些在 PC 上都能完成：[没有 Mac 也能发布 iOS 应用](https://devoria.fr/zh-hans/blog/publish-ios-app-without-mac-expo-eas)这篇指南讲了完整流程。

第一次常卡在两个细节上：

- **每次上传，构建号都必须变。** 同一个版本，Apple 不接受两个构建号相同的构建版本。用 EAS 的话，打开自动递增，就不用再操心了。
- **加密相关的问题。** 只要你还没回答关于加密使用的问题，构建版本就会卡在缺少合规信息的状态。你可以每次在 App Store Connect 里回答，也可以在应用配置里一次性声明。

## 内部测试员：你的团队，无需等待

内部测试员是你 App Store Connect 账号下的用户，分配了相应角色。[Apple 最多允许 100 名](https://developer.apple.com/help/app-store-connect/test-a-beta-version/testflight-overview)，每人可以[在多台设备上安装应用](https://developer.apple.com/testflight/)，最多 30 台。

最大的好处：不需要 Beta 审核。构建版本一处理完，只要没有 ITMS-90717 这类自动报错，你把它加到内部群组就能用了。这个群组适合你自己，以及你给了账号权限的合伙人或亲友。

限制在于：他们必须被添加为你 App Store Connect 账号的用户。不适合陌生人。

## 外部测试员与 Beta 审核

外部测试员不需要访问你的账号。[你最多可以邀请 10,000 人](https://developer.apple.com/help/app-store-connect/test-a-beta-version/testflight-overview)，通过邮件或公开链接。这个群组适合朋友、早期用户、社区。

代价是，Apple 会先检查构建版本，再向他们开放。[当你把某个版本的第一个构建版本加入外部群组时](https://developer.apple.com/help/app-store-connect/test-a-beta-version/invite-external-testers)，它会进入 Beta 审核。同一版本后续的构建版本不一定需要完整审核。

提交之前，App Store Connect 会要求你填写测试信息：

- **Beta 版描述**，告诉测试员要重点看什么；
- **用于接收反馈的邮箱地址**；
- **你的联系方式**，方便 Apple 联系你。

> Beta 审核不是 App Store 审核。在 TestFlight 通过的构建版本，正式发布时仍可能被拒。

Beta 审核检查的是构建版本是否符合规则，而最终审核还会看你的商品页、订阅、法律文本和整体体验。常见的被拒原因记在心里，可以看[Apple 为什么拒绝你的应用](https://devoria.fr/zh-hans/blog/apple-app-rejection-reasons-real-cases)。

## 通过公开链接邀请测试员

想让还不认识的人测试你的应用，公开链接是最简单的方式。下面是 [Apple 给出的步骤](https://developer.apple.com/help/app-store-connect/test-a-beta-version/invite-external-testers)，界面标签用英文：

1. 在 App Store Connect 里打开你的应用，进入 **TestFlight** 标签页。
2. 在 **External Testing** 下选择你的外部群组。
3. 点击 **Create Public Link**。
4. 选 **Open to Anyone** 向所有人开放，或选 **Filter by Criteria** 限定特定设备和 iOS 版本。
5. 如果需要，用 **Set Limit** 设置测试员人数上限。

然后把链接发到任何地方：消息、社交网络、邮件。对方安装 TestFlight 应用，打开链接，接受邀请即可。

大范围传播之前，有两点要知道：

- **设置上限。** 万一链接传得比预想的广，你仍能控制测试员人数。
- **通过公开链接加入的测试员是匿名的。** App Store Connect 对他们只显示安装日期、会话和崩溃。如果你想知道谁测了什么，最好用邮件邀请。

## TestFlight 构建版本能用多久？

[构建版本对测试员开放 90 天](https://developer.apple.com/help/app-store-connect/test-a-beta-version/testflight-overview)。过期后，测试员就打不开了。如果你的测试期更长，在到期前上传一个新构建版本就行。

实际上，你上传新构建版本的频率会高得多：每次重要修复都会传。每个加入群组的新构建版本都会推送给测试员，他们在 TestFlight 应用里获取。

## 收集测试员的反馈

TestFlight 内置反馈功能：[测试员在你的应用里截图，可以标注，然后发给你](https://developer.apple.com/testflight/)。如果应用崩溃，你会收到崩溃报告，测试员还可以补充说明。这些都能在 App Store Connect 里看到。

这很有用，但要搞懂某个具体崩溃还不够。我的应用里会加 Sentry，它能报告错误并定位到出问题的代码行；再加 PostHog，能看到用户在哪一步放弃。两者在 TestFlight 构建版本里和正式环境中都能用。

## 在 TestFlight 中测试订阅

如果你的应用卖订阅，TestFlight 就是验证它是否真能用的地方。[TestFlight 构建版本里的购买走的是 Apple 的测试环境](https://developer.apple.com/help/app-store-connect/test-a-beta-version/testing-subscriptions-and-in-app-purchases-in-testflight/)：测试员不会被扣款。续订是加速的：不管实际时长是多少，每个订阅每天续订一次，一周内最多六次。

至少要检查：显示的价格正确，购买后应用确实解锁，重装后恢复购买按钮能找回订阅。我用 RevenueCat 管理应用的订阅；从 App Store Connect 里的产品到付费墙，整套搭建方法都写在 [iOS 应用内订阅](https://devoria.fr/zh-hans/expertise/ios-in-app-subscription)这一页。

## 提交 Apple 之前要测试什么

这是我每次提交审核前都会过一遍的清单。每一项都对应一个被拒原因，或一个本可避免的崩溃。

### 首次启动

- 删除应用，从 TestFlight 重新安装，打开。审核员就是这么做的。
- 完整走一遍引导流程，什么都别跳过。
- 拒绝每一项权限（通知、相机、定位），确认应用还能正常运行。

### 付费

- 付费墙显示价格、时长，以及使用条款和隐私政策的链接。
- 购买能用，恢复购买也能用。
- 所有配置好的产品审核员都能看到：[准则 2.1](https://developer.apple.com/app-store/review/guidelines/) 要求应用内购买完整、可见且可用。

### 恶劣条件

- 飞行模式和慢速网络：给出清楚的提示，而不是白屏。
- 你支持的最小和最大 iPhone：没有内容被截断，没有被键盘遮挡。我的 Solys 就因为小屏 iPhone 上画面被截断而被拒过一次。
- 如果应用有多语言版本，检查长文本。

### 给审核员的材料

- 如果应用需要登录，在审核备注里提供演示账号，并保持后端在线。准则 2.1 明确要求这一点。
- 审核备注用两句话说明应用是做什么的、主要功能在哪里。

如果应用还是被拒了，[应用被 Apple 拒绝](https://devoria.fr/zh-hans/expertise/app-rejected-by-apple)这一页讲了如何回复，不浪费一周时间。想了解从商品页到上线的发布全貌，请看[在 App Store 上发布应用](https://devoria.fr/zh-hans/expertise/publish-an-app-on-the-app-store)。

## 一份可以在你的构建版本上填写的验收表

[下载包含 16 个场景的 CSV 验收表](https://devoria.fr/ressources/recette-premiere-app-ios.csv)。它分为准备工作、要执行的操作、预期结果和实际观察到的证据。导入 Numbers、Excel 或 Google Sheets，然后填写每次测试的版本、设备和结果。

以一个虚构的读书笔记应用为例，只写"保存一页"是不够的：记下第 24 页，彻底关闭应用，重新打开，确认数值还在。没有实际执行的测试，就保持"待测试"。如果你的应用没有订阅，购买相关场景填"不适用"，并注明原因。

这份表是需要你调整的起点，不是认证。你还可以看看 [App Review 备注和其他免费模板](https://devoria.fr/zh-hans/resources)，用来向审核员说明你真正验证过的流程。

## 从 TestFlight 到 App Store

TestFlight 是你的应用变得真实的一步：它运行在真实的 iPhone 上，握在真实的人手里。在 [iOS Kit](https://devoria.fr/zh-hans/kits/ios) 的流程中，这是第二步：搭好应用核心，用 TestFlight 在你的 iPhone 上测试，然后接入订阅，再准备发布。

TestFlight 之后就是 Apple 审核：[Apple Review Kit](https://devoria.fr/zh-hans/kits/review-apple) 汇集了我的提交前清单和给审核员的备注。首页介绍了用 Claude Code [开发你的移动应用](https://devoria.fr/zh-hans)的四个步骤。

没人能保证 Apple 一定会通过你的应用：决定权在 Apple。

## 常见问题

### 怎么用 TestFlight 测试 iPhone 应用？

把构建版本上传到 App Store Connect，然后加到一个测试员群组。用 Expo 的话，用 EAS Build 编译，再用 [EAS Submit](https://devoria.fr/zh-hans/blog/eas-submit-ios-publish-expo-app-store) 上传：根据 Expo 的说法，Apple 处理完后它会出现在 TestFlight 里，一般需要 10 到 15 分钟。测试员用 App Store 上免费的 TestFlight 应用安装。你需要一个付费的 Apple Developer 账号。

### 怎么生成 TestFlight 链接邀请测试员？

在 App Store Connect 里打开应用的 TestFlight 标签页，在 External Testing 下选择群组，点击 Create Public Link。选择 Open to Anyone 或 Filter by Criteria，再用 Set Limit 设置上限。通过公开链接加入的测试员是匿名的：如果想知道谁测了什么，最好用邮件邀请。

### TestFlight 的 Beta 审核能代替 App Store 审核吗？

不能。Beta 审核检查构建版本是否符合规则，而最终审核还会看你的商品页、年龄分级、订阅、法律文本和整体体验。所以在 TestFlight 通过的构建版本，正式发布时仍可能被拒。只有外部测试员会触发 Beta 审核，针对的是某个版本的第一个构建版本：内部测试员不需要任何审核。

### TestFlight 最多能邀请多少测试员？

最多 100 名内部测试员和 10,000 名外部测试员。内部测试员是你 App Store Connect 账号的成员，不需要 Beta 审核，每人最多可在 30 台设备上安装应用。外部测试员通过邮件或公开链接邀请，第一个构建版本需先通过 Beta 审核。每个构建版本可测试 90 天。

### 在 TestFlight 里测试订阅会扣钱吗？

不会，TestFlight 构建版本里的购买走的是 Apple 的测试环境：测试员不会被扣款。续订是加速的：不管实际时长是多少，每个订阅每天续订一次，一周内最多六次。至少检查显示的价格、应用是否解锁，以及重装后能否恢复购买。完整搭建方法见 [iOS 应用内订阅](https://devoria.fr/zh-hans/expertise/ios-in-app-subscription)。

### 提交 Apple 之前，要在 TestFlight 里检查什么？

像审核员那样从 TestFlight 重新安装应用，完整走一遍引导流程。拒绝每一项权限，测试购买和恢复购买，再试试飞行模式，以及你支持的最小和最大 iPhone。如果应用需要登录，在审核备注里准备好演示账号，并保持后端在线。


## 你的项目

[Apple Review Kit](https://devoria.fr/zh-hans/kits/review-apple)：我在用的 App Store 审核检查清单、我被 Apple 拒绝后的修改、给审核员的备注，以及两个审查你 App 的 Claude Code skills。29 €。

[iOS Kit](https://devoria.fr/zh-hans/kits/ios)：用 Claude Code 做你的 iPhone App：我自己 App 的起步代码、检查其工作的 skills，以及 Apple Review Kit、App Store Screenshots Kit 和 ASO Kit。129,99 €。
