iOS使用OCLint做静态代码分析
为什么要做代码检查?
- 检查代码是否误写或者错写,导致一些问题的产生,不能及时发现
- 减少工程的警告,防止后续系统版本更新的不兼容问题
- 规范代码风格,变量和方法的命名、空格和空白行,提高代码的可读性
- 减少代码冗余
初识OCLint(OCLint官网)
oclint 是对C、C++、Objective-C进行静态代码检查的工具 ,使用 oclint 对代码进行静态分析可以检查和提高项目代码质量、寻找潜在的问题…如:
- 可能的错误-if / else / try / catch / finally语句为空
- 未使用的代码 - 未使用的局部变量和参数
- 复杂的代码 - 高圈复杂度,NPath复杂度和高NCSS
- 冗余代码 - 冗余if语句和无用的括号
- 代码气味 - 长方法和长参数列表
- 错误做法 - 逻辑和参数的重新分配
注:NPath 复杂度是一个方法中各种可能的执行路径总和 ; NCSS有效代码行
以上翻译自OCLint官网
OCLint安装和使用
安装
使用第三方的软件会比使用xcodebuild方便些
最新xctool的build方法已经弃用,不能配合OCLint使用,推荐使用xcpretty
打开终端 一次输入一下命令
// 安装OCLint
brew tap oclint/formulae
brew install oclint
// 安装xcpretty
gem install xcpretty
验证是否安装oclint成功
终端输入: oclint 如果输出以下内容,表示安装成功
使用
oclint 详细使用方法
1、到这,确定你已经有一个xcode的项目(不管是否使用pod)
2、在你的项目下创建分析的shell脚本文件analysis.sh
3、在.sh文件中写入以下示例内容(compile_commands.json是生成的日志文件名)
# 移除原有的生成文件
xcodebuild clean | xcpretty
rm -r build
rm -r compile_commands.json
# Build和把日志写到目标文件
xcodebuild | xcpretty -r json-compilation-database --output compile_commands.json
文件内容截图:
4、打开终端,进入你的项目根目录
(1)cd 项目路径
(2)打开.sh文件
执行:sh ./analysis.sh,终端会开始分析并生成目标文件(compile_commands.json)
执行结果可能会出现错误,但也没关系,继续往下走
5、分析完之后打开xcode,在项目的target,Build phases创建一个Run Script
6、在里面输入以下内容:
oclint-json-compilation-database -e Pods oclints_args – -report-type xcode -max-priority-1=9999 -max-priority-2=9999 -max-priority-3=9999
注:如果不加 -max-priority-1=9999 -max-priority-2=9999 -max-priority-3=9999
,command + b 编译,可能就会报错 oclint:error:violations exceed threshold
原因是超过了issue的阈值,所以在脚本末尾加上 -max-priority-1=9999 -max-priority-2=9999 -max-priority-3=9999
7、过滤项目中的第三方警告(第三方的警告我们不予修改)
- 如果pod导入,添加的脚本就是
oclint-json-compilation-database -e Pods
- 如果是手动导入,添加的脚本就是
oclint-json-compilation-database -e FMDB -e XMLReader -e Masonry -e MJRefresh
类似,将所有手动添加的第三方库都添加
8、再次编译,xcode上就会出现很多warning,在所有不符合规则的代码上显示warning
如果要忽略一些警告,可自定义OCLint的规则,建立.OCLint
的文件,可查看我的下一篇文章