Xcode 崩溃管理器不符号化 .xccrashpoint 文件

Xcode Crash Organizer does Not Symbolicate .xccrashpoint Files

管理器中新的 Xcode 7 "Crashes" 选项卡显示了我的应用程序在 AppStore 中的一些崩溃。根据the documentation,应该有堆栈跟踪。然而,6 次崩溃中的 none 具有符号堆栈跟踪:

我试过点击 "Open in Project",但还是没用:

当然,我在提交给商店时包含了dsym和调试信息。我的组织者中仍然有提交构建,所以 dsyms 仍然存在于我的机器上。我怎样才能得到正确的堆栈跟踪?

不理想,但如果您右键单击 .xccrashpoint 文件,select "Show Package Contents",您可以导航其文件夹结构以找到您可以提取然后符号化的实际 .crash 文件通过命令行 :

运行

/Applications/Xcode.app/Contents/SharedFrameworks/DTDeviceKitBase.framework/Versions/A/Resources/symbolicatecrash

确保 DEVELOPER_DIR 已设置:

export DEVELOPER_DIR=/Applications/Xcode.app/Contents/Developer

短篇小说:

Xcode 9.0中:"The Crashes Organizer symbolicates unsymbolicated logs, if they are selected, using a local .dSYM indexed by Spotlight. (22550064)"

您可以在 Xcode's Documentation 中查看更多相关信息。

长话短说:

当 Xcode 为机器代码应用构建 .xcarchive 时,它​​会生成 .dSYM 文件,默认情况下由 Spotlight 编制索引。对于使用 bitcode 上传的应用程序,您可以使用 Archives 管理器下载 dSYM,默认情况下它们会被 Spotlight 索引。

如果您在将应用程序上传到 App Store 时选择不包含符号信息,则崩溃管理器下载的崩溃日志将不会被符号化。如果您有为崩溃的应用程序版本生成的适当的 .dSYM 文件,当您单击崩溃以查看它时,Xcode 将自动表示崩溃。 Xcode 9.0+ 中存在此功能。您可以通过右键单击日志详细信息视图并单击 "symbolicate".

来手动调用重新符号化

我第一次这样做是在 Xcode 10。右键单击我的崩溃日志并选择 Symbolicate 没有任何效果。我在 Organizer window 的 Archives 部分选择了构建,然后单击右侧窗格中的 "Download Debug Symbols" 按钮。这似乎没有做任何事情,但是当我回到 Crashes 并告诉 Xcode 再次表示相同的崩溃时,这次它起作用了。

您需要在本地安装应用程序的 dsyms。如果这是从构建箱上传的构建,您将不会拥有它们。前往 App Store Connect,单击 Activity 选项卡,找到您的相关版本,然后点按它。版本详细信息屏幕包括 link 下载 dSYM - 这样做,并展开他们下载的 .zip 文件。

现在回到 Xcode 中的崩溃 - 它们将成功符号化。

理智提示:确保您的本地源与崩溃版本处于同一提交状态。否则,如果源文件自发布以来发生了变化,Xcode 可能会将您转至不正确的行。例如自从您最近添加了两行以来,您的源代码的第 127 行现在已移至第 129 行......并且崩溃视图不知道这些更改。它会向您显示第 127 行崩溃,而崩溃代码实际上位于第 129 行。