Xcode 存档中的空 dSYM 文件夹

Empty dSYM folder in Xcode archive

我用谷歌搜索了很多,有人遇到的情况涉及不同的 Xcode 版本(因此不同的构建选项),或者存在 dSYM 文件。

所以,情况是这样的。我通过 Xcode 收到了一份崩溃报告。它只是内存地址。尝试在项目中打开它会给我相同的内存地址。考虑过手动符号化,但为此我需要与我构建的存档相对应的 dSYM 文件。但是当我 'Show package contents' 为我在 finder 中构建的存档时,它的 dSYM 文件夹是空的。

我的 Xcode 存档时的设置是:

DEBUG_INFORMATION_FORMAT: DWARF with dSYM File

STRIP_INSTALLED_PRODUCT: Yes 切换到 No 没有区别。

DEPLOYMENT_POSTPROCESSING: No 切换到 Yes 没有区别。

此外,我在将存档上传到 iTunes Connect 时选择了 'Include symbols'。

使用 Apple 进行部署的过程非常混乱,无需担心当崩溃发生时,报告实际上是可读的!

所以我的问题是:

1) 为什么我的存档缺少 dSYM 文件?

2) 如果生成了 dSYM 文件,它会在哪里?

3) 如果我真的没有 dSYM 文件,我还能以某种方式获得人类可读的符号名称吗?我有我上传的原始存档,并可以访问该版本的源代码。

3a) 如果我再次“产品”>“存档”(假设这次确实生成了 dSYM),我可以改用这个 dSYM 文件吗?或者它会不会有不同的 UUID,导致它与崩溃日志原因不兼容......好吧......Apple?

Xcode版本:6.4

这是我的崩溃日志在 Xcode Organizer 中的样子:

谢谢。

编辑:

我在尝试此操作之前已升级到 Xcode 7.3,但它也可能适用于版本 6。

问题(1)的解决方法是在项目构建设置中设置如下:

GCC_GENERATE_DEBUGGING_SYMBOLS

对于问题1),我也不知道。可能是Xcode的bug。您可以归档
再次相同的代码,然后生成相同的 dSYM 文件。

对于问题2),你可以在'~/Library'文件夹中搜索'dSYM',因为'dSYM'文件输出一般都在那里。如果找不到,尝试在整个磁盘中搜索。

对于问题 3),您必须具有崩溃日志中 'Binary Images' 部分列出的系统库符号文件。您可以在“~/Library/Developer/Xcode/iOS DeviceSupport”中找到它。如果未找到,您可以将崩溃日志中显示的具有相同 OS 版本的 iPhone 连接到 Xcode。 Xcode处理完成后,可以将iPhone的系统库符号文件复制到该文件夹​​中。然后,您可以重新符号化崩溃日志。

对于问题3a),对于相同的应用程序代码,不同的Archive 可能具有不同的dSYM 文件(UUID)。如果你用它来符号化崩溃日志,符号化的崩溃线与真实的崩溃线非常接近,所以这也可以帮助你推断真正的崩溃原因。

从您的屏幕截图来看,您的应用代码中只有一行未被符号化。现在,您可以使用导致崩溃再次存档的应用程序代码生成应用程序的 dSYM 文件。生成dSYM文件后,使用命令行dwarfdump -u yourApp.app.dSYM获取它的UUID,然后检查uuid是否包含在'Binary images''的第一行中。如果否,您可以将 'Binary images'' 第一行中的 UUID 修改为与从 dwarfdump -u XXX.dSYM 获取的新 UUID 相同,注意 cpu 架构。完成这个,你可以在Xcode中重新符号化崩溃日志,或者使用命令行symbolicatecrash crashreport.crash yourApp.app.dSYM。请注意,您必须保证您的应用程序代码的版本与崩溃日志中的版本相同,否则,结果令人难以置信。

关于 XCode 8.3.2,select 关于 生成调试符号