Meet TestFlight on Mac
Developer Tools 入门 20m

初识 Mac 上的 TestFlight

Meet TestFlight on Mac

2021年6月8日

在 Apple 官方观看视频

一句话判断

TestFlight 终于来到 macOS——这意味着 Mac App 的 beta 测试不再需要你手动分发 DMG 或 PKG,分发流程和 iOS 测试终于统一了。

这场 Session 讲了什么

Session 介绍了 TestFlight 在 macOS Monterey 上的首次亮相。开发者可以通过 App Store Connect 向 Mac 用户分发 beta 版本的应用,测试体验和 iOS TestFlight 基本一致:用户通过邀请链接或邮件加入测试,TestFlight App 管理安装和更新。

TestFlight on Mac 支持 Universal Binary(通用二进制文件),一个 build 同时覆盖 Intel 和 Apple Silicon Mac。测试人员上限和 iOS 一样是 10,000 人。Session 还讨论了 Mac TestFlight 的特殊之处:支持命令行工具的测试分发、支持 App Extension 和 Framework 的单独测试、以及与 Mac App Sandbox 的兼容性。测试反馈方面,Mac 版 TestFlight 支持截图和系统诊断报告的收集。

值得深挖的点

Mac Catalyst 和原生 Mac App 的区别

TestFlight on Mac 同时支持 Mac Catalyst App 和原生 Mac App(包括用 Swift Package Manager 构建的 App)。但两者的测试流程有细微差异:Mac Catalyst App 的 build 直接复用 iOS 的 build,不需要额外编译;原生 Mac App 需要在 Xcode 中选择 Mac 目标平台单独构建。Session 建议如果项目同时支持 iOS 和 Mac,使用 Xcode 的 multiplatform target 来管理 build,避免维护两套 build 配置。

企业内部测试的改进

对于企业内部测试场景,TestFlight on Mac 支持 TestFlight 的”内部测试组”功能——最多 100 人的内部测试团队可以不需要 Apple 审核就直接收到 build。这对企业内部分发工具类 App 非常方便。外部测试(最多 10,000 人)仍然需要通过 Beta App Review,但审核速度通常在几小时内完成。

代码片段

# 通过 xcodebuild 构建 TestFlight 分发用的 Mac App
# 使用 archive + export 方式生成 .xcarchive
xcodebuild archive \
    -scheme "MyMacApp" \
    -destination "generic/platform=macOS" \
    -archivePath "./build/MyMacApp.xcarchive" \
    CODE_SIGN_IDENTITY="Apple Distribution" \
    DEVELOPMENT_TEAM="YOUR_TEAM_ID"

# 导出为 App Store 分发格式
xcodebuild -exportArchive \
    -archivePath "./build/MyMacApp.xcarchive" \
    -exportOptionsPlist ExportOptions.plist \
    -exportPath "./build/export"

# ExportOptions.plist 中设置 TestFlight 分发选项
<!-- ExportOptions.plist 配置 -->
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
  "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>
    <key>teamID</key>
    <string>YOUR_TEAM_ID</string>
    <key>uploadSymbols</key>
    <true/>
    <key>manageAppVersionAndBuildNumber</key>
    <true/>
</dict>
</plist>
# 使用 altool 上传 build 到 App Store Connect
# 上传后自动出现在 TestFlight 中
xcrun altool --upload-app \
    --type osx \
    --file "./build/export/MyMacApp.pkg" \
    --apiKey YOUR_API_KEY \
    --apiIssuer YOUR_ISSUER_ID

# 或者使用 Xcode 的 Organizer 窗口直接上传
# Window > Organizer > Distribute App > TestFlight

最佳实践

  • 为 Mac TestFlight 构建时始终使用 Universal Binary(同时包含 arm64 和 x86_64),确保 Intel Mac 和 Apple Silicon Mac 的测试人员都能安装。
  • 在 App Store Connect 中为 Mac TestFlight build 设置不同的”What to Test”说明——Mac 用户可能关注的测试点和 iOS 不同(比如窗口管理、键盘快捷键、多显示器支持)。
  • 鼓励测试人员通过 TestFlight App 的反馈功能提交问题,而不是发邮件。TestFlight 的反馈会自动附带系统信息和诊断数据。

还有什么值得关注

  • TestFlight on Mac 的 build 有效期是 90 天(和 iOS 一样),过期后测试人员需要安装新版本。
  • Mac TestFlight 支持自动更新——新 build 上传后测试人员会自动收到更新通知。
  • 测试反馈中的截图会自动附带系统信息(macOS 版本、Mac 型号、内存大小),对排查问题很有帮助。
WWDC 2021