讓XCode自動CodeReview你的程式碼-OCLint使用

王小樹發表於2017-09-28

前言

OCLint 是一個靜態分析程式碼的工具,支援自定義規則,可以很好地幫助我們規範程式碼,這篇文章主要介紹通過OCLint讓XCode來幫你Code Review,規範程式碼。
OCLint相關的詳細內容也可以到OCLint官網上檢視。

安裝OCLint 和 xcpretty

這裡需要安裝OCLintxcpretty 工具

1、 安裝xcpretty

gem安裝xcpretty

sudo gem install xcpretty複製程式碼

用sudo是防止一些許可權出現問題

2、安裝OCLint

安裝OCLint有兩種常用的方法:

1)通過安裝包:

從oclint的github專案連結中下載安裝包oclint-0.10.3-x86_64-darwin-15.5.0.tar.gz.
解壓後在當前使用者的.bashrc中配置環境變數

OCLINT_HOME=/pathexport PATH=$PATH:OCLINT_HOME/bin複製程式碼

然後source .bashrc即可

2)通過Homebrew
brew tap oclint/formulae
brew install oclint複製程式碼
3)確認安裝成功

執行oclint確認環境配置正確

$ oclint複製程式碼

如果展示以下內容即為安裝成功:

oclint: Not enough positional command line arguments specified!Must specify at least 1 positional arguments: See: oclint -help複製程式碼

OCLint 的使用

這裡介紹一些簡單常用的用法,足夠應對很多場景,其他詳細用法可以到OCLint Manual上檢視。


OCLint 有三個指令:oclintoclint-json-compilation-databaseoclint-xcodebuild

1、oclint:常規核心指令。
2、oclint-json-compilation-database:從編譯好的compile_commands.json 檔案中讀取配置資訊並執行 oclint。
3、oclint-xcodebuild:主要用於生成compile_commands.json檔案,現在已經不進行維護了,我們可以用xcpretty替代,來生成json檔案。

oclint指令

使用語法

oclint [options] <source> -- [compiler flags]複製程式碼

[options]為一些引數選項,可以是規則載入選項、報告形式選項等:

1、 -R <路徑> : 檢測所用的規則的路徑,預設路徑$(/path/to/bin/oclint)/../lib/oclint/rules
2、-disable-rule <規則名>: 讓相對應的規則失效(OCLint 規則列表)。
3、-rc <引數>=<值> :修改閾值
4、-report-type <報告型別>,有"text"、“html”、“json”、“pmd”、“xcode”幾個型別
5、-o <路徑> 報告生成路徑。

eg:

oclint  -R  /path/to/rules   -disable-rule ObjCAssignIvarOutsideAccessors -report-type xcode複製程式碼
oclint-json-compilation-database 指令

這是我們主要用到的指令,它是oclint 指令的升級版,使用起來相對 oclint 指令簡單方便。
可以通過 -- 的方式在指令的最後加上oclint 選項。

oclint-json-compilation-database 指令有過濾檔案選項
-i :包含進某些檔案
-e : 過濾掉某些檔案
eg:

# 排除Pods 裡的檔案
oclint-json-compilation-database -e Pods 
# 包含進Pods裡的檔案
oclint-json-compilation-database -i Pods複製程式碼
oclint-xcodebuild 指令。

因為oclint-xcodebuild 指令已經不再維護,實際應用中用xcpretty代替,所以這裡就不進行介紹。

其他命令工具:xcodebuild 和 xcpretty

xcodebuild

xcodebuild是蘋果釋出自動構建的工具,可以通過命令列指令碼的方式編譯、打包Xcode 工程。
可以在終端輸入man xcodebuild來查詢相關用法

xcpretty

用xcpretty生成OClint 解析用的json 檔案
這裡用xcpretty是因為oclint-xcodebuild不再維護了,在XCode 8之後採用xcpretty來生成。

用XCode檢測程式碼

首先在targets點新增按鈕:


在Cross-platform選項中,選“Aggregate”,然後命名為"OCLint":

接著選中OCLint Target,進入Build Phases選項,點左上角的加號,選擇“New Run Script Phase”

然後輸入指令碼即可:

示例指令碼:

source ~/.bash_profile
cd ${SRCROOT}
xcodebuild clean
xcodebuild  -workspace demo.xcworkspace -scheme demo | xcpretty -r json-compilation-database --output compile_commands.json
oclint-json-compilation-database -v \
-e Pods \
-e MGLivenessDetection \
-e MGBaseKit \
-e MGIDCard \
oclint_args -- -report-type xcode \
-disable-rule ObjCAssignIvarOutsideAccessors \
-disable-rule ShortVariableName \
-rc=MINIMUM_CASES_IN_SWITCH=3 \
-rc=CYCLOMATIC_COMPLEXITY=10 \
-rc=LONG_CLASS=700 \
-rc=LONG_LINE=200 \
-rc=NCSS_METHOD=40 \
-rc=NESTED_BLOCK_DEPTH=5 \
-rc=TOO_MANY_FIELDS=20 \
-rc=TOO_MANY_METHODS=30 \
-rc=TOO_MANY_PARAMETERS=6
exit複製程式碼

接著選擇OCLint Scheme,Command+B就可以執行了
在執行前最好刪除drivedata裡面的資料快取,以保證不會解析到舊的編譯內容。
編譯成功後Xcode上會在不符合規則的程式碼上顯示Warning:

參考連結:

iOS 工程自動化 - OCLint 使用詳解
用OCLint給iOS程式碼做靜態分析

相關文章