16

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

自己项目中的通用代码库,以静态库为目标。该项目被拖入主应用程序的项目中。在主应用程序目标的构建阶段中,我将静态库添加为目标依赖项,并在 Link Binary With Libraries 下添加。该项目根据需要构建和运行。

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

dwarfdump /path/to/app.dSYM

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

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

  • 在复制期间去除调试符号:否
  • 带链接产品:否
  • 生成调试符号:是
  • 默认隐藏的符号:否

如果有人可以提供一些指导,我将不胜感激。

4

2 回答 2

4

静态库符号确实出现在应用程序的 dSYM 文件中,而 dwarfdump 会显示这一点。

 dwarfdump -a path/to/app.dSYM >dsymAsText.txt

那应该向您显示lib的符号。

但是,如果您(就像我最近一直在寻找)要生成一个符号表以仅与您的静态库一起使用,我得出的结论是它将毫无用处;一旦它被编译到一个新的应用程序中,这些符号和地址都会改变,你将有一个完全不同的偏移量(如果我错了,请有人纠正我)。

我不完全确定有办法绕过那部分。

于 2012-12-05T09:36:24.000 回答
1

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

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