NNCodeCoverage用来统计Swift & Objective-C 工程的代码全量或增量覆盖率,支持在本地开发环境中查看代码覆盖率。
NNCodeCoverage 组件是用来监听代码执行情况,在Podfile 文件中添加以下代码:
pod 'NNCodeCoverage', :path => 'xxx/xxx' # 覆盖率监听器组件NNCodeCoverage 组件暂时使用path的方式进行集成。
将coverage_scripts连同文件夹拷贝至你的电脑任一位置。
Podfile引入coverage_config.rb
post_intall与pre_install配置
# 重置覆盖率配置的标记
$coverage_recover = false
# 设置需要获取覆盖率的组件为static framework
$static_frameworks = ['MBProgressHUD', 'SwiftTestModule', 'OCTestModule']
# 初始化配置
coverage_setup($coverage_recover)
pre_install do |installer|
# 设置组件为二进制格式
coverage_static_frameworks_config($static_frameworks, installer)
end
post_install do |installer|
# pod project配置
coverage_pods_project_config(installer, $coverage_recover)
end关于coverage_static_frameworks_config的这个函数是用来支持本地环境下获取代码覆盖率的,如果你的组件既不是二进制格式的,podspec中又没有指定static_framework=true,在代码覆盖率结果中是看不到相关代码的覆盖率的,可以通过该函数将组件改成 static framework(以MBProgressHUD为例)。
如果想要获取增量代码覆盖率则需要依赖 lcov,通过 homebrew 安装 lcov。
brew install lcovpod install编译并运行项目就开始代码覆盖率检测。通过上面步骤后,你可以看到你的项目中发生下面的变化:
运行项目一段时间后,将app退至后面你可以在控制台中看到profraw文件的路径,此时就可以开始代码覆盖率解析了。使用coverage_show.rb脚本进行代码覆盖率解析,命令如下
ruby xxx/xxx/coverage_scripts/coverage_show.rb --project-dir 项目地址 --profraw-path profraw文件地址 --git-diff-commit gitcommit1,gitcommit2使用ruby xxx/xxx/coverage_scripts/coverage_show.rb --help可以查看具体参数
关于增量代码覆盖率,我采用的也是网上提到的基于git diff的方式进行获取增量覆盖率。通过git diff 命令我们可以获取到代码的修改,git diff直接使用网上现有的脚本diffParser.rb。
基于 llvm-cov 获取到 profdata 文件是一个二进制文件,直接解析该文件还是比较困难的,但是可以通过 profdata 文件生成 info文件。通过 diff 解析结果与原始的 info 文件做一次对比,裁剪出一份新的 info 文件,通过 lcov 对裁剪后的 info 文件进行解析就可以获取到增量代码的代码覆盖率情况。
这里提供了一个Example App来方便更好地理解。
- 安装Example App
- 按使用流程进行配置并运行pod install
- 运行项目后退至后台,开始进行代码覆盖率解析
iOS 10+
NeroXie, xyh30902@163.com
NNBox 基于 MIT 许可证,查看 LICENSE 文件了解更多信息。







