###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
mkdir oclint-xcoderules
touch create-xcode-rules.sh
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
然后执行该脚本打开生成的
OCLINT_RULES.xcodeproj
,选择自定义的规则,重写visitxxx方法然后编译,得到生成的dylib,把dylib放到./build/oclint-release/lib/oclint/rules。就能让OClint识别自定义规则了。 以上是配置步骤。
目前只写了扫描自定义类名是否符合规范的规则,关于用C++重写AST的其它方法,我还要继续学习下去。