TestFlight build 在测试员设备上看不到:修复清单

build 已是 Ready to Test、测试员也接受了邀请,但 TestFlight App 里就是没有。按这份排序清单走一遍,95% 的情况不用重传就能修好。

你的 build 在 App Store Connect 里状态是 Ready to Test,已挂到外部测试 group。测试员确认收到并接受了邀请邮件。他在 iPhone 上打开 TestFlight App——你的 App 不在列表里。或者他看到了 App,但列出的版本是上一个 build,不是你昨天传的那个。你自己设备上一直看到的是最新 build,复现不了。测试员卡住,测试周期也卡住。

最快的修法: 打开 App Store Connect → TestFlight → 测试员所在的 group → Builds,确认新 build 确实挂在这个 group 上,然后让测试员打开 TestFlight 下拉刷新、点 Install。这一步能解决最常见的情况。如果 build 已经挂着,再按下面的表格往下排查。

“TestFlight build 不显示”几乎从来不是 build 坏了。常见就那么几种:build 没挂到测试员的 group、build 还在 Beta App Review、测试员没被通知、设备不兼容(iOS 版本或硬件)、邀请邮箱和 TestFlight 登录的 Apple ID / 地区不匹配、测试员没在 App 里点 Install。按对的清单走一遍,绝大多数情况都不用重传任何东西就能修好。

你属于哪一类

用这张表跳到对应小节。

测试员反馈的现象最可能的原因小节
TestFlight 列表里根本没有这个 Appbuild 没挂到他的 group,或邀请 / Apple ID 不匹配1、5
App 下面写 “No builds available”iOS 版本太低、硬件被排除,或地区不匹配2、3、6
看到的是旧 build,不是新的build 还在 Beta App Review,或测试员没被通知4、8
收到了邮件但什么都没装上没点 Install,或之前拒绝过7、9
Mac 测试员什么都看不到iOS App 在 Mac 上的可用性被关掉了10

常见原因

按命中率排序。

1. build 没挂到测试员所在的 group

你有多个 TestFlight group(Internal、External-QA、External-Public)。新 build 只挂到了 External-QA。测试员在 External-Public,于是什么都看不到——或者只看到这个 group 还留着的旧 build。

如何判断:App Store Connect → TestFlight → 侧边栏 → 测试员的 group → Builds。你要他测的 build 必须列在这里。每个 group 的 build 列表是各自独立的。

2. build 最低 iOS 版本超过设备版本

build 编译的 IPHONEOS_DEPLOYMENT_TARGET = 17.0(或你调用了只有 iOS 18 才有的 API),而测试员是 iPhone 8、系统停在 iOS 16。TestFlight 会把不兼容的 build 过滤掉,测试员看到 “No builds available”。

如何判断:让测试员看 Settings → General → About → iOS Version,和你 Xcode 的 deployment target 对照。设备 iOS 版本低于 build 的 MinimumOSVersion 就会被过滤。

3. 设备硬件被支持设备列表排除

build 的 UIRequiredDeviceCapabilities(Info.plist)会筛掉缺少某项能力的设备——比如要求 metalgyroscopearkit。测试员的硬件不在支持集里,TestFlight 就把 build 藏起来。

如何判断:读 Info.plistUIRequiredDeviceCapabilities。如果你要求的能力测试员设备没有,就会被过滤。App Store Connect 在 build 详情页也会列出该 build 支持的设备清单。

4. build 还在 Beta App Review(尚未通过审核)

外部测试需要 Apple 的 Beta App Review:每个版本的第一个 build、以及改动较大的 build 都要过审。审核通过前,外部测试员看不到这个 build,哪怕它上传得好好的。内部测试员(你的 App Store Connect 用户)可以在过审前就测;外部测试员不行。

如何判断:App Store Connect → TestFlight → 这个 build。如果状态是 In ReviewWaiting for ReviewRejected,而不是 Ready to Test / Testing,那外部测试员看不到就是这个原因。build 审核通常一天左右出结果,大型 OS 发布期会更久。

5. 邀请邮箱和 TestFlight 登录的 Apple ID 不一致

你邀请的是 tester@gmail.com。测试员接受了,但用 tester@icloud.com(个人 Apple ID)登录 TestFlight。TestFlight 把邮件邀请绑定到收件的那个 Apple ID 上;对其他 ID 不可见。

如何判断:设备上打开 TestFlight → 右上头像 → 看登录的 Apple ID,和邀请邮件里的精确地址对照。测试员只能在收到邀请的那个 Apple ID 下看到它。

6. 地区 / storefront 或年龄分级限制

如果你的 App 只在部分地区可用,或 build 的年龄分级高于测试员账号能访问的范围,即使测试员接受了邀请,build 也可能在他那个 App Store storefront 下被过滤掉。

如何判断:App Store Connect → App Information / Pricing and Availability 看地区可用性,以及 build 的年龄分级。确认测试员设备的 App Store 地区(Settings → [他的名字] → Media & Purchases → View Account → Country/Region)在你 App 覆盖的范围内。

7. 测试员接受了邀请但没点 Install

邮件里的 “View in TestFlight” / “Start Testing” 按钮把他带进 App。他看到了 App 列表项,但没点 Install——以为接受邀请就够了。build 是 “available to test” 但实际没装。

如何判断:让测试员打开 TestFlight,在列表里找你的 App,看是不是还有蓝色 Install 按钮。

8. build 挂上了但测试员没被通知

往 group 里加 build 时,Automatically notify testers 这个勾选框决定测试员会不会收到推送 / 邮件提醒。如果没勾(或者 build 是在过审前就加进去的),测试员可能根本没被提醒,也就不会想到去看。不管有没有通知,最后都要在 TestFlight 里手动 Install。

如何判断:App Store Connect → TestFlight → 这个 build → 看测试员有没有被通知过。build 过审后可以用 Notify Testers 手动触发一次。

9. 测试员之前拒绝过邀请

部分测试员点了 “Decline” 或忽略了 TestFlight 通知。邀请进入 declined 状态,build 就不显示。需要重发邀请。

如何判断:App Store Connect → TestFlight → 这个 group → 点测试员 → 看状态。Declined 就重发,或移除后重新加。

10. 测试员在 Apple Silicon Mac 上,而你的 iOS build 不允许

默认情况下,兼容的 iPhone / iPad App 可以在 Apple Silicon Mac 上跑,除非你 opt out。你 opt out 了,Mac 测试员就什么都看不到。

如何判断:App Store Connect → Pricing and Availability → iOS App 在 Mac 上的可用性开关。如果设成不可用,Mac 测试员就装不了。

需要收集的信息

动手改之前,先从测试员那里拿到这些(在这一步靠猜,会白白多跑一整轮):

  • 设备型号和 iOS 版本(Settings → General → About)。
  • TestFlight App 当前登录的 Apple ID(右上头像)。
  • 你的邀请发到的精确邮箱地址。
  • 他在哪个 TestFlight group,以及那个 group 挂了哪些 build。
  • 你 build 的 MinimumOSVersion 和支持设备(Xcode / build 详情页)。

另外确认是一个测试员还是多个出问题。一个测试员通常是设备、Apple ID 或地区问题;多个则指向 group 挂载、审核状态或通知。

最短修复路径

Step 1:核对 group → build 挂载

App Store Connect → TestFlight → 侧边栏 → 测试员的 group → Builds

  • 你要他测的 build 应该列在这里。没有就点 Add Builds,选 build,确认。
  • 也可以直接打开这个 build(Builds → 平台 → 该 build),在 Groups 旁点加号(+)把 group 挂上去。
  • 内部测试员同理,把 build 挂到 Internal Testing group。

Step 2:确认已过 Beta App Review

TestFlight 里打开这个 build。外部测试员只有在状态是 Ready to Test / Testing 时才看得到。如果是 Waiting for ReviewIn ReviewRejected,那就是卡点——等审核通过(通常一天左右)或修掉被拒原因。外部审核还在进行时,内部测试员可以先测。

Step 3:核对兼容性

让测试员发 Settings → General → About → iOS Version 和设备型号,然后比对:

  • Build 的 MinimumOSVersion <= 设备 iOS 版本。
  • Build 支持的设备包含这个型号。

你要 iOS 17+ 而测试员在 iOS 16,要么降 deployment target,要么换台新设备测。

Step 4:匹配 Apple ID、地区,然后重发

让测试员打开 TestFlight → 右上头像 → 确认登录的 Apple ID。和邀请地址对不上时:

  • 最简单:把邀请重发到他在 TestFlight 实际用的 Apple ID。
  • 备选:让他从 TestFlight 登出(头像 → Sign Out),用邀请邮箱重新登入。

同时确认设备的 App Store 地区在你 App 覆盖范围内。重发方式:App Store Connect → TestFlight → 这个 group → 点测试员 → Resend Invitation

Step 5:确认已通知,再刷新安装

如果加 build 时 Automatically notify testers 没勾,在已过审的 build 上点一次 Notify Testers。然后让测试员:

  1. 打开 TestFlight App。
  2. 下拉刷新 App 列表。
  3. 主列表和 Previous Builds 都看一下。
  4. 点 App,再点蓝色 Install 按钮。

Step 6:移除再重新邀请

Step 1–5 都不行,就把测试员从 group 移出再加回去,强制刷新邀请,清掉过期的 Declined 状态。

App Store Connect → TestFlight → 这个 group → 测试员 → 移除 → 确认。然后重新加测试员。

Step 7:兜底——重装 TestFlight

删掉 TestFlight App,从 App Store 重装,用对的 Apple ID 登入,再次点开邀请链接接受。重装通常能清掉本地那点干扰 TestFlight 的状态。

怎么确认已经修好

  • 测试员在 TestFlight App 列表里同时看到你的 App 新 build 版本。
  • Install 能下载并打开 build,显示预期的版本 / build 号条幅(比如 2.7 (48))。
  • Apple ID、邀请邮箱、App Store 地区全部一致。
  • App Store Connect 里 group + build 挂载已核对,状态为 Ready to Test

常见问题

挂上 build 后多久测试员能看到?

外部测试员要等 build 过 Beta App Review——通常提交后一天左右,大型 OS 发布期更久。一旦状态变 Ready to Test 且测试员已被通知,他们在 TestFlight 里下拉刷新后几分钟内就该看到。

build 明明挂上了,为什么测试员还是 “No builds available”?

这条提示意味着 TestFlight 把该设备的所有挂载 build 都过滤掉了——基本是最低 iOS 版本或硬件能力不匹配(第 2、3 节)、地区 / storefront 限制(第 6 节),或 build 还没通过外部测试审核(第 4 节)。

测试员必须用我邀请的那个 Apple ID 吗?

是的。邮件邀请只在收件的那个 Apple ID 下可见。如果他用别的 Apple ID 登 TestFlight,要么把邀请重发到那个 ID,要么让他切换(第 5 节 / Step 4)。

我能加多少测试员?build 会过期吗?

截至 2026 年 6 月,TestFlight 每个 App 最多 10,000 名外部测试员100 名内部测试员(App Store Connect 用户)。build 自上传起最多可测 90 天,之后过期,要换成更新的 build。

测试员在 Mac 上什么都看不到,正常吗?

兼容的 iPhone / iPad App 默认能在 Apple Silicon Mac 上跑,但你可以在 Pricing and Availability 里 opt out。如果你 opt out 了,Mac 测试员就装不了——改让他在 iOS 设备上测(第 10 节)。

如果还是没修好

  1. Apple System Status 有没有 TestFlight 故障——少见但真实,大型 OS 发布期更易出。
  2. 让测试员发 TestFlight Apps 列表截图;往往能看出他忽略的细节(Previous Builds 标签、登错的 Apple ID)。
  3. 把测试员加到另一个挂了同 build 的 group——单个 group 的状态偶尔会过期。
  4. 递增 build 号重传。少需要,但其他都不行时能打破僵局。

预防建议

  • 没必要就别提高 MinimumOSVersion,除非代码真的需要更新的 API。
  • 邀请时把每个测试员的 Apple ID 记下来(仓库里放个 TESTERS.md 就行),方便后查不匹配。
  • 留一个专门的”准生产”外部 group,和内部测试员、QA 分开,这样 build 挂哪儿一目了然。
  • 保持 Automatically notify testers 勾选,并在每个新 build 后发一句确认(“应该看到 2.7 (48),没收到告诉我”),让测试员主动确认。
  • 别回收测试员邮箱;邮箱离开 group 后,邀请状态会以意外方式保留。

相关阅读

标签: #排查 #App Store #App 审核 #TestFlight