我们如何为 iOS 手动测试生成 (profdata) 代码覆盖率?

How can we generate (profdata) code coverage for iOS manual tests?

我们正在使用 Xcode 7 和 8(测试版)。 Apple 已在 XCode 7 中弃用 GCOV 代码覆盖率,并在 XCode 8 中将其完全删除。因此,我们正尝试转向导出 profdata 文件。

我们需要能够在执行手动任务时生成代码覆盖率文件(profdata/profraw 但不是 gcno 或 gcda),这是我尝试过的:

GTM_CONFIGURATION_OTHER_CFLAGS = -fprofile-instr-generate -fcoverage-mapping

以及

//If enabled, passes flag -fprofile-instr-generate and -fprofile-instr-generate
CLANG_INSTRUMENT_FOR_OPTIMIZATION_PROFILING = YES

我知道如何获得 XCTest 的代码覆盖率 运行ning,但在这种情况下,我还需要能够在手动 运行 时生成它。

我相信,但没有尝试过,这可以通过在您的代码中调用 __llvm_profile_write_file(void) 来实现。您将需要转发声明它,并找出一种在需要时触发调用的方法。值得注意的是,生成的文件将继续聚合整个执行过程中的覆盖率,如果您想比较不同执行阶段的覆盖率,您可能需要复制生成的文件。

我在这里找到了一些细节:http://clang.llvm.org/docs/SourceBasedCodeCoverage.html

"Forward-declare int __llvm_profile_write_file(void) and call it to write out a profile. This function returns 0 when it succeeds, and a non-zero value otherwise. Calling this function multiple times appends profile data to an existing on-disk raw profile."

看起来 int __llvm_profile_write_file(void)CLANG_INSTRUMENT_FOR_OPTIMIZATION_PROFILING 配对适用于 Obj C 项目。但是只要在项目中添加一个swift文件swift就会报错..Swift does not support profile guided optimization.。有什么解决方法吗?