Xcode UI 测试:xcodebuild 无法在 xcode12 上生成 Coverage.profdata,失败并出现错误“错误:无法合并配置文件。”
Posted
技术标签:
【中文标题】Xcode UI 测试:xcodebuild 无法在 xcode12 上生成 Coverage.profdata,失败并出现错误“错误:无法合并配置文件。”【英文标题】:Xcode UI Tests : xcodebuild fails to generate Coverage.profdata on xcode12, fails with error 'error: No profiles could be merged.' 【发布时间】:2021-03-16 10:42:25 【问题描述】:这是我们在遇到问题时的设置方式。
我们有一个同时包含 UI 和单元测试的项目。 使用快车道。 使用在 aws ec2 实例上运行的 Jenkins 实施 CI/CD。 最近我们迁移到 Xcode12(我知道!!!不过,迟到总比没有好)问题陈述:
迁移到 xcode12 后,jenkins 管道无法生成 Coverage.profdata
文件,而 Slather
将使用该文件来导出代码覆盖率指标。是的,运行xcode11时没有发生。
在将xcodebuild
命令指向适当的命令行工具版本(在本例中为 12.4)后,我们正在使用它。
首先我们使用(在获得模拟器 ID 后)构建应用
xcodebuild build-for-testing -workspace Example.xcworkspace -scheme ExampleUITests -derivedDataPath ./derivedData -destination 'platform=ios Simulator,id=<simulator_id>'
然后我们使用
运行测试xcodebuild test-without-building -workspace Example.xcworkspace -scheme ExampleUITests -enableCodeCoverage YES -destination 'platform=iOS Simulator,id=<simulator_id>' -derivedDataPath ./derivedData
所有 UI 测试都成功运行,但在测试套件完成时会出现以下语句。
warning: <Path_to_derived_data>/Build/ProfileData/<Some_UUID>/<Filename>.profraw: Invalid instrumentation profile data (file header is corrupt)
error: No profiles could be merged.
P.S:这不会发生在我的本地机器上。仅在 Jenkins ec2 实例的 mac 上。
【问题讨论】:
你用fastlane的xcov插件试过了吗? 所以在这个例子中我们没有使用 fastlane,你可以看到它是 xcodebuild 命令。并不是我不能使用它,而是我们将它作为模板化基础设施的一部分运行,这是在运行测试时执行的。 好吧,其实xcodebuild会在我们遇到了类似的问题。我们也在使用 fastlane。
对我们有用的修复是确保我们从之前的构建中删除任何工件。您描述的情况与我们面临的情况非常相似。单元测试的第一次运行会生成一些覆盖工件,之后执行 UI 测试也会生成覆盖工件,然后 xcov/slather 无法解析这些工件。
因此,您能否检查一下删除派生数据中的Logs/Test
文件夹是否有帮助?如果它没有尝试完全清除派生数据,然后检查这是否有助于解决 CI 问题。
见related threadson xcov
【讨论】:
以上是关于Xcode UI 测试:xcodebuild 无法在 xcode12 上生成 Coverage.profdata,失败并出现错误“错误:无法合并配置文件。”的主要内容,如果未能解决你的问题,请参考以下文章
xcodebuild 无法使用 XCTestExpectation 运行异步测试?
使用 swift 2.3 从 xcode 8 中的命令行运行 xcode ui 测试
xcode build 命令行变量不能同时传递给 UI 测试和 App