AppOrderFiles集成说明
添加pod
pod 'AppOrderFiles'
在 PodFile最后面添加如下代码:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['OTHER_CFLAGS'] = '-fsanitize-coverage=func,trace-pc-guard'
config.build_settings['OTHER_SWIFT_FLAGS'] = '-sanitize-coverage=func -sanitize=undefined'
end
end
end
在didFinishLaunchingWithOptions
中调用如下代码:
AppOrderFiles(^(NSString *orderFilePath) {
NSLog(@"OrderFilePath:%@", orderFilePath);
});
生成Order File的原理
基于 Clang SanitizerCoverage 的方案
在 Clang 10 documentation 中可以看到 LLVM 官方对 SanitizerCoverage 的详细介绍。
简单来说 SanitizerCoverage 是 Clang 内置的一个代码覆盖工具。
它把一系列以 __sanitizer_cov_trace_pc_
为前缀的函数调用插入到用户定义的函数里,借此实现了全局 AOP 的大杀器。其覆盖之广,包含 Swift/Objective-C/C/C++ 等语言,Method/Function/Block 全支持。
开启 SanitizerCoverage 的方法是:
在 build settings 里的 “Other C Flags” 中添加 -fsanitize-coverage=func,trace-pc-guard。
如果含有 Swift 代码的话,还需要在 “Other Swift Flags” 中加入 -sanitize-coverage=func 和 -sanitize=undefined。
所有链接到 App 中的二进制都需要开启 SanitizerCoverage,这样才能完全覆盖到所有调用。
基于 Clang SanitizerCoverage iOS大神
写了个工具 AppOrderFiles
。
CocoaPods 接入,一行调用生成 Order File。
参考资料
https://github.com/yulingtianxia/AppOrderFiles
https://xiaozhuanlan.com/topic/6042819753
http://yulingtianxia.com/blog/2019/09/01/App-Order-Files/
https://clang.llvm.org/docs/SanitizerCoverage.html#tracing-pcs
网友评论