构建应用程序以包含调试信息
Building Your App to Include Debugging Information
构建应用程序以包含调试信息
配置Xcode以生成用于调试和崩溃报告的符号信息。
概述
当Xcode将源代码编译成机器代码时,它会在APP类名、全局变量、方法和函数名中生成一个符号列表。这些符号对应于定义它们的文件和行号;这种关联会创建一个调试符号,因此您可以在Xcode中使用调试器,或者引用崩溃报告报告的行号。默认情况下,应用程序的调试版本将调试符号放在编译后的二进制文件中,而应用程序的发布版本会将调试符号放在相应的调试符号文件(dSYM)中,以减小发布版本APP包的体积。
APP中的每个二进制文件(主应用程序可执行文件、framworks和app extensions)都有自己的dSYM文件。编译后的二进制文件及其配套的dSYM文件由一个构建UUID绑定在一起,这个UUID由构建的二进制文件和dSYM文件记录。如果您使用相同的源代码构建两个二进制文件,但是使用不同的Xcode版本或构建设置,那么这两个二进制文件的构建uuid将不匹配。二进制文件和dSYM文件只有在具有相同的构建uuid时才彼此兼容。保留好构建和分发的dSYM文件,并在诊断崩溃报告中的问题时使用它们。
使用符号信息构建应用程序
在构建用于分发的应用程序之前,请验证您的构建设置是否会生成必要的dSYM文件,以便在发布应用程序后诊断崩溃。
这些dSYM文件是最常见的符号文件类型,您在发布应用程序后调试它时需要它。向应用商店提交带有bitcode构建的APP有第二种类型的符号文件,即bitcode符号映射(bcsymbolmap)。当打包一个APP开启了bitcode,Xcode会将应用程序dSYM文件中的符号替换为混淆符号,如_hidden#109
,以保护符号名的隐私。bcsymbolmap文件将dSYM文件中的这些隐藏符号名称转换回原始调试符号名称,您可以将其与代码匹配。如果您选择在不提供符号的情况下将应用程序上载到app Store,Xcode将从上传中排除bcsymbolmap文件,仅将模糊的符号名称发送到App Store。APP的真实符号名在你的电脑上仍然是本地的。
注意
位码不适用于macOS和Mac Catalyst APP。
发布带有符号信息的应用程序
在打包一个发布IPA时,Xcode会收集应用程序的所有二进制文件和dSYM文件,并将它们存储在Xcode存档中。
如果您通过App Store分发应用程序或使用TestFlight进行beta测试,则可以选择在将应用程序上载到app Store Connect时包含符号文件。你需要在你的构建中上传符号,这样应用商店就可以将你的应用程序的符号名称添加到崩溃报告中,然后再将它们交付给Xcode中的崩溃管理器。如果上载到App Store时不包括符号,则仍然可以通过崩溃管理器接收崩溃报告,但不包括符号名称。如果Mac上有正确的dSYM文件,Xcode会将符号名添加到这些崩溃报告中。有关如何使用dSYM文件处理崩溃报告,请参阅使用崩溃报告和设备日志诊断问题。
拓展
要使用Xcode自带的各种线上调试,必须用户同意share crash and usage data with developers.
- 符号管理器
Window > Organizer > 选中对应的APP构建包 > 在上方选择Crashes
从上图中,我们发现,bug可以直接定位到代码位置中
- 能量管理器
Window > Organizer > 选中对应的APP构建包 > 在上方选择Energy
- 查看崩溃或能源报告
- 查看能源管理检查器
重要提示
您必须为您分发的应用程序的每个版本保留Xcode存档。如果没有此存档,您可能无法从崩溃报告中诊断问题。
网友评论