OCLint 是一個靜態分析代碼的工具,支持自定義規則,能夠很好地幫助咱們規範代碼,這篇文章主要介紹經過OCLint讓XCode來幫你Code Review,規範代碼。
OCLint相關的詳細內容也能夠到OCLint官網上查看。html
這裏須要安裝OCLint
和 xcpretty
工具git
xcpretty
用gem
安裝xcpretty
github
sudo gem install xcpretty複製代碼
用sudo是防止一些權限出現問題json
OCLint
安裝OCLint
有兩種經常使用的方法:xcode
從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
便可bash
brew tap oclint/formulae
brew install oclint複製代碼
運行oclint確認環境配置正確ide
$ oclint複製代碼
若是展現如下內容即爲安裝成功:工具
oclint: Not enough positional command line arguments specified!Must specify at least 1 positional arguments: See: oclint -help複製代碼
這裏介紹一些簡單經常使用的用法,足夠應對不少場景,其餘詳細用法能夠到OCLint Manual上查看。ui
oclint
、
oclint-json-compilation-database
、
oclint-xcodebuild
。
一、oclint:常規核心指令。
二、oclint-json-compilation-database:從編譯好的compile_commands.json 文件中讀取配置信息並執行 oclint。
三、oclint-xcodebuild:主要用於生成compile_commands.json文件,如今已經不進行維護了,咱們能夠用xcpretty替代,來生成json文件。
使用語法
oclint [options] <source> -- [compiler flags]複製代碼
[options]爲一些參數選項,能夠是規則加載選項、報告形式選項等:
一、 -R <路徑> : 檢測所用的規則的路徑,默認路徑
$(/path/to/bin/oclint)/../lib/oclint/rules
二、-disable-rule <規則名>: 讓相對應的規則失效(OCLint 規則列表)。
三、-rc <參數>=<值> :修改閾值
四、-report-type <報告類型>,有"text"、「html」、「json」、「pmd」、「xcode」幾個類型
五、-o <路徑> 報告生成路徑。
eg:
oclint -R /path/to/rules -disable-rule ObjCAssignIvarOutsideAccessors -report-type xcode複製代碼
這是咱們主要用到的指令,它是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 指令已經再也不維護,實際應用中用xcpretty代替,因此這裏就不進行介紹。
xcodebuild
是蘋果發佈自動構建的工具,能夠經過命令行腳本的方式編譯、打包Xcode 工程。
能夠在終端輸入man xcodebuild
來查詢相關用法
用xcpretty生成OClint 解析用的json 文件
這裏用xcpretty是由於oclint-xcodebuild
再也不維護了,在XCode 8以後採用xcpretty來生成。
首先在targets點添加按鈕:
接着選中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: