OCLint

OCLint学习

2021-03-29  本文已影响0人  Aaron升

传送门

《OCLint规则查询&简单理解》

Demo源码:https://gitee.com/hcsaaron/csoclint-demo

安装OCLint及相关工具

brew tap oclint/formulae
brew install oclint
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展示如下:

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
创建Target
2) 选中OCLint - Build Phases - New Run Script Phase
创建Run Script
3) 编写脚本

根据自己的需求修改相关规则

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-typexcode,编译成功后会在Xcode中展示相关issuse

点击直接进入对应代码查看问题。

Issues

自定义规则

可以看到,OCLint默认规则有的比较苛刻,我们可以修改脚本,适当提高相关规则的阈值。了解更多OCLint规则及使用,请移步《OCLint规则查询&简单理解》

参考资料

iOS静态分析:OCLint的使用

iOS使用OCLint静态代码分析+jenkins集成

上一篇下一篇

猜你喜欢

热点阅读