我正在开发一系列共享通用代码库的 iOS 应用程序。我已将通用代码库开发为静态库,并希望它的调试符号包含在主应用程序的 .dSYM 文件中。我的理解是这是可能的,但我还没有让它发挥作用。
它自己项目中的公共(public)代码库,以静态库作为目标。该项目被拖入主应用程序的项目中。在主要应用程序目标的构建阶段中,我将静态库添加为目标依赖项,并在“将二进制文件与库链接”下。项目按需构建和运行。
现在,如果我从主项目生成一个存档,我可以在 Finder 中查看该存档,它包含一个可用于符号化崩溃日志的 .dSYM 文件。但是,.dSYM 仅包含主要应用程序的符号,而不包含静态库的符号。为了证实这一点,我运行了以下命令:
dwarfdump/path/to/app.dSYM
并且输出(大部分)不包含来自静态库的任何符号。我发现的唯一异常(exception)是我的主要项目的 AppDelegate 是静态库中对象的子类,并且在 .dSYM 中有该父类(super class)的条目。但是,其他类都不存在。
在静态库项目的目标build设置中,我设置了以下内容:
- 在复制过程中去除调试符号:否
- 剥离链接产品:否
- 生成调试符号:是
- 默认隐藏的符号:否
如果有人能提供一些指导,我将不胜感激。
最佳答案
静态库符号确实出现在应用程序的 dSYM 文件中,dwarfdump 会揭示这一点。
dwarfdump -a path/to/app.dSYM >dsymAsText.txt
这应该会向您显示 lib 的符号。
但是,如果您(正如我最近一直在寻找的那样)正在寻找要生成的符号表以仅与您的静态库一起使用,我得出的结论是它毫无用处;一旦它被编译到一个新的应用程序中,这些符号和地址都会发生变化,并且您将对所有内容都有一个完全不同的偏移量(如果我错了,请有人纠正我)。
我不完全确定是否有办法绕过这部分。
关于iOS 静态库调试符号未包含在 dSYM 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11531560/