如何创建一个.dSYM文件?

64

我正在与另一位开发者合作开发一个应用,他们刚刚在他们的电脑上提交了一个版本到应用商店。为了在我的机器上构建一个版本(该版本属于同一个Git提交),我必须在XCode项目中更改我们使用的库之一的路径。我对XCode项目文件进行的任何更改会改变dSYM吗?如果我能够在不修改XCode项目文件的情况下构建版本,dSYM文件是否相同?

1个回答

149

dSYM 文件是“调试符号文件”。当项目构建设置中启用“剥离调试符号”选项时生成。

启用此选项后,您对象的符号名称将从编译后的二进制文件中删除(这是许多对抗措施之一,旨在防止可能会对您的代码进行反向工程的人/破解者,以及二进制大小等优化措施)。

dSYM 文件很可能每次编译应用程序时都会更改(由于时间戳的原因,可能每次都更改),与项目设置无关。

它们可用于重新符号化崩溃报告。使用剥离后的二进制文件,您将无法在未重新符号化崩溃报告的情况下阅读任何崩溃报告。如果没有 dSYM,则崩溃报告仅显示对象和方法的内存地址。Xcode 使用 dSYM 将符号放回到崩溃报告中,使您能够正确地阅读它。

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


40
新增内容:dSYMs和可执行文件有一个嵌入的UUID(通用唯一识别码),两者匹配。因此,每次进行构建都会导致两个UUID发生变化。其结果是,只有在引发崩溃的二进制文件的UUID与用于符号化的dSYM的UUID匹配时,符号化才能正常工作。 - Kerni
3
这里Jasarien给出了一个很好的答案。我只想补充一点,现在使用“归档”会将所有内容整洁地存储在Xcode目录下的一个文件夹中。您可以右键单击Xcode组织器中的归档,然后选择“在查看器中显示”。但为了完整起见,我要添加我的文件夹位于~/Library/Developer/Archive。 - bladnman
4
我有点困惑... 你说需要启用“去除调试信息”(即将其设置为“YES”)才能生成,然而在下面,它又说如果启用了此设置,对象的名称会被删除... 那么,如果我想在Instruments中看到我的符号名称,这个设置应该设置为"YES"还是"NO"? - jowie
3
一般而言,在进行调试时,“去除调试符号”应该选择“否”,这样调试器就能够显示所有符号。而在发布版本中,应该选择“是”,这会从二进制文件中移除符号,并创建.dSYM文件来存放它们。因此,在进行性能分析时,应该根据需要决定使用哪种配置。如果需要查看符号,则应使用调试配置,以便它们可用;如果需要对性能进行分析,则最好使用发布配置。 - Jasarien
2
似乎需要完整符号化的另一个设置,例如本地调试构建中需要的是:Build SettingsBuild OptionsDebug Information Format › _DWARF with dSYM File_。就像发布构建一样。 - B98
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接