dSYM是什么?如何使用它?(iOS SDK)
Xcode调试符号(dSYM)是一个包含映射信息的Bundle(例如F49088168M.app.dSYM),通过它可以将堆栈跟踪解码为可读格式。
默认情况下,发布版本会自动生成dSYM文件。可以通过以下设置进行检查:
Build Settings -> Generate Debug Symbols(GCC_GENERATE_DEBUGGING_SYMBOLS) -> Yes
Build Settings -> Debug Information Format(DEBUG_INFORMATION_FORMAT) -> DWARF with dSYM File
dSYM文件会生成在Products文件夹中。
如果需要手动从.app文件生成dSYM文件,可以使用dsymutil命令:
dsymutil F49088168M.app/F49088168M -o F49088168M.app.dSYM
使用symbolicatecrash命令可以对崩溃日志进行符号化处理:
export DEVELOPER_DIR="/Applications/Xcode.app/Contents/Developer"
/Applications/Xcode.app/Contents/SharedFrameworks/DVTFoundation.framework/Versions/Current/Resources/symbolicatecrash "
可以使用dwarfdump命令手动打开dSYM文件:
dwarfdump --arch arm64 --debug-pubtypes F49088168M.app.dSYM
需要注意的是,.app的dSYM文件应该包含所有包含的(framework)dSYM文件。
更多关于dSYM的位置、.bcsymbolmap文件以及相关词汇的信息,可以参考以下链接:
[dSYM location](https://stackoverflow.com/a/63953349/4770877)
[.bcsymbolmap](https://stackoverflow.com/a/67274795/4770877)
[Vocabulary](https://stackoverflow.com/a/59216151/4770877)
什么是dSYM文件,以及如何使用它?(iOS SDK)
dSYM文件存储了您的应用程序的调试符号。
像Crashlytics这样的服务使用它来替换崩溃日志中的符号,并将其替换为适当的方法名称,使其可读并且有意义。
使用dSYM的好处是您不需要将应用程序与其符号一起发布,这使得逆向工程变得更加困难,并且还可以减小二进制文件的大小。
为了使用dSYM对崩溃日志进行符号化,您需要将崩溃日志拖到编译应用程序二进制文件的设备的设备日志中(存储dSYM的机器)中。
如果您有dSYM但没有编译应用程序二进制文件的机器,请按照此链接中的说明将dSYM安装到机器中。
如果需要自己对崩溃日志进行符号化,可以使用Mac应用程序。
有关更多信息,请参阅苹果技术笔记TN2151。
不包含dSYM文件在App Store二进制文件中是否会导致Crashlytics无法记录崩溃?
所以取消选中“包括应用程序符号...”框是安全的吗?
如果您希望能够在Apple Connect中查看崩溃日志,可以在上传应用程序到App Store时包含应用程序符号。如果您使用Crashlytics,则不必这样做,但是包含应用程序符号(dSYM文件)并通过在上传到App Store向导中选中“包括应用程序符号...”将其发送给Apple也不会有坏处。
我在考虑是否可以节省用户几MB的空间
来自Crashlytics开发人员 - twittercommunity.com/t/...
请注意,启用了Bitcode之后,苹果会重新编译代码。这意味着将产生不同的dSYM。
据我所知,生成报告的实体需要dSYM。它可以从应用程序获取,或者应上传到Crashlytics、AppDynamics(或其他您使用的分析工具)服务器中...