前言
OCLint 是一個靜態分析程式碼的工具,支援自定義規則,可以很好地幫助我們規範程式碼,這篇文章主要介紹通過OCLint讓XCode來幫你Code Review,規範程式碼。
OCLint相關的詳細內容也可以到OCLint官網上檢視。
安裝OCLint 和 xcpretty
這裡需要安裝OCLint
和 xcpretty
工具
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 有三個指令:
oclint
、oclint-json-compilation-database
、oclint-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: