来自:http://oclint.org
OCLint 就是一个建立在 Clang 上的工具,能够发现代码中潜在的问题,可以用来提高质量和减少缺陷, 它目前支持C, C++, Objective-C语言
OCLint可以发现这些问题
可能的bug - 空的 if / else / try / catch / finally 语句
未使用的代码 - 未使用的局部变量和参数
复杂的代码 - 高圈复杂度, NPath复杂, 高NCSS
冗余代码 - 多余的if语句和无用的括号
坏味道的代码 - 过长的方法和过长的参数列表
不好的使用 - 倒逻辑和入参重新赋值
OCLint优点
OCLint有更多的检查规则和定制,和很多工具集成,也同样可用于持续集成。
安装
本来打算使用工具Homebrew安装的,无奈败给公司的网络,所以打算手动安装。
命令总结一下
brew tap oclint/formulae
brew install oclint
首先下载oclint-0.13-x86_64-darwin-17.0.0.tar.gz的安装包,然后解压。
根据以下命令将二进制文件拷贝到系统文件夹中:
cp bin/oclint* /usr/local/bin/
cp -rp lib/* /usr/local/lib/
cp -rp include/* /usr/local/include/
不过这是直接对系统路径进行更改,它可能会破坏其他工具或系统库的依赖关系。如果没有信心,不确定是否会破坏其他的依赖,就不要选这种了。
安装 xcpretty
用于对xcodebuild的输出进行格式化
gem install xcpretty
不过我这里因为很久没修改过镜像了,所以认证失败,接下里修改一下镜像
gem source -l //先查看一下目前的镜像源
*** CURRENT SOURCES ***
https://ruby.taobao.org/
gem sources --add https://gems.ruby-china.org/ --remove https://ruby.taobao.org/
//添加新的镜像源,删除旧的镜像源
gem source -l
*** CURRENT SOURCES ***
https://gems.ruby-china.org/
修改成功,然后下载xcpretty
gem install xcpretty
使用
首先进到工程的根目录下
xcodebuild -workspace 工程名称.xcworkspace/ -scheme scheme名称 analyze
| tee xcodebuild.log
| xcpretty --report json-compilation-database
如果没有用pod的话
xcodebuild -target 工程名称 -scheme scheme名称 analyze
| tee xcodebuild.log
| xcpretty --report json-compilation-database
会在根目录下生成xcodebuild.log 文件,以及build文件夹,文件夹内report文件会生成compile_db.json文件
//清空之前编译过的
xcodebuild clean -workspace 工程名称.xcworkspace/ -scheme scheme名称
//将文件移动到根目录,并修改文件名
mv ./build/reports/compile_db.json ./compile_commands.json
//将json文件转换成html文件
oclint-json-compilation-database -e Pods -- -report-type=html -o oclint_result.html
然后项目目录下就会出现oclint_result.html文件,双击打开就可以看到分析结果:
优先级的级别是从Priority 1, Priority 2, Priority 3 依次降低的;
Total Files 总文件数;
Files with Violations 违规文件数;
Compiler Warnings 表示项目中的警告;
Compiler Errors 表示编译错误;
Location 表示警告的位置;
Warning
oclint: error: one compiler command contains multiple jobs:
在进行最后一步转换成html的时候,会碰到这个error,一般是编译Pods 会碰到的问题,
首先在Podfile添加一下代码:
post_install do |installer|
installer.pods_project.targets.each do |target|
target.build_configurations.each do |config|
config.build_settings['COMPILER_INDEX_STORE_ENABLE'] = "NO"
end
end
end
然后将项目工程中的所有COMPILER_INDEX_STORE_ENABLE这个选项都设置为NO,这样就可以正常的执行了
其他属性:
# --命名
# 变量名字最长字节
#-rc=LONG_VARIABLE_NAME=1
# 变量名字最短字节
#-disable-rule ShortVariableName
# --size
# 圈复杂度
#-re=CYCLOMATIC_COMPLEXITY=1
# 每个类行数
#-rc=LONG_CLASS=1
# 每行字节数量
#-rc=LONG_LINE=1
# 每个方法行数
#-rc=LONG_METHOD=1
# 忽略注释后括号后的有效代码行数
#-rc=NCSS_METHOD=1
# 嵌套深度
#-rc=NESTED_BLOCK_DEPTH=1
# 字段数量
#-rc=TOO_MANY_FIELDS=1
# 方法数量
#-rc=TOO_MANY_METHODS=1
# 方法参数
#-rc=TOO_MANY_PARAMETERS=1