最近需要使用工具进行代码检测,进一步查找代码缺陷。决定使用OCLint,看了一些文章,整理如下:
OCLint介绍
OCLint是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug。项目地址:http://oclint.org/。
主要能检查到的代码缺陷:
可能出现的bug,空的if/else/try/catch/finally的参数
没有使用的变量或者参数
复杂的代码逻辑,多个if/else的判断
不需要的代码
过长的方法或者参数
错误的分配方式
…
静态代码分析工具是侦测编译器不可见的潜在缺陷的关键技术。OCLint 具有以下先进的代码检验特性:
依靠源码的抽象语法树来提高分析的精确度以及效率,误报率低
动态规则
灵活可扩展的配置,确保用户可以自定义分析行为
命令行式的调用使持续集成成为可能
OCLint 安装
使用Homebrew安装
brew install oclint
针对对OCLint升级的方法:
brew update
brew upgrade oclint
清理旧版本的安装数据
brew cleanup
OCLint 工具的组成
OCLint 工具集由一下三部分组成
oclint
oclint-json-compilation-database
oclint-xcodebuild
具体的使用手册还是建议大家去阅读他们的官方文档,其功能可以简单概括为:
oclint 是 OCLint 工具集最主要的指令,主要作用是规则加载、编译分析选项以及生成分析报告
oclint-json-compilation-database 的作用是在 JSON Compilation Database format 类型的编译文件 compile_commands.json 中提取必要的信息。
oclint-xcodebuild 用于将 xcodebuild 生成的 log 文件 xcodebuild.log 转换为 JSON Compilation Database format 类型
xcodebuild
xcodebuild是xcode的编译命令。
查看xcodebuild的版本信息
xcodebuild -version
xcpretty
由于oclint-xcodebuild不在使用,需要安装xcpretty,使用xcpretty命令分析日志信息。
xcpretty是用来格式化xcodebuild输出的工具,使用ruby开发。
xcpretty 安装
gem install xcpretty
OCLint / xcodebuild /xcpretty结合使用
OCLint 结合 xcodebuild/xcpretty 的使用主要分为一下几个步骤:
- 使用 xcodebuild clean 清理工程(可选)
- 使用 xcodebuild build 编译工程
- 使用 xcpretty 输出编译文件
- 使用 oclint-json-compilation-database 输出分析结果
具体命令行如下(注意:使用下面命令行需先cd到需要检测的工程目录下):
- 编译工程
以下命令将编译代码信息相关的日志输入到xcodebuild.log中
xcodebuild | tee xocdebuild.log
- xcpretty 输出编译文件
使用参数–report json-compilation-database或者-r json-compilation-database可以生成指定生成数据的格式,当前指定为json格式。
运行命令:
xcodebuild |xcpretty -r json-compilation-database
在build/reports中得到文件compilation_db.json
- 分析json数据
使用xcpretty生成的文件名是:compilation_db.json,在目录build/reports目录中。
因此需要把xcpretty生成的文件compilation_db.json复制到当前目录下。重命名为compile_commands.json。
注意:运行下面命令之前要执行上面这个步骤:否则会提示找不到compile_commands.json文件
oclint-json-compilation-database – -o=report.html
这样可以到一个html的报告。
脚本化
根据上面的步骤写了一个shell脚本用来执行OCLint的检查
#! /bin/sh
if which oclint 2>/dev/null; then
echo 'oclint exist'
else
brew tap oclint/formulae
brew install oclint
fi
if which xcpretty 2>/dev/null; then
echo 'xcpretty exist'
else
gem install xcpretty
fi
#cd test
xcodebuild clean
xcodebuild | xcpretty -r json-compilation-database
cp build/reports/compilation_db.json compile_commands.json
oclint-json-compilation-database -e Pods -e ManagerProject/Tools -- -rc=LONG_LINE=300 -disable-rule=LongLine -report-type html -o=report.html -max-priority-1=9999 -max-priority-2=9999 -max-priority-3=9999
上述脚本解释:
-e 选项来忽略对制定路径文件的分析,对于使用 Cocoapods 来管理依赖的工程,我们往往会忽略 Pods 文件夹。
-report-type html 设置最后生成的html格式,便于阅读