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

Ios5 Lion上使用Xcode 4.2的iOS上的代码覆盖率,ios5,code-coverage,xcode4.2,Ios5,Code Coverage,Xcode4.2,我正试图从一个名为CocoaTouchHax的iOS Xcode 4.2(4D199)项目(Lion上)生成gcd a文件,我遇到了难以置信的麻烦。我遵循这些步骤,甚至尝试从源代码按照以下步骤构建llvm/clang。但是,我仍然会遇到以下错误: Library not loaded: @executable_path/../lib/libprofile_rt.dylib 我哪里做错了?我尝试使用install\u name\u工具来修复可执行路径,但没有效果。我是不是分析过度了?我错过了一些

我正试图从一个名为CocoaTouchHax的iOS Xcode 4.2(4D199)项目(Lion上)生成gcd a文件,我遇到了难以置信的麻烦。我遵循这些步骤,甚至尝试从源代码按照以下步骤构建llvm/clang。但是,我仍然会遇到以下错误:

Library not loaded: @executable_path/../lib/libprofile_rt.dylib
我哪里做错了?我尝试使用install\u name\u工具来修复可执行路径,但没有效果。我是不是分析过度了?我错过了一些简单的东西吗?在链接之前,我将其作为“运行脚本”阶段,以确保已更新@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
我做错了什么?救命啊

更新 仅添加lib profile_rt.dylib会使我的测试运行立即崩溃,在运行任何内容时会出现以下错误: @可执行文件\u路径/。/lib/libprofile\u rt.dylib 因此,我确信在执行之前需要对lib profile_rt.dylib进行一些操作

另一个更新我尝试创建一个与 /开发者/usr/lib 在/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk/Developer/usr下 我相信这是测试运行时形成当前工作目录的基本路径的一部分。(假设它从那里的bin文件夹运行。)理论上,这将从该基本路径完成../lib/libprofile_rt.dylib的相对查找路径,但不起作用。在复制动态库之前,我尝试运行install\u name\u tool命令,但仍然出现以下错误:

Library not loaded: @executable_path/../lib/libprofile_rt.dylib
未加载库:@executable\u path/。/lib/libprofile\u rt.dylib


我不知道我做错了什么。我确实设法让测试覆盖率文件通过使用上面的一些组合发出,但我没有给予足够的关注,无法重现这种情况。我知道这是可行的,我只是需要更多的帮助来弄清楚如何操作。

更新:在Xcode 4.3.2(4E2002)中,只需打开生成测试覆盖率文件和仪器程序流,构建系统就会为您链接libprofile\u rt。Xcode 4.3及更高版本是标准的Mac应用程序,/Developer文件夹不见了。因此,跳过下面的步骤5-7。您还必须创建一个类文件来解决Apple unix实现中的错误,如前所述。您将希望在测试的项目中使用它

对于雪豹中的Xcode 4.2(4C199):

  • 创建一个项目,比如说MyProduct。选中“包含单元测试”
  • 一旦Xcode完成它的工作并加载新项目,您应该有两个目标,MyProduct和MyProductTests。复制MyProduct目标
  • 选择MyProduct复制目标
  • 转到生成设置。在代码生成下,启用生成测试覆盖率文件仪器程序流
  • 转到构建阶段。展开链接二进制与库。点击+。单击添加其他…。浏览到/Developer/usr/lib。选择
    libprofile\u rt.dylib
  • 选择MyProductTests目标
  • 对该目标重复步骤4和5
  • 再次转到构建设置。在链接下查找捆绑加载程序。更改MyProduct copy应用程序的路径。类似于$(build\u PRODUCTS\u DIR)/MyProduct copy.app/MyProduct copy
  • 更改方案,使测试在MyProduct copy方案下运行,而不是在MyProduct下运行。如果您自己编译clang,您可以在这里了解详细信息

  • 这应该行得通。第八步花了我几个小时才弄明白,这是关键。如果您只在testbuild目录中看到gcda文件,这可能就是问题所在。

    在Lion上,您可以将dylib符号链接到/usr/lib以避免该错误

    sudo ln-s/Developer/usr/lib/libprofile\u rt.dylib/usr/lib/libprofile\u rt.dylib

    然而,我不能保证这不会在未来毁掉什么。记住你已经做到了

    创建一个名为“覆盖率”(或其他)的新配置

    在您创建的覆盖率配置变量中,转到生成设置并

    • -fprofile弧
      -ftest覆盖范围
      添加到其他C标志
    • 打开
      生成测试覆盖率文件
    • 打开
      仪器程序流
    • 其他链接器标志中添加
      -lprofile\u rt
    使用配置这样做的原因是,您可以保持正常构建不变。也只能在模拟器上工作。所以不要尝试在设备上运行这个

    来自

    最后,打开Intermediates/$TARGET.build/$CONFIG/$TARGET.build/Objects normal/$ARCH子文件夹。在里面,您可以找到前面提到的gcda和gcov文件

    您可以使用CoverStory打开该文件夹


    请注意,覆盖率不是累积的(与覆盖率不同),因此每次运行都会重新开始。也许有办法改变这种状况

    是的,我知道在sim卡和设备上运行。我对源代码编译的llvm/clang有一个问题,其中lib profile\u rt.dylib只支持x64体系结构。因此,我转而使用w/Xcode附带的lib profile\u rt.dylib。我的问题有两个方面。是否有必要从源代码构建clang,或者苹果是否在最新的Xcode 4.2(4D199)中解决了这一问题?另外,libprofile\u rt.dylib中的相对@executable路径有什么问题吗?我只是仔细地看了一遍,并试图按照您的说明进行操作。我仍然得到:dyld:Library not loaded:@executable\u path/。/lib/libprofile\u rt.dylib我想在Xcode 4.2(4C199)和Xcode 4.2(4D199)之间一定有一个变化,这就引入了这个。哇,糟糕透了。我在雪豹上。我想这也许可以解释版本号的差异。经验告诉我,完全有可能的是,苹果出货的是一堆乱七八糟的东西。事实上,我很惊讶它居然能起作用+