Triage TestFlight crashes in Xcode Organizer
Developer Tools 入门 20m

在 Xcode Organizer 中排查 TestFlight 崩溃

Triage TestFlight crashes in Xcode Organizer

2021年6月10日

在 Apple 官方观看视频

一句话判断

Xcode 13 的 Organizer 终于把崩溃分析、用户反馈和指标数据放在了一个地方——你不用再在 App Store Connect 网页和邮件之间来回跳了。

这场 Session 讲了什么

Session 展示了 Xcode 13 中 Organizer 的重大改版。新 Organizer 把原来分散在 App Store Connect 网页上的崩溃日志、用户评论、下载量和使用指标全部拉到 Xcode 里。对于 TestFlight 阶段的 App,这意味着你可以在一个窗口中完成崩溃查看、符号化(Symbolication)、堆栈分析、关联用户反馈的完整流程。

新的崩溃报告页面按”崩溃类型”聚合,同一个崩溃位置的不同触发场景会被归在一起。你可以看到每个崩溃的发生次数、影响用户数、首次出现版本和趋势图。点击某个崩溃后能看到完整的符号化堆栈,如果 dSYM 文件在本地,Xcode 会自动下载并符号化。

还介绍了新的反馈集成——TestFlight 测试者可以在 App 内截屏提交反馈,这些反馈会直接出现在 Organizer 中,和崩溃报告关联。这大幅缩短了从”用户报告问题”到”开发者定位原因”的距离。

值得深挖的点

TestFlight 崩溃的实时可见性

之前 TestFlight 崩溃日志需要去 App Store Connect 网页查看,而且有延迟。新 Organizer 会在收到崩溃报告后很快推送到你的 Xcode,配合通知功能可以第一时间知道测试版本出了什么问题。对于内测阶段,这意味着你不需要等测试者手动报告——系统自动帮你收集和分类。

崩溃签名与去重

Organizer 使用崩溃签名(crash signature)来聚合相同的崩溃。签名基于堆栈的顶层调用链,而不是内存地址。这意味着同一个 Bug 在不同设备、不同版本上产生的崩溃会被正确归为同一类。你看到的不是 100 条零散的崩溃日志,而是”崩溃类型 A,影响了 47 个用户”这样的信息。

代码片段

查看和处理 TestFlight 崩溃

// Xcode > Window > Organizer
// 选择你的 App,切换到 Crashes 标签

// 崩溃列表会显示:
// - 崩溃类型名称(基于堆栈顶的方法名)
// - 影响用户数和发生次数
// - 首次出现的构建版本
// - 趋势图

// 点击某条崩溃后:
// 1. Xcode 自动下载对应的 dSYM
// 2. 符号化堆栈,显示源代码行号
// 3. 可以直接跳转到对应的代码行

上传 dSYM 以支持符号化

// 在构建脚本中确保 dSYM 上传
// Xcode 13 在 Archive 时会自动上传 dSYM 到 App Store Connect

// 手动上传(如果自动上传失败)
// xcrun altool --upload-app --type ios \
//   --file "YourApp.ipa" \
//   --apiKey YOUR_KEY \
//   --apiIssuer YOUR_ISSUER

// 确认 Build Settings 中:
// Debug Information Format = dwarf-with-dsym
// Upload Symbols = YES

关联用户反馈与崩溃

// TestFlight 测试者在 App 中:
// 1. 截屏
// 2. 点击截屏预览中的"发送反馈"
// 3. 添加描述文字后提交

// 这些反馈出现在 Organizer 的 Feedback 标签中
// 如果反馈发生时有崩溃,两者会自动关联
// 你可以看到:"用户报告了登录页面卡死"
// 同时看到对应的 hang report 或 crash report

最佳实践

测试阶段: 从 TestFlight 第一次分发就打开崩溃报告收集。在每个测试版本发布后,第二天检查 Organizer 中的新崩溃。把崩溃检查纳入版本发布流程的 checklist。

符号化管理: 确保每个 Archive 构建的 dSYM 都上传到 App Store Connect。如果使用第三方崩溃报告(Crashlytics 等),也要同步上传 dSYM。没有符号化的崩溃日志几乎没用。

还有什么值得关注

  • Organizer 新增了 Metrics 标签,展示电池使用率、启动时间、挂起率等性能指标。
  • 崩溃报告可以导出为 .crash 文件,方便在 issue tracker 中共享。
  • TestFlight 测试者反馈支持附件(截图和描述),不再只是纯文字。
WWDC 2021