什么会导致启用代码覆盖率的构建失败?
What could cause code coverage enabled builds to fail?
总结
我正在尝试从我的项目中获取代码覆盖率报告。但是,当我尝试构建和 运行 测试时,派生数据文件夹中没有创建 CodeCoverage 文件夹。
我该怎么做?
我运行ning xcodebuild如下:
xcodebuild \
-workspace <some_workspace> \
-scheme <some_scheme> \
-destination <some_destination> \
-derivedDataPath <some_path> \
-enableCodeCoverage YES \
build test
有什么问题?
对于我的 workspace/project 它在最后一行失败:
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
我尝试了什么?
我对一个干净的新项目进行了同样的尝试,同样的 运行ning 相同的 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
解决方法
似乎 'trick' 它起作用的另一件事是将 Host Application
设置为 None
。完成此操作后,它会构建和测试,但由于缺少主机,测试失败。但是,这会导致创建 CodeCoverage
文件夹,如果再次正确设置 Host Application
,运行 构建和测试工作正常,并生成代码覆盖率报告。
您必须确保包名称在所有配置中都相同。 Xcode 修改它以防您使用不受支持的字符。例如 Xcode 将“-”替换为“_”。
在所有配置中,转到:
Project
-> Build Settings
-> Product Module
并设置完全相同的不带空格的名称。
总结
我正在尝试从我的项目中获取代码覆盖率报告。但是,当我尝试构建和 运行 测试时,派生数据文件夹中没有创建 CodeCoverage 文件夹。
我该怎么做?
我运行ning xcodebuild如下:
xcodebuild \
-workspace <some_workspace> \
-scheme <some_scheme> \
-destination <some_destination> \
-derivedDataPath <some_path> \
-enableCodeCoverage YES \
build test
有什么问题?
对于我的 workspace/project 它在最后一行失败:
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
我尝试了什么?
我对一个干净的新项目进行了同样的尝试,同样的 运行ning 相同的 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
解决方法
似乎 'trick' 它起作用的另一件事是将 Host Application
设置为 None
。完成此操作后,它会构建和测试,但由于缺少主机,测试失败。但是,这会导致创建 CodeCoverage
文件夹,如果再次正确设置 Host Application
,运行 构建和测试工作正常,并生成代码覆盖率报告。
您必须确保包名称在所有配置中都相同。 Xcode 修改它以防您使用不受支持的字符。例如 Xcode 将“-”替换为“_”。
在所有配置中,转到:
Project
-> Build Settings
-> Product Module
并设置完全相同的不带空格的名称。