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

时间:2016-08-17 19:54:47

标签: ios xcode7 code-coverage xcodebuild xcode8

我们正在使用Xcode 7和8(beta)。 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

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

2 个答案:

答案 0 :(得分:1)

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

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

“forward-declare int __llvm_profile_write_file(void)并调用它来写出一个配置文件。该函数成功时返回0,否则返回非零值。多次调用此函数会将配置文件数据附加到现有的 - 磁盘原始配置文件。“

答案 1 :(得分:0)

看起来int __llvm_profile_write_file(void)适用于与CLANG_INSTRUMENT_FOR_OPTIMIZATION_PROFILING配对的Obj C项目。但只要你在项目中添加一个swift文件,swift就会抱怨.. Swift does not support profile guided optimization.。有没有解决方法?