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

Vam*_*mos 6 xcode code-coverage xcodebuild ios xcode8

摘要

我正在尝试从我的项目中获取代码覆盖率报告.但是,当我尝试构建和运行测试时,在派生数据文件夹中没有创建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 ApplicationNone.执行此操作后,它会构建并测试,但由于缺少主机,测试会失败.但是,这会导致CodeCoverage创建文件夹,如果Host Application再次正确设置,则运行构建和测试工作正常,并生成代码覆盖率报告.

sha*_*ght 2

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

在所有配置中,请转到:

Project-> Build Settings->Product Module

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