iOS静态库调试符号未包含在dSYM中

jma*_*mac 15 debugging linker static-libraries ios

我正在研究一系列将共享公共代码库的iOS应用程序.我已经将公共代码库开发为静态库,并希望它的调试符号包含在主应用程序的.dSYM文件中.我的理解是这是可能的,但我还没有完成它的工作.

它自己的项目中的公共代码库,它有一个静态库作为目标.该项目被拖入主应用程序的项目中.在主要应用程序的目标构建阶段中,我已将静态库添加为目标依赖项,并在"链接二进制文件库"下添加.该项目根据需要构建和运行.

现在,如果我从主项目生成存档,我可以在Finder中查看该存档,它包含一个可用于表示崩溃日志的.dSYM文件.但是,.dSYM仅包含主应用程序的符号,而不包含静态库的符号.为了过度确认这一点,我运行了以下内容:

dwarfdump /path/to/app.dSYM

输出(大多数)不包含静态库中的任何符号.我发现的唯一例外是我的主项目的AppDelegate是静态库中对象的子类,并且.dSYM中有超类的条目.但是,没有其他类存在.

在静态库的项目目标的Build Settings中,我设置了以下内容:

  • 复制期间剥离调试符号:NO
  • 剥离链接产品:没有
  • 生成调试符号:是
  • 默认隐藏的符号:否

如果有人能提供一些指导,我将不胜感激.

小智 1

不确定您是否找到了答案,但几天前我遇到了完全相同的问题。我通过执行以下操作使其工作:

  1. 创建一个工作区来保存您的主要项目和公共代码库(静态库)。确保项目是兄弟项目,而不是父项目/子项目。
  2. 添加目标依赖项并链接公共代码库
  3. 确保在通用代码库中包含调试符号
  4. 配置工作区设置以在共享目录中构建所有项目(我相信这是关键)
  5. 如果您收到关于无法找到标头的投诉,您可能必须在构建设置中修改用户标头搜索路径或使用源代码树功能。

  • 这有可能成为一个非常好的答案。但还是缺少一些东西。“包含调试符号”是指默认情况下为“是”的 GCC_GENERATE_DEBUGGING_SYMBOLS (生成调试符号)构建设置吗?共享目录也不清楚。默认情况下,工作区中的每个项目都将在派生数据中构建在其自己的目录中。你是否设法让 xcode 在同一目录中构建每个项目? (2认同)