关于OCLint
- OCLint 是基于LLVM/Clang(前端编译)而开发的代码静态分析工具。
- OCLint可用的检查规则有70+条。其原理:通过扩展Clang 的checkers,Clang整个静态分析器的入口是AnalysisConsumer,接着会调HandleTranslationUnit()方法进行AST层级进行分析或者进行path-sensitive分析。默认会按照内联的path-sensitive分析,构建CallGraph,从顶层调用者按照调用的关系来分析,具体是使用的工作列表中算法,从EntryBlock开始一步步的模拟,这个过程叫做分析。
OCLint 包含三个命令行指令:
- oclint:基础指令。通过这个指令可以指定加载验证规则、编译代码、分析代码和生成报告。
- oclint-json-compilation-database:高级指令。通过这个指令可以从 compile_commands.json 文件中读取配置信息并执行 oclint。
- oclint-xcodebuild:通过这个指令可以从 Xcode 的 xcodebuild.log 文件导出编译选项并保存成 JSON Compilation Database 格式。然后把保存到 compile_commands.json 文件中(OCLint team好久不维护了,采用xcpretty替换)。
OCLint 怎么工作:
OCLint 安装部署:
- 将oclint-0.13.1 和 xcpretty-0.3.0 移动到/usr/local目录下。
终端执行命令:
sudo mv oclint-0.13.1 /usr/local
sudo mv xcpretty-0.3.0 /usr/local
提示输入密码时,输入电脑的登录密码 - 将oclint 和 xcpretty的执行文件路径添加到PATH中。
编辑用户根目录下的.bash_profile 文件,终端输入open .bash_profile往里面添加下面3行。如果文件不存在就创建一个(用touch ~/.bash_profile)
OCLINT_HOME=/usr/local/oclint-0.13.1
XCPRETTY_HOME=/usr/local/xcpretty-0.3.0
export PATH=$PATH:$OCLINT_HOME/bin
export PATH=$PATH:$XCPRETTY_HOME/bin - 验证环境:打开在终端执行 source ~/.bash_profile (让.bash_profile里的修改立即生效。电脑开机登录后会自动加载该文件,以后无需执行)。执行oclint -version 和 xcpretty -version查看
对iOS项目进行OCLint检查 :
1.将编写好的脚本文件移动到项目根目录下 ,终端运行脚本
2.修改oclint-ignore文件。这是忽略配置文件,可以通过文本工具编辑。里面已经添加了默认的忽略目录,可以根据项目自行增加或删减。
3.修改oclint-settings文件。 这是oclint依赖的项目编译配置文件,内容如下图所示,特别注意scheme和sdk的配置
项目配置规范
-
路径配置添加上$(PROJECT_DIR)
target里Paths相关的配置,如果是相对路径请修改为绝对路径,如下图所示,其中$(PROJECT_DIR) 表示 .xcodeproj 所在目录,这里是myproject.xcodeproj的所在路径:
/Users/hzh/works/iOS-UI/myproject
image.png - 引用自己项目里的文件使用 #import "XXX.h"
如在myproject项目里,引用myproject里的头文件
#import "WKAlertController.h" //正确
#import <myproject/myproject.h> //不符合规范
#import <myproject/WKAlertController.h> //不符合规范
myproject里引用其它库里的文件,使用#import <xxx/xxx.h>
#import <WKNetworking/WKNetworking.h> //正确
FAQ
- xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance
解决:终端执行命令
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
网友评论