TestFlight 使用教程:iPhone 应用上架前测试
作者:Mehdi Azizi
更新于 ,8分钟
内部与外部测试员、Beta 审核、公开链接、构建版本有效期 90 天:一文讲清 TestFlight。
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 账号:免费账号用不了这项服务。本指南后面的内容都默认你有一个标准计划的账号: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 文档,Apple 处理完之后构建版本就会出现在 TestFlight 里,一般需要 10 到 15 分钟。这些在 PC 上都能完成:没有 Mac 也能发布 iOS 应用这篇指南讲了完整流程。
第一次常卡在两个细节上:
- 每次上传,构建号都必须变。 同一个版本,Apple 不接受两个构建号相同的构建版本。用 EAS 的话,打开自动递增,就不用再操心了。
- 加密相关的问题。 只要你还没回答关于加密使用的问题,构建版本就会卡在缺少合规信息的状态。你可以每次在 App Store Connect 里回答,也可以在应用配置里一次性声明。
内部测试员:你的团队,无需等待
内部测试员是你 App Store Connect 账号下的用户,分配了相应角色。Apple 最多允许 100 名,每人可以在多台设备上安装应用,最多 30 台。
最大的好处:不需要 Beta 审核。构建版本一处理完,只要没有 ITMS-90717 这类自动报错,你把它加到内部群组就能用了。这个群组适合你自己,以及你给了账号权限的合伙人或亲友。
限制在于:他们必须被添加为你 App Store Connect 账号的用户。不适合陌生人。
外部测试员与 Beta 审核
外部测试员不需要访问你的账号。你最多可以邀请 10,000 人,通过邮件或公开链接。这个群组适合朋友、早期用户、社区。
代价是,Apple 会先检查构建版本,再向他们开放。当你把某个版本的第一个构建版本加入外部群组时,它会进入 Beta 审核。同一版本后续的构建版本不一定需要完整审核。
提交之前,App Store Connect 会要求你填写测试信息:
- Beta 版描述,告诉测试员要重点看什么;
- 用于接收反馈的邮箱地址;
- 你的联系方式,方便 Apple 联系你。
Beta 审核不是 App Store 审核。在 TestFlight 通过的构建版本,正式发布时仍可能被拒。
Beta 审核检查的是构建版本是否符合规则,而最终审核还会看你的商品页、订阅、法律文本和整体体验。常见的被拒原因记在心里,可以看Apple 为什么拒绝你的应用。
通过公开链接邀请测试员
想让还不认识的人测试你的应用,公开链接是最简单的方式。下面是 Apple 给出的步骤,界面标签用英文:
- 在 App Store Connect 里打开你的应用,进入 TestFlight 标签页。
- 在 External Testing 下选择你的外部群组。
- 点击 Create Public Link。
- 选 Open to Anyone 向所有人开放,或选 Filter by Criteria 限定特定设备和 iOS 版本。
- 如果需要,用 Set Limit 设置测试员人数上限。
然后把链接发到任何地方:消息、社交网络、邮件。对方安装 TestFlight 应用,打开链接,接受邀请即可。
大范围传播之前,有两点要知道:
- 设置上限。 万一链接传得比预想的广,你仍能控制测试员人数。
- 通过公开链接加入的测试员是匿名的。 App Store Connect 对他们只显示安装日期、会话和崩溃。如果你想知道谁测了什么,最好用邮件邀请。
TestFlight 构建版本能用多久?
构建版本对测试员开放 90 天。过期后,测试员就打不开了。如果你的测试期更长,在到期前上传一个新构建版本就行。
实际上,你上传新构建版本的频率会高得多:每次重要修复都会传。每个加入群组的新构建版本都会推送给测试员,他们在 TestFlight 应用里获取。
收集测试员的反馈
TestFlight 内置反馈功能:测试员在你的应用里截图,可以标注,然后发给你。如果应用崩溃,你会收到崩溃报告,测试员还可以补充说明。这些都能在 App Store Connect 里看到。
这很有用,但要搞懂某个具体崩溃还不够。我的应用里会加 Sentry,它能报告错误并定位到出问题的代码行;再加 PostHog,能看到用户在哪一步放弃。两者在 TestFlight 构建版本里和正式环境中都能用。
在 TestFlight 中测试订阅
如果你的应用卖订阅,TestFlight 就是验证它是否真能用的地方。TestFlight 构建版本里的购买走的是 Apple 的测试环境:测试员不会被扣款。续订是加速的:不管实际时长是多少,每个订阅每天续订一次,一周内最多六次。
至少要检查:显示的价格正确,购买后应用确实解锁,重装后恢复购买按钮能找回订阅。我用 RevenueCat 管理应用的订阅;从 App Store Connect 里的产品到付费墙,整套搭建方法都写在 iOS 应用内订阅这一页。
提交 Apple 之前要测试什么
这是我每次提交审核前都会过一遍的清单。每一项都对应一个被拒原因,或一个本可避免的崩溃。
首次启动
- 删除应用,从 TestFlight 重新安装,打开。审核员就是这么做的。
- 完整走一遍引导流程,什么都别跳过。
- 拒绝每一项权限(通知、相机、定位),确认应用还能正常运行。
付费
- 付费墙显示价格、时长,以及使用条款和隐私政策的链接。
- 购买能用,恢复购买也能用。
- 所有配置好的产品审核员都能看到:准则 2.1 要求应用内购买完整、可见且可用。
恶劣条件
- 飞行模式和慢速网络:给出清楚的提示,而不是白屏。
- 你支持的最小和最大 iPhone:没有内容被截断,没有被键盘遮挡。我的 Solys 就因为小屏 iPhone 上画面被截断而被拒过一次。
- 如果应用有多语言版本,检查长文本。
给审核员的材料
- 如果应用需要登录,在审核备注里提供演示账号,并保持后端在线。准则 2.1 明确要求这一点。
- 审核备注用两句话说明应用是做什么的、主要功能在哪里。
如果应用还是被拒了,应用被 Apple 拒绝这一页讲了如何回复,不浪费一周时间。想了解从商品页到上线的发布全貌,请看在 App Store 上发布应用。
一份可以在你的构建版本上填写的验收表
下载包含 16 个场景的 CSV 验收表。它分为准备工作、要执行的操作、预期结果和实际观察到的证据。导入 Numbers、Excel 或 Google Sheets,然后填写每次测试的版本、设备和结果。
以一个虚构的读书笔记应用为例,只写"保存一页"是不够的:记下第 24 页,彻底关闭应用,重新打开,确认数值还在。没有实际执行的测试,就保持"待测试"。如果你的应用没有订阅,购买相关场景填"不适用",并注明原因。
这份表是需要你调整的起点,不是认证。你还可以看看 App Review 备注和其他免费模板,用来向审核员说明你真正验证过的流程。
从 TestFlight 到 App Store
TestFlight 是你的应用变得真实的一步:它运行在真实的 iPhone 上,握在真实的人手里。在 iOS Kit 的流程中,这是第二步:搭好应用核心,用 TestFlight 在你的 iPhone 上测试,然后接入订阅,再准备发布。
TestFlight 之后就是 Apple 审核:Apple Review Kit 汇集了我的提交前清单和给审核员的备注。首页介绍了用 Claude Code 开发你的移动应用的四个步骤。
没人能保证 Apple 一定会通过你的应用:决定权在 Apple。
常见问题
怎么用 TestFlight 测试 iPhone 应用?
把构建版本上传到 App Store Connect,然后加到一个测试员群组。用 Expo 的话,用 EAS Build 编译,再用 EAS Submit 上传:根据 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 应用内订阅。
提交 Apple 之前,要在 TestFlight 里检查什么?
像审核员那样从 TestFlight 重新安装应用,完整走一遍引导流程。拒绝每一项权限,测试购买和恢复购买,再试试飞行模式,以及你支持的最小和最大 iPhone。如果应用需要登录,在审核备注里准备好演示账号,并保持后端在线。