【发布时间】: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 文件夹:
<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,则运行构建和测试工作正常,并生成代码覆盖率报告。
【问题讨论】:
-
该错误似乎表明它与您的测试目标方案有关。您正在通过命令行运行测试,但如果您通过 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