iOS上的代码覆盖率在Lion上使用Xcode 4.2

Cli*_*iff 3 code-coverage ios5 xcode4.2

我正在尝试从Lion上的一个名为CocoaTouchHax的iOS Xcode 4.2(4D199)项目中生成gcd文件,我遇到了不可思议的麻烦.我遵循的步骤在这里和我的竟然试图从源代码编译如下步骤LLVM /铛这里.但是我继续得到这个错误:

Library not loaded: @executable_path/../lib/libprofile_rt.dylib
Run Code Online (Sandbox Code Playgroud)

我哪里错了?我试图使用install_name_tool修复可执行路径无济于事.我在分析一些东西吗?我错过了一些简单的事吗?我在链接之前将其作为"运行脚本"阶段,以确保我已更新@executable路径,并使用工具检查文件后更新名称:

install_name_tool -id @executable_path/Users/cliff/dev/CocoaTouchHax/build/CocoaTouchHax/Build/Products/Debug-iphonesimulator/lib/libprofile_rt.dylib build/CocoaTouchHax/Build/Products/Debug-iphonesimulator/lib/libprofile_rt.dylib
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?救命!

更新 仅仅添加lib profile_rt.dylib会立即崩溃我的测试运行,在运行任何内容时会出现以下错误:@executable_path /../ lib/libprofile_rt.dylib所以我确定需要发生某些事情或者需要对lib执行某些操作profile_rt.dylib在执行之前.

另一个更新我尝试在/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/Developer/usr下创建/ Developer/usr/lib的和链接我相信这是构成该路径的基础的一部分测试运行时的当前工作目录.(假设它从那里的bin文件夹运行.)理论上,这将从该基本路径完成../lib/libprofile_rt.dylib的相对查找路径,但它不起作用.我已经尝试在复制dylib之前运行install_name_tool命令,但我仍然收到此错误:

未加载库:@executable_path /../ lib/libprofile_rt.dylib

我不知道我做错了什么.我不知何故设法使用上面的一些组合来获取测试覆盖文件,但我没有给予足够的关注,也无法重现出现.我知道这可以工作,我只需要更多的帮助来弄清楚如何.

age*_*ped 5

更新:Xcode 4.3.2(4E2002)中,只需打开生成测试覆盖率文件仪器程序流程,构建系统将为您链接libprofile_rt.Xcode 4.3及更高版本是标准的Mac应用程序,而/ Developer文件夹已不复存在.因此,请跳过下面的步骤5-7.您还必须创建一个类文件所描述的要解决一个bug在苹果公司的UNIX实现在这里.你会想要它在被测试的项目中.

对于Snow Leopard中的Xcode 4.2(4C199):

  1. 创建一个项目,比如MyProduct.检查包括单元测试.
  2. 一旦Xcode完成它并加载新项目,你应该有两个目标,MyProductMyProductTests.复制MyProduct目标.
  3. 选择MyProduct复制目标.
  4. 转到构建设置.在代码生成下,启用生成测试覆盖率文件仪器程序流程.
  5. 转到构建阶段.使用库展开链接二进制文件.单击+.点击添加其他....浏览到/ Developer/usr/lib.选择libprofile_rt.dylib.
  6. 选择MyProductTests目标.
  7. 对该目标重复步骤4和5.
  8. 再次转到" 构建设置".在链接下找到Bundle Loader.更改MyProduct复制应用程序的路径.类似$(BUILT_PRODUCTS_DIR)/ MyProduct copy.app/MyProduct副本.
  9. 更改您的方案,以便测试在MyProduct复制方案下运行,而不是MyProduct.如果你自己编译clang,你可以在这里找出细节.

这应该工作.第8步花了我几个小时才弄明白,这是关键.如果您只在测试构建目录中看到gcda文件,那可能就是问题.