一、工程配置
1、build settings设置两个instrument program flow和generate legacy test coverage files
2、info设置
Application support iTunes files sharing:可以使用iTunes或者iTools导出沙盒里数据
Application does not run in background:按HOME键后,手机会正常退出,退出时调用__gcno_flush()函数生成gcda文件。
二、代码
1、通过cocoaPods把XcodeCoverage导入到项目中
Podfile文件中添加pod 'XcodeCoverage', ‘~>1.0'
终端执行:pod install
2、在APPDelegate.m中添加如下代码
- (void)applicationDidEnterBackground:(UIApplication *)application {
#if NT_COVERAGE
#if !TARGET_IPHONE_SIMULATOR
NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
setenv("GCOV_PREFIX_STRIP", "13", 1);
#endif
extern void __gcov_flush(void);
__gcov_flush();
#endif
}
三、在模拟器中实验:
1、运行程序,测试一段时间
2、点击home键,即command+shift+H
3、cd 到项目/Pod/XcodeCoverage目录下
4、终端执行:./getcov -s
5、等待一会,即会生成相应文件(会自动打开),可自己双击下图html文件查看。
效果如下图:
4、在手机上实验:
1、在main.m中添加代码:
int main(int argc, char * argv[]) {
@try {
NSString *documentsDirectory = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).lastObject;
setenv("GCOV_PREFIX", [documentsDirectory cStringUsingEncoding:NSUTF8StringEncoding], 1);
setenv("GCOV_PREFIX_STRIP", "13", 1);
@autoreleasepool {
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
}@catch (NSException *exception) {
NSLog ( @"Stack Trace: %@" , [exception callStackSymbols ]);
}
}
2、运行安装在手机上,测试一段时间后
3、获取所有gcno文件文件:在我们在电脑的以下目录里去拷贝gcno文件, 把这些文件全选拷贝,复制到桌面的一个文件夹下,例如起名为coverage(其他地方也可以)
~/Library/Developer/Xcode/DerivedData/{project_dir}/Build/Intermediates/{target_name}.build/Debug-iphoneos/{target-name}.build/Objects-normal/arm64/
例如我的:
Macintosh HD ▸ 用户 ▸ wanggang ▸ 资源库 ▸ Developer ▸ Xcode ▸ DerivedData ▸ CustomLearn-bqfkckqonrnkamepjgvlhmelxper ▸ Build ▸ Intermediates.noindex ▸ CustomLearn.build ▸ Debug-iphoneos ▸ CustomLearn.build ▸ Objects-normal
4、获取gcda所有文件:这个文件在沙盒路径Documents下。全选拷贝,复制到和gcno同一个文件夹下(coverage)。
不知道怎么获取沙盒文件?
下载之后,显示包内容即可得到。
5、gcno文件和gcda文件都已经放到一个文件夹下了,然后要生成HTML格式的报告。
MAC 安装LCOV:
- 终端输入:不用考虑路径
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null
- 接着运行:brew install lcov
安装成功!然后
(1) 利用lcov命令生成info文件:终端执行如下命令
格式:locv -c -d 【放gcda、gcno的文件夹路径】 -b 【测试覆盖率项目的跟路径】 -o 【你想存放info文件的路径】
例如:
lcov -c -d /Users/wanggang/Desktop/coverage -b /Users/wanggang/Desktop/CustomLearn -o /Users/wanggang/Desktop/coverage/wang.info
(2)利用lcov的genhtml命令生成html报告:终端执行如下命令
格式:genhtml -t 【自定义报告标题】 【上一步生成的info文件路径】-o 【输出报告路径】
例如:
genhtml -t "CustomLearn" /Users/wanggang/Desktop/coverage/wang.info -o /Users/wanggang/Desktop/coverage/report317
即可生成如下文件
双击打开,即可看到结果:
如果有多个人进行测试,可以把他们的覆盖率整合叠加起来:
lcov -a 【第一个人的info文件】 -a 【第二个人的info文件】-a 【第三个人的info文件】…… -o 【新的info文件】
参考:
https://blog.csdn.net/duan5858/article/details/54670421
https://blog.csdn.net/conghuaxiansheng/article/details/72179483
https://www.jianshu.com/p/2a1102c54b91