【问题标题】:How do I get code coverage for tests and build for iPhone in Xcode 4?如何在 Xcode 4 中获得测试和构建 iPhone 的代码覆盖率?
【发布时间】:2013-03-15 00:41:18
【问题描述】:

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

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

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

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

ld: 找不到 -lprofile_rt 的库

我在这里怀疑的是 libprofile_rt 实际上是一个用于 Mac 硬件的库,而 iPhone 显然不能链接到为 Mac 构建的二进制文件,一般来说。

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

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

【问题讨论】:

  • 在 /Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/libprofile_rt.dylib 有这个 lib 的 iOS 版本 也许你应该尝试将新目标与这个链接
  • 很好的发现,但这给了我不同的错误:我收到一条警告说“忽略文件 /Developer/.../libprofile_rt.dylib,文件中缺少所需的架构 armv7。”因为链接器忽略了该文件,所以我得到未定义的符号错误。所以我在构建设置中为我的目标和硬编码 armv7 去架构并得到同样的东西。

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


【解决方案1】:

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

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

【讨论】:

  • 很棒的发现!看起来您必须手动复制文件。这很糟糕,但苹果是唯一能够解决这个问题的公司。
  • 是的,手动复制文件是获取这些 gcda 文件的唯一方法。这真的很可惜,因为我们的 CI 已经准备好处理这些文件,而且我们的项目无法在模拟器中运行。也许与 Xcode 5 ;)
【解决方案2】:

这个问题的可能答案在这里:https://stackoverflow.com/a/5140459

诀窍是通过 Xcode 管理器从应用程序的 Documents 目录中获取 *.gcda 文件,因为它们当然会在设备上生成。

【讨论】:

    【解决方案3】:

    答案是:你不能在你的设备上运行并同时获得覆盖。获得覆盖的唯一方法是在模拟器上:复制你的调试目标,设置覆盖率以及该目标上没有的内容,并在模拟器中通过您的测试运行该目标。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-05
      • 2014-05-11
      • 2019-12-29
      • 1970-01-01
      • 2020-01-13
      • 2017-02-13
      • 2012-03-18
      相关资源
      最近更新 更多