【问题标题】:What could cause code coverage enabled builds to fail?什么可能导致启用代码覆盖的构建失败?
【发布时间】:2016-10-17 14:41:08
【问题描述】:

总结

我正在尝试从我的项目中获取代码覆盖率报告。但是,当我尝试构建和运行测试时,派生数据文件夹中没有创建 CodeCoverage 文件夹。

我该怎么做?

我正在运行 xcodebuild,如下所示:

xcodebuild \ -workspace <some_workspace> \ -scheme <some_scheme> \ -destination <some_destination> \ -derivedDataPath <some_path> \ -enableCodeCoverage YES \ build test

有什么问题?

对于我的工作区/项目,它在最后一行失败:

xcodebuild: error: Failed to build workspace <some_workspace> with scheme <some_scheme>. Reason: Could not determine bundle identifier for <some_test_target>'s TEST_HOST: "<some_path>/Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/<some_product>.app"

起初它似乎与 TEST_HOST 问题直接相关,但这里并非如此。

根本没有 CodeCoverage 文件夹:

&lt;some_path&gt;/Build/Intermediates/CodeCoverage

我尝试了什么?

我对一个干净的新项目进行了同样的尝试,同样运行相同的xcodebuild 命令,它成功了。在Build/Intermediates/ 文件夹中存在CodeCoverage 文件夹。

但是,在我自己的更复杂的项目中,Build/Intermediates/ 文件夹包含一堆*.build 文件夹(与应用程序和各种框架相关,例如HockeySDK.build)和PrecompiledHeaders 但没有CodeCoverage 文件夹。

查看xcodebuild 的输出时,我从未看到对我的项目的CodeCoverage 文件夹的引用。但是,对于测试项目,首先提到的是:

Write auxiliary files /bin/mkdir -p /&lt;some_path&gt;/Build/Intermediates/CodeCoverage/Intermediates/&lt;some_project&gt;.build/Debug-iphonesimulator/&lt;some_project&gt;.build/Objects-normal/x86_64

对于我的项目,我看到了:

Write auxiliary files /bin/mkdir -p /&lt;some_path&gt;/Build/Intermediates/&lt;some_project&gt;.build/Debug-iphonesimulator/&lt;some_project&gt;.build/Objects-normal/x86_64

解决方法

似乎“欺骗”它工作的其他方法是将Host Application 设置为None。完成此操作后,它会构建和测试,但由于缺少主机,测试会失败。但是,这会导致创建 CodeCoverage 文件夹,如果再次正确设置 Host Application,则运行构建和测试工作正常,并生成代码覆盖率报告。

【问题讨论】:

  • 该错误似乎表明它与您的测试目标方案有关。您正在通过命令行运行测试,但如果您通过 Xcode 运行测试,它会做什么(确保该方案的代码覆盖率已打开)?
  • 我收到相同的错误消息“无法确定...的捆绑标识符”当然看起来像是项目设置问题,这很可能是问题所在。有趣的是,如果我取消选中 Gather coverage data,它会很好地构建和运行测试。
  • 请发布 /Build/Intermediates/CodeCoverage/Products/Debug-iphonesimulator/.app/info.plist
  • 这里是 info.plist:pastebin.com/raw/9HbtzUxc

标签: ios xcode code-coverage xcode8 xcodebuild


【解决方案1】:

您必须确保包名在所有配置中都相同。 Xcode 会修改它以防您使用不受支持的字符。例如 Xcode 将“-”替换为“_”。

在所有配置中,转到:

Project -> Build Settings -> Product Module

并设置完全相同的名称,不带空格。

【讨论】:

    猜你喜欢
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2012-10-09
    • 1970-01-01
    相关资源
    最近更新 更多