跳转至正文
iOS Android 指南

如何将 iOS 和 Android 应用分发给测试人员

如何将 iOS 和 Android 应用分发给测试人员:TestFlight、Google Play 测试轨道、内部应用共享、Firebase App Distribution 和 ad hoc 构建。

用于在 iPhone 上安装测试版构建的 TestFlight 应用

要将 iOS 应用分发给测试人员,可以使用 TestFlight(内部测试人员可立即获取,外部测试人员需经过简短的 Beta App Review),或使用面向已注册设备的 ad hoc 构建。对于 Android,可以使用 Google Play 测试轨道(内部、封闭或开放测试)、通过 Play 内部应用共享生成一次性链接,或者通过 Firebase App Distribution 分享已签名的 APK,或提供直接下载。选择哪种方式取决于测试人员是谁、数量多少,以及构建是否需要走应用商店的基础设施。

本指南会对比所有选项,说明如何为 Capacitor 应用逐一配置,并列出测试人员常遇到的错误。

选择分发方式

方法 平台 最大测试人数 测试人员收到前审核 测试人员要求 最适合
TestFlight 内部测试 iOS 100 名团队成员 否 App Store Connect 用户、TestFlight App 您的团队
TestFlight 外部测试 iOS 10,000 Beta App 审核(版本的首个构建版本) 邮件邀请或公开链接,TestFlight App Beta 用户、客户
Ad hoc 分发 iOS 每种设备类型每年 100 台设备 否 已注册的 UDID,开发者模式 小型 QA 团队,无需 Apple 审核
Play 内部测试 Android 100 无需完整审核,通常几分钟内即可使用 邮件列表中的 Google 账号 您的团队
Play 封闭测试 Android 邮件列表或 Google Groups 是 Google 账号,加入测试链接 Beta 用户,12 名测试人员要求
Play 公开测试 Android 无限制或设上限 是 在列表页选择加入 公开测试版
Play 内部应用分享 Android 任何拥有链接的人 否 Google 账号,已开启设置 快速 QA 构建,任意版本 code
Firebase App Distribution 两者都是 较大 否 邮件邀请;iOS 需注册 UDID 跨平台 QA
直接 APK 链接 Android 任何人 否 允许未知来源 快速内部测试

经验法则:

  • 和上架商店的是同一个 build 吗? 使用 TestFlight 和 Play 测试轨道。测试人员用的二进制包就是最终晋级发布的包。
  • 每日 QA build? 在两个商店做内部测试,或用 Firebase App Distribution。
  • 需要在几分钟内测试 Web 层改动? 把 live update 发布到测试通道,而不是新的二进制包。

分发前:签名

每个测试 build 都必须签名。

  • iOS 测试构建使用 App Store Connect 配置文件(TestFlight)或 Ad Hoc 分发 profile(直接安装)。两者都使用 Apple Distribution 证书。详见 iOS 证书与 provisioning profile 详解.
  • Android 用于 Play 渠道的 build 是使用你的 upload key 签名的 AAB。对于直接安装,你需要一个使用任意 release key 签名的 APK。Debug APK 也可以安装,但其行为不同(可调试、签名不同),且之后无法通过你的 Play build 升级。

iOS:TestFlight

上传 build

通过 Xcode: 产品 > 归档,然后 Distribute App > App Store Connect > Upload。通过命令行或 CI,导出一个 .ipa 并使用 App Store Connect API 密钥上传,或者交给云端 build 服务来做。

自 2026 年 4 月起,上传的版本必须使用 Xcode 26 或更高版本构建。

将此密钥添加到 ios/App/App/Info.plist 如果你的 App 只使用标准 HTTPS 加密,请添加此项,这样 App Store Connect 就不会在每次 build 时都询问出口合规问题:

<key>ITSAppUsesNonExemptEncryption</key>
<false/>

处理需要几分钟到一小时左右。build 就绪后你会收到一封邮件。

内部测试

  1. 在 App Store Connect 中打开你的 App, TestFlight &gt; 内部测试,并创建一个群组。
  2. 添加团队成员。他们必须拥有 App Store Connect 角色(Admin、App Manager、Developer、Marketing…)。最多 100 人。
  3. 启用 自动分发 因此,每个新 build 都会进入该群组。
  4. 测试人员安装 TestFlight app(从 App Store 下载),并接受邀请。

无需审核。这是从上传到手机最快的方式。

外部测试

  1. TestFlight &gt; 外部测试 &gt; + 来创建群组。
  2. 通过邮箱添加测试人员,或启用 公开链接 并可选择设置测试人数上限。
  3. 将 build 添加到群组并填写 测试信息 (要测试的内容、反馈邮箱、Beta 版应用描述,以及需要时的演示登录信息)。
  4. 提交以进行 Beta 版应用审核。每个版本的第一个构建版本需要经过审核,通常在一天内完成。同一版本的后续构建版本通常无需完整审核即可发布。

外部测试最多支持 10,000 名测试人员。测试人员可以直接通过 TestFlight 发送带有反馈的截图,你可以在 App Store Connect 中查看。

需了解的 TestFlight 限制

  • 构建版本过期时间 90 天.
  • 测试人员使用的 iOS 版本必须在你的构建版本支持范围内(Capacitor 8 需要 iOS 15 或更高版本)。
  • TestFlight 构建版本使用 App Store 生产签名,因此推送通知会使用 生产环境 APNs 环境。
  • TestFlight 中的应用内购买使用 sandbox,不会实际扣费。

iOS:ad hoc 分发

Ad hoc 构建可直接安装到你在 Apple Developer 门户中注册的设备上,无需 TestFlight 或 Apple 审核。

  1. 收集每位测试者的 UDID。测试者可以在自己的手机上通过 iOS UDID 查询工具获取,或者在设备连接时通过 Finder 或 Xcode 读取。
  2. 在以下位置注册设备: Certificates, Identifiers & Profiles > Devices.
  3. 创建一个 Ad Hoc 分发 provisioning profile(包含这些设备)并下载。
  4. 构建一个 .ipa 使用该描述文件 (Xcode: 分发 App &gt; 发布测试,这是 Ad Hoc 的新名称)。
  5. 安装:
    • 将 .ipa 拖到 Finder 中的设备上,或通过 Xcode &gt; 窗口 &gt; 设备和模拟器.
    • 或者用 itms-services 通过 HTTPS 提供 manifest,以便测试人员点击链接即可安装。Firebase App Distribution 等服务可以帮你完成这一步。
  6. 在 iOS 16 及更高版本上,从 Mac(Xcode 或 Apple Configurator)安装 .ipa 需要 开发者模式 在设备上(设置 > 隐私与安全性)。通过 itms-services 链接安装则无需此操作。详见 如何在 iOS 上开启 Developer Mode.

添加新测试人员意味着要注册其 UDID、重新生成描述文件并重新构建。设备名额(每个设备系列 100 个)只有在会员年度续订时才会重置,所以不要随意注册设备。

Android:Google Play 测试轨道

Play Console 有三个测试轨道,外加正式版。它们都需要用您的上传密钥签名的 AAB。

内部测试

  1. 测试 > 内部测试 > 测试人员:创建电子邮件列表(最多 100 个地址)。
  2. 创建新版本,上传 AAB,添加版本说明,保存并发布。
  3. 复制 opt-in 链接 并将其发送给测试人员。他们接受后从 Play Store 安装。

内部版本通常几分钟内即可使用,无需等待完整审核。全新应用的首次发布可能耗时更久,因为 Google 需要处理该应用。

封闭测试

封闭测试轨道需要审核,并支持邮件列表或 Google Groups。这是你满足以下要求所需的轨道: 12 名测试人员测试 14 天 该规则适用于 2023 年 11 月 13 日之后创建的个人开发者账号,并在获得正式发布权限前生效。使用 Google Group 可以让测试人员轻松加入。详情请参阅 如何创建 Apple 和 Google Play 开发者账号.

开放测试

任何人都可以通过你的 Play 详情页加入。一旦应用商店详情页准备就绪,即可将其用于公开测试。来自公开测试人员的反馈是私密的,不会影响你的公开评分。

我们的 Android beta 测试指南 更详细地比较这些轨道。

Android:内部应用共享

内部应用共享是通过 Play Store 把任意 APK 或 AAB 装到设备上的最快方式,无需遵守版本 code 规则,也无需审核。

  1. 在 Play Console 中,打开 内部应用共享 (位于“测试”下)并添加上传者。
  2. 上传 APK 或 AAB,即可获得链接。
  3. 测试人员打开 Play Store 应用,进入设置,点击 Play Store 版本 连续点击七次以显示开发者选项,并开启 内部应用共享.
  4. 测试人员打开链接并安装。

这对 pull request 构建的 QA 很有用,因为 version code 无需递增。

Android:直接分发 APK 与 Firebase App Distribution

直接分发 APK

构建签名的 release APK。新的 Capacitor 项目没有 release 签名配置,因此 assembleRelease 会生成未签名的 APK,无法安装。请添加一个 signingConfigs.release 块(keystore 路径和密码,通常从 key.properties读取)到 android/app/build.gradle 并先指向 buildTypes.release.signingConfig 它。

bun run build
bunx cap sync android
cd android && ./gradlew assembleRelease

分享 android/app/build/outputs/apk/release/app-release.apk 通过链接安装。测试人员需允许浏览器或文件管理器安装未知应用并打开文件。如果已安装 Play Store 版本,必须先卸载,因为签名不同。你也可以通过 USB 安装,使用 adb install -r app-release.apk (参见 如何在 Android 上启用开发者选项).

从 2026 年 9 月 30 日起,巴西、印度尼西亚、新加坡和泰国的经过认证的 Android 设备将仅安装包名已由已验证开发者注册的应用,并计划于 2027 年在全球范围推广。如果你的测试人员位于这些国家,请在 Android Developer Console 或 Play Console 中注册包名。通过 adb 进行的安装不受影响。

Firebase App Distribution

Firebase App Distribution 同时支持两大平台,可以发送邮件邀请,并追踪谁安装了哪个 build。

bun add -g firebase-tools
firebase login

firebase appdistribution:distribute android/app/build/outputs/apk/release/app-release.apk \
  --app 1:1234567890:android:abc123def456 \
  --groups "qa-team" \
  --release-notes "Fix checkout crash"
  • Android 测试人员通过邮件链接或 App Tester 应用安装。
  • iOS 测试人员仍需在 ad hoc(或 development)描述文件中。App Distribution 会在他们接受邀请时收集 UDID,但你仍需自行注册并重新构建。
  • AAB 分发需要将 Firebase 项目关联到 Google Play。

如果你不想在每台 CI runner 上维护 Mac 和签名, Capgo 构建 在云端构建 Capacitor 应用。对于测试构建,可以跳过商店提交,将二进制文件上传并生成带 QR code 的限时下载链接:

# Android APK/AAB for testers, no Play upload
bunx @capgo/cli@latest build request com.example.app \
  --platform android --no-playstore-upload --output-upload --output-retention 2d

# iOS ad hoc build (no App Store submission)
bunx @capgo/cli@latest build request com.example.app \
  --platform ios --ios-distribution ad_hoc --output-upload

# iOS build uploaded to TestFlight for external groups
bunx @capgo/cli@latest build request com.example.app \
  --platform ios --ios-testflight-groups "Beta Testers"

添加 --output-record build.json 并在 CI 中读取该链接,使用 bunx @capgo/cli@latest build last-output --path build.json --field outputUrl 将其发布到 Pull Request 或聊天中。 Capgo 构建文档 该命令会列出所有选项。

Web 改动无需重新构建

大部分 Capacitor 应用的改动都集中在 Web 层。如果仅为了修复一段文本就重新构建并分发二进制文件,会浪费一整天的 TestFlight 处理和审核时间。使用 Capgo 实时更新,测试人员可以保留已安装的构建,而你只需向测试频道推送新的 JavaScript bundle:

bunx @capgo/cli@latest bundle upload --channel beta

你甚至可以为每个 Pull Request 分配独立的频道,让 QA 在同一个已安装的应用上切换频道。请参阅 将每个 pull request 转化为可安装的预览版.

故障排除

iOS ad hoc 上显示“无法安装”。 设备 UDID 不在描述文件中,或描述文件已过期。请检查 security cms -D -i profile.mobileprovision.

iOS 上应用打开后立即关闭。 开发者模式未开启(ad hoc/开发构建),或描述文件已过期。

TestFlight 构建卡在“处理中”。 最多等待一小时。如果失败,邮件会列出原因,通常是缺少用途描述字符串(NSCameraUsageDescription 及类似项)或图标问题。

TestFlight “缺少合规信息”。 在 App Store Connect 中回答出口合规问题,或添加 ITSAppUsesNonExemptEncryption 改为 Info.plist.

Android 提示“应用未安装”。 已安装了签名不同的版本,或者 APK 未签名或已损坏。请卸载现有应用。

测试人员选择加入后,在 Play Store 中看不到应用。 请等待几分钟,确保他们已使用受邀账号登录,并检查该版本是否已发布到对应轨道,以及他们所在的国家/地区是否可用。

上传时提示“版本 code 已被使用”。 提升 versionCode 中的 android/app/build.gradle。Internal app sharing 是例外。

TestFlight 收不到推送通知。 TestFlight 使用生产 APNs 环境。请检查 aps-environment entitlement 以及你的推送服务商的环境设置。

  1. 自动分发的 TestFlight 内部测试组,以及 Play 内部测试轨道,每次合并到 main.
  2. 面向 Beta 用户的 TestFlight 外部测试组和 Play 封闭测试轨道,每周更新。
  3. 在...上启用 Live Update beta ,用于在构建之间进行仅限 Web 的修复。
  4. 当 Beta 稳定后,将同一构建发布到两个商店的生产环境,并遵循 首次 App 审核指南.
为 Capacitor 应用提供 Live Updates

当 Web 层出现线上 Bug 时,通过 Capgo 发布修复,而不用等 App Store 审核好几天。用户会在后台收到更新,原生变更则仍走正常审核流程。

博客最新动态

Capgo 为你提供打造真正专业的移动应用所需的最有价值的洞察。