关于OCLint自定义规则

###2017.9.25 升级Xcode9GM版本后是无法用Xcode9的命令行工具的,建议切换到Xcode8的命令行工具,或者等到OCLint新版本适配Xcode9

###静态编译分析 这段时间公司要求添加静态扫描的功能,还要能自定义规则,所以就花了两天进行研究。

1.Xcode内部自带的Clang Static Analyzer(简称CSA) 2.OCLint

两者都是基于clang的前端编译,CSA由于被内置,所以使用起来比较方便,但是可用的检查规则比较少,只有16条,大部分是核心向的功能例如空指针检测,类型转换检测,空判断检测,内存泄漏检测,无法检测代码风格,可扩展性比较差。 OCLint可用的检查规则有70+条,比OSA支持的规则多很多。所以选择了OCLint。

在Google搜+看OCLint文档+Clang文档+各种踩坑总结了如下步骤 OClint步骤: 前置操作: 安装xcpretty: sudo gem install -n /usr/local/bin xcpretty 1.直接下载github源码。然后通过homebrew安装cmake(后面要用)

2.cd 到oclint-scripts命令,执行./make 。

3.为profile_bash添加以下内容: OCLINT_HOME=YourOCLIntRootPath export PATH=$OCLINT_HOME/bin:$PATH()

4.cd 到根目录 然后执行oclint-scripts/scaffoldRule RuleName -t ASTVisitor

  1. mkdir oclint-xcoderules

  2. touch create-xcode-rules.sh

  3. cd到oclint-xcoderules,在create-xcode-rules.sh中添加cmake -G Xcode -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang++ -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang -D OCLINT_BUILD_DIR=../build/oclint-core -D OCLINT_SOURCE_DIR=../oclint-core -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules 然后执行该脚本

  4. 打开生成的OCLINT_RULES.xcodeproj,选择自定义的规则,重写visitxxx方法然后编译,得到生成的dylib,把dylib放到./build/oclint-release/lib/oclint/rules。就能让OClint识别自定义规则了。 以上是配置步骤。

目前只写了扫描自定义类名是否符合规范的规则,关于用C++重写AST的其它方法,我还要继续学习下去。