如何创建 .dSYM 文件?

Posted

技术标签:

【中文标题】如何创建 .dSYM 文件?【英文标题】:How is a .dSYM file created? 【发布时间】:2014-03-17 16:36:02 【问题描述】:

我正在与另一位开发人员一起开发一个应用程序,他们刚刚向在他们计算机上构建的应用程序商店提交了一个版本。为了在我的机器上进行构建(属于同一个 git 提交),我必须更改我们在 XCode 项目中使用的库之一的路径。我对 XCode 项目文件所做的任何更改都会更改 dSYM 吗?如果我能够在不修改 XCode 项目文件的情况下进行构建,dSYM 文件是否相同?

【问题讨论】:

【参考方案1】:

dSYM 文件是“调试符号文件”。它是在项目的构建设置中启用“Strip Debug Symbols”设置时生成的。

启用此设置后,您的对象的符号名称将从生成的编译二进制文件中删除(尝试和防止的众多对策之一是黑客/破解者对您的代码进行逆向工程,以及对二进制大小等的其他优化.).

dSYM 文件可能会在每次编译您的应用程序时发生变化(可能由于日期标记而每次都发生变化),并且与项目设置无关。

它们对于重新标记您的崩溃报告很有用。使用剥离的二进制文件,如果不首先重新符号化它们,您将无法阅读任何崩溃报告。如果没有 dSYM,崩溃报告将只显示对象和方法的内存地址。 Xcode 使用 dSYM 将符号放回崩溃报告中,并允许您正确阅读。

理想情况下,您的 dSYM 文件不应在您的 git 存储库中进行跟踪。与其他在构建时更改的二进制文件一样,将它们保留在源代码控制中没有用处。然而,话虽如此,重要的是您将每个分布式构建(测试版、新闻稿、应用商店分发等)的 dSYM 文件保存在安全的地方,以便您能够象征您可能获得的任何崩溃报告。当您使用存档选项时,Xcode 会自动为您执行此操作。创建的存档包含您的应用程序及其 dSYM,并存储在 Xcode 的派生数据目录中。

【讨论】:

一个补充:dSYM 和可执行文件具有匹配的嵌入式 UUID。所以每次构建完成都会导致两者都获得一个新的 UUID。结果是符号化仅在导致崩溃的二进制文件的 UUID 与用于符号化的 dSYM 的 UUID 匹配时才有效。 感谢您提供的额外信息,凯米。我不知道那部分。 Jasarien 给出了很好的答案。我将添加这些天使用“存档”将所有这些整齐地存储在 Xcode 目录中的文件夹中。您可以右键单击 Xcode 管理器中的存档并“在 Finder 中显示”。但为了完整起见,我将添加我的文件夹存在于 ~/Library/Developer/Archive 我有点困惑...你说“条带调试符号”需要启用(设置为“YES”)才能生成?然而在下面,它说如果启用该设置,对象的名称将被删除...所以,如果我想在 Instruments 中查看我的符号名称,是否应该将此设置设置为“YES ”还是“否”? 根据经验,对于调试版本,Strip Debug Symbols 应该是NO,以便调试器能够显示所有符号。发布版本应将其设置为YES,这会从二进制文件中删除符号,创建 .dSYM 文件以将它们放入。因此,在进行分析时,您应该决定将使用哪种配置,如果您需要查看符号,然后使用调试配置以便它们可用 - 如果您需要分析性能,最好使用发布配置。

以上是关于如何创建 .dSYM 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何在可执行文件附近生成 dsym 文件,而不是在捆绑包之外,最好没有安装后脚本?

Xcode 显然不会创建应用程序的 dSYM 文件

如何从 appstoreconnect 获取 dSYM 文件?

如何在终端上从 xcarchive 导出 dsym 文件

如何在 XCode 7.0 中创建 dSYM 文件

Xcode 如何找到 dSYM 以匹配崩溃文件?