2012-07-17 131 views
14

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

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

现在,如果我从主项目生成归档文件,我可以在Finder中查看该归档文件,并且它包含一个.dSYM文件,该文件可用于表示崩溃日志。但是,.dSYM只包含主应用程序的符号,而不包含静态库。过度证实这一点,我跑了以下内容:

dwarfdump /path/to/app.dSYM

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

静态库中的项目的目标的生成设置,我已经设置了以下内容:

  • 地带调试符号复制过程:NO
  • 地带挂钩产品:NO
  • 生成调试符号:是
  • 默认隐藏的符号:NO

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

+0

您使用的是什么版本的XCode? – misnomer 2012-09-09 13:22:11

+0

你是否管理过这个问题?我有同样的问题,仍然无法弄清楚发生了什么。 – Vincent 2012-12-08 01:53:20

回答

1

不知道你是否找到了你的答案,但几天前我有完全相同的问题。我通过执行以下操作来实现它:

  1. 创建一个工作空间来保存您的主项目和公共代码库(静态库)。确保项目是兄弟姐妹,而不是父母/孩子。
  2. 添加一个目标的依赖和链接共同的代码库
  3. 确保包括在共同的代码库的调试符号
  4. 配置工作区设置,以建立一个共享目录中的所有项目(我认为这是关键)
  5. 如果您收到有关无法找到标题的投诉,则可能需要修改构建设置中的用户标题搜索路径或使用源树功能。
+2

这有可能是一个非常好的答案。尽管如此,很少有东西丢失。通过“包含调试符号”,您的意思是GCC_GENERATE_DEBUGGING_SYMBOLS(生成调试符号)编译设置默认为Yes?共享目录也不清楚。默认情况下,工作区中的每个项目都将在派生数据的自己的目录中生成。你有没有设法让xcode在同一个目录中构建每个项目? – Onato 2013-05-22 12:21:45

3

静态库符号显示在应用程序的dSYM文件中,而dwarfdump会显示该文件。

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

这应该显示你的lib的符号。但是,如果你是(正如我最近一直在寻找一个符号表来生成的只是你的静态lib一起去),我得出的结论是,这将是相当无用的;一旦它被编译到一个新的应用程序中,这些符号和地址将全部改变,并且你将拥有完全不同的所有偏移量(如果我错了,请别人纠正我)。

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