OCLint学习

作者: Aaron升 | 来源:发表于2021-03-29 23:57 被阅读0次

传送门

《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展示如下:

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集成

相关文章

  • OCLint 代码的静态分析工具 - Xcode

    OCLint的作用 Git 地址https://github.com/oclint/oclint OClint是针...

  • OCLint学习

    传送门 《OCLint规则查询&简单理解》[https://www.jianshu.com/p/14a32ffcd...

  • iOS代码扫描-OCLint

    1、OCLint是什么 OCLint[https://github.com/oclint/oclint] 是基于L...

  • 2021-07-16

    OClint使用 brew tap oclint/formulate brew install oclint 直接...

  • 学习OCLint的使用

    最近看了下自动代码静态分析的工具,学习了一下OCLint的使用,将整个的安装、脚本记录如下。 一、OCLint 的...

  • OCLint 安装使用

    简介 OCLint 官方文档[http://oclint.org/]OCLint是一种静态代码分析[https:/...

  • Oclint -help

    参考:OClint安装和使用和OClint手册

  • OClint的使用

    关于OCLint OCLint 是基于LLVM/Clang(前端编译)而开发的代码静态分析工具。 OCLint可用...

  • OCLint集成

    OCLint集成 编译OCLint 1、安装CMake和Ninja这两个编译工具 2、clone OCLint项目...

  • Homebrew 安装 OCLint

    Installing OCLint $ brew tap oclint/formulae $ brew insta...

网友评论

    本文标题:OCLint学习

    本文链接:https://www.haomeiwen.com/subject/gscshltx.html