我正在尝试从我的项目中获取代码覆盖率报告。但是,当我尝试构建和运行测试时,在派生数据文件夹中没有创建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
,则运行构建和测试工作正常,并生成代码覆盖率报告。
答案 0 :(得分:2)
您必须确保所有配置中的包名称相同。如果您使用不受支持的字符,Xcode会对其进行修改。例如,Xcode将“ - ”替换为“_”。
在所有配置中,请转到:
Project
- &gt; Build Settings
- &gt; Product Module
并设置完全相同的名称,不带空格。