什么可能导致代码覆盖启用构建失败?

时间:2016-10-17 14:41:08

标签: ios xcode code-coverage xcode8 xcodebuild

摘要

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

<some_path>/Build/Intermediates/CodeCoverage

我尝试了什么?

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

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

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

Write auxiliary files /bin/mkdir -p /<some_path>/Build/Intermediates/CodeCoverage/Intermediates/<some_project>.build/Debug-iphonesimulator/<some_project>.build/Objects-normal/x86_64

对于我的项目,我看到:

Write auxiliary files /bin/mkdir -p /<some_path>/Build/Intermediates/<some_project>.build/Debug-iphonesimulator/<some_project>.build/Objects-normal/x86_64

解决方法

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

1 个答案:

答案 0 :(得分:2)

您必须确保所有配置中的包名称相同。如果您使用不受支持的字符,Xcode会对其进行修改。例如,Xcode将“ - ”替换为“_”。

在所有配置中,请转到:

Project - &gt; Build Settings - &gt; Product Module

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