OCLint学习
传送门
Demo源码:https://gitee.com/hcsaaron/csoclint-demo
安装OCLint及相关工具
- 安装oclint:
brew tap oclint/formulae
brew install oclint
- 安装xcpretty(增加xcodebuild输出的可读性)
gem install xcpretty
OCLint命令及使用
1) cd进项目,查看项目信息
cd /Users/xxx/CSOCLintDemo
xcodebuild -list
Command line invocation:
/Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -list
Information about project "CSOCLintDemo":
Targets:
CSOCLintDemo
CSOCLintDemoTests
CSOCLintDemoUITests
Build Configurations:
Debug
Release
If no build configuration is specified and -scheme is not passed then "Release" is used.
Schemes:
CSOCLintDemo
2) 编译项目
先clean
指定项目CSOCLintDemo,使用-project
CSOCLintDemo.xcodeproj
,然后再Debug
编译项目。最后通过xcpretty
,使用-r json-compilation-database
可以生成指定格式的数据。
编译成功后,会在项目的文件夹下出现 compile_commands.json
文件:
xcodebuild -project CSOCLintDemo.xcodeproj -scheme CSOCLintDemo clean \
&& xcodebuild -project CSOCLintDemo.xcodeproj -scheme CSOCLintDemo -configuration Debug COMPILER_INDEX_STORE_ENABLE=NO \
| xcpretty -r json-compilation-database -o compile_commands.json
如果是用pod
集成的项目,要使用-workspace
CSSphinx.xcworkspace
这里加上COMPILER_INDEX_STORE_ENABLE=NO
,是因为报这个错oclint: error: compilation contains multiple jobs:
如果要使用旧编译模式,需要加上-UseModernBuildSystem=NO
3) 生成html报告
使用oclint-json-compilation-database
命令对上一步生成的json数据进行分析,对项目代码进行分析,最终生成oclintReport.html文件。OCLint目前支持输出html、json、xml、pmd、Xcode格式文件:
oclint-json-compilation-database -- -report-type html -o oclintReport.html
用浏览器打开oclintReport.html
展示如下:
4) 分析单个文件
如何工程太大,分析太耗时间,可以单独分析某个文件或文件夹,替换掉下面的xxxx:
oclint-json-compilation-database -i AppDelegate.m -- -report-type html -o oclintReport-AppDelegate.html
OCLint的规则
1) 通过-e
忽略指定文件,可以指定多个
假如你使用了CocoaPods依赖第三方库,你可能想忽略对Pods文件夹的分析:
oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html
2) 通过-rc
改变检查规则的默认值
比如有一条默认规则:long line [size|P3] Line with 137 characters exceeds limit of 100 ,这表示一个方法里的代码行数不能超过100,可以通过-rc改变默认100行的限制比如改成200行:
oclint-json-compilation-database -- -report-type html -o oclintReport.html \
-rc=LONG_LINE=200 \
3) 通过-disable-rule
可以禁止检查某一规则
比如禁止UnusedMethodParameter
检查未使用的方法参数(一般使用到的系统代理方法返回的参数都不一定会使用到,建议忽略此规则):
oclint-json-compilation-database -- -report-type html -o oclintReport.html \
-disable-rule UnusedMethodParameter \
4) 通过-max-priority
来设置允许的违例数
如果超过违例个数,则失败,我们这里设置为9999个:
oclint-json-compilation-database -- -report-type html -o oclintReport.html \
-max-priority-1=9999 \
-max-priority-2=9999 \
-max-priority-3=9999 \
在Xcode中通过脚本集成OCLint
1) 创建Target,命名为OCLint
创建Target2) 选中OCLint - Build Phases - New Run Script Phase
创建Run Script3) 编写脚本
根据自己的需求修改相关规则
source ~/.bash_profile
export LC_ALL="en_US.UTF-8"
PROJECT_NAME="CSOCLintDemo.xcodeproj"
TARGET_NAME="CSOCLintDemo"
cd ${SRCROOT}
rm -rf ./build/derivedData
xcodebuild clean -UseModernBuildSystem=NO
xcodebuild -project ${PROJECT_NAME} -scheme ${TARGET_NAME} -UseModernBuildSystem=YES -derivedDataPath ./build/derivedData -configuration Debug COMPILER_INDEX_STORE_ENABLE=NO | xcpretty -r json-compilation-database -o compile_commands.json
oclint-json-compilation-database -- -report-type Xcode \
-rc=LONG_METHOD=50 \
-rc=LONG_LINE=100 \
-disable-rule ParameterReassignment \
-disable-rule TooFewBranchesInSwitchStatement \
-max-priority-1=9999 \
-max-priority-2=9999 \
-max-priority-3=9999 \
exit
3) Xcode运行OCLint
Xcode中切换Scheme为OCLint,Command+B编译,由于脚本中-report-type
为xcode
,编译成功后会在Xcode中展示相关issuse
点击直接进入对应代码查看问题。
Issues自定义规则
可以看到,OCLint默认规则有的比较苛刻,我们可以修改脚本,适当提高相关规则的阈值。了解更多OCLint规则及使用,请移步《OCLint规则查询&简单理解》