如何在Xcode 4中获得测试和构建iPhone的代码覆盖率?

时间:2011-12-09 15:13:18

标签: iphone unit-testing xcode4 code-coverage llvm

我有几个单元测试的项目,我想测量覆盖率。因此,我按照How-to for CoverStory和网络其他地方的详细说明进行操作。

我将-fprofile-arcs-ftest-coverage添加到我的测试目标和正在测试的目标中,并按指定链接到/Developer/usr/lib/libprofile_rt.dylib

它有效!当我在iPhone模拟器下运行测试方案时,我得到了我的代码覆盖率,我的测试和应用程序构建和运行。

但是,当我回到实际iPhone硬件上的Run方案时,我发现了libprofile_rt.dylib的链接错误。具体来说,我得到

  

ld:找不到-lprofile_rt的库

我怀疑这里的libprofile_rt实际上是一个用于Mac硬件的库,iPhone通常无法链接到为Mac构建的二进制文件。

我的问题是如何在iPhone硬件上运行获取我的代码覆盖率?

我怀疑我可以使用仅用于测试的Debug目标副本来执行此操作,但这还有另外一个维护目标的麻烦。有没有其他方法让这个工作?我在做些傻事吗?

3 个答案:

答案 0 :(得分:2)

可能会有点晚,但实际上你可以。它在this presentation,幻灯片32到34中进行了解释。

花了我相当多的时间来寻找这个隐藏的宝石。希望这可能有助于此页面的未来访问者。

答案 1 :(得分:0)

此问题的可能答案如下:https://stackoverflow.com/a/5140459

诀窍是通过Xcode组织器将* .gcda文件从App的Documents目录中取出,因为它们当然会在设备上生成。

答案 2 :(得分:0)

答案是:您无法在设备上运行并同时获得保险。获得保险的唯一方法是在模拟器上:制作调试目标的副本,设置覆盖范围以及该目标上没有的内容,并在模拟器中使用您的测试运行该目标。

我在stackoverflow上回答了这个问题的所有细节:Code coverage on iOS Using Xcode 4.2 on Lion