###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的其它方法,我還要繼續學習下去。