尽管所有构建设置都相反,Xcode Instruments正在剥离符号

jar*_*air 13 xcode symbols instruments stripping

问题

仪器的Time Profiler正在从我的应用程序中剥离除系统库之外的所有符号,尽管事实上我已经在Xcode的所有相关构建设置中禁用了这种行为 - 但仅在一台开发机器上.另一台开发机器正常运行.

描述

仪器的Time Profiler正在剥离除系统库之外的所有符号,尽管事实上我已经在Xcode的所有相关构建设置中禁用了这种行为 - 但这只发生在我的一台开发机器上.我已经运行OS X时,Xcode和仪器的同一版本二次开发的机器,每台机器使用具有相同构建设置,方案和其他配置相同的Xcode项目的相同副本,并且应用程序正在使用相同的异形测试设备(iPhone 4S与iOS 5的最新公开版本).

机器1
- Mac OS X
10.7.4 - Xcode 4.3.2(4E2002)
- 仪器4.3(4321)

机器2
- Mac OS X
10.7.4 - Xcode 4.3.2(4E2002)
- 仪器4.3(4321)

重现步骤

  1. 在每台机器上打开包含的示例项目.
  2. 确保选择iPhone 4S作为测试设备.
  3. 选择产品>配置文件
  4. 当仪器启动时,选择Time Profiler并继续.
  5. 运行应用程序.
  6. 请注意在iMac(机器1)上运行时如何剥离符号,而不是在MacBook Air(机器2)上运行.

预期的行为

我自己的代码中的符号应该出现在两台机器上的Time Profiler中.

回归

我尝试了以下所有方法,但实际结果没有变化:

  1. 重新启动机器.

  2. 尝试其他Xcode项目

  3. 删除Xcode Organizer中所有项目的"派生数据".

  4. 重新标记仪器中的文档(在〜/ Library/blahBlahBlah中仔细选择正确的DSYM文件......)

最后的笔记

以下是示例项目的.zip文件的链接:Sample Project .zip

jar*_*air 7

我终于能够通过一种方法来让它工作,这种方法只是羞于一个核心和铺路的场景:

  1. 确保您当前的构建配置禁用所有符号剥离.确保你已经为你的发布配置做了这个,如果那是为了仪器的配置文件.
  2. 从iOS设备删除该应用程序.
  3. 重启iOS设备.
  4. 重新启动MAC(我不信任的Xcode或狮子在所有以其他方式退出所有相关过程).
  5. 启动Xcode,转到管理器>项目并删除受影响项目的派生数据.
  6. 清理您的项目.见鬼,为什么不呢?
  7. 为仪器构建和配置文件.
  8. 为清晰起见,请选择仪器中的Time Profiler.
  9. 第一次运行不会显示符号,但不会退出.让仪器运行!
  10. 重新标记Instruments中的文档,仔细导航到当前版本的正确dSYM文件.由于您已在步骤5中删除了派生数据,因此这应该更容易.
  11. 现在你应该能够看到你的符号了.如果隐藏非Objective-C符号,它会有所帮助.

为什么我建议您删除应用程序并在步骤2和3中重新启动iOS设备?我怀疑Xcode没有执行每个构建的干净安装,但可能会安装增量,这样仪器中的符号地址是当前构建和以前构建的混合.如果是这样,那么对于像我这样在一台以上Mac之间共享一个测试设备的人来说,这个问题更为常见.这种假设可能非常不正确.

如果上述步骤对您不起作用,请在评论中告诉我.我想在未来的某个时刻制作详细的雷达报告.