初識(shí)OCLint
OCLint是一個(gè)靜態(tài)代碼分析工具,提高質(zhì)量和減少缺陷通過(guò)檢查C 履澳、C++ 和Objective-C 代碼和尋找潛在的問(wèn)題,如:
- 可能的缺陷 - 空的if / else / try / catch / finally語(yǔ)句
- 未使用的代碼 - 未使用的局部變量和參數(shù)
- 復(fù)雜的代碼 - 很高的圈復(fù)雜度,NPath復(fù)雜性和太高的NCSS
- 代碼異味 - 長(zhǎng)方法和參數(shù)列表
- 長(zhǎng)方法和參數(shù)列表不好的實(shí)踐——倒邏輯和參數(shù)重新分配
- …
靜態(tài)代碼分析是一個(gè)來(lái)檢測(cè)對(duì)于編譯不可見(jiàn)的缺陷的關(guān)鍵技術(shù)怀跛。
注:* NPath 復(fù)雜度是一個(gè)方法中各種可能的執(zhí)行路徑總和 吻谋; NCSS * 有效代碼行
以上翻譯自OCLint官網(wǎng)
安裝
使用第三方的軟件會(huì)比使用xcodebuild方便些
最新xctool的build方法已經(jīng)棄用,不能配合OCLint使用阁最,推薦使用xcpretty
// 安裝OCLint
brew tap oclint/formulae
brew install oclint
// 安裝xcpretty
gem install xcpretty
如果未安裝home brew骇两,自行去官網(wǎng)按提示安裝
更新
// 以后可能需要更新
brew update
brew upgrade oclint
使用
在終端進(jìn)入項(xiàng)目目錄,然后替換workspace的名字和scheme的名字配阵,將修改好的命令粘貼到終端執(zhí)行,等待命令執(zhí)行完畢
myworkspace=haha.xcworkspace # 替換workspace的名字
myscheme=haha # 替換scheme的名字
xcodebuild -workspace $myworkspace -scheme $myscheme clean&&
xcodebuild -workspace $myworkspace -scheme $myscheme \
-configuration Debug \
| xcpretty -r json-compilation-database -o compile_commands.json&&
oclint-json-compilation-database -e Pods -- \
-report-type html -o oclint_result.html \
-rc LONG_LINE=200 \
-max-priority-1=100000 \
-max-priority-2=100000 \
-max-priority-3=100000; \
rm compile_commands.json;
if [ -f ./oclint_result.html ]; then echo '-----分析完畢-----'
else echo "-----分析失敗-----"; fi
中間可能會(huì)在Build Succeeded
后面等待一段時(shí)間救拉,這是因?yàn)镺CLint在分析文件
等待命令執(zhí)行完成瘫拣,終端會(huì)打印出-----分析完畢-----
字樣拂铡,
打開(kāi)項(xiàng)目目錄葱绒,會(huì)看到目錄下會(huì)多出一個(gè)** oclint_result.html **的文件
如果沒(méi)有使用cocoapods,則去掉myworkspace=haha.xcworkspace
失球、-workspace $myworkspace
帮毁、-workspace $myworkspace
,然后再在終端執(zhí)行
另外可以自己建一個(gè)xx.sh的文件黔牵,將上面代碼粘貼進(jìn)去爷肝,每次在命令行進(jìn)入xx.sh所在目錄執(zhí)行bash xx.sh
就可以了
查看
雙擊打開(kāi)oclint_result.html文件,樣式如下
OCLint的分析結(jié)果:
優(yōu)先級(jí)的級(jí)別是從Priority 1, Priority 2, Priority 3
依次降低的
Total Files
總文件數(shù)
Files with Violations
違規(guī)文件數(shù)
Compiler Warnings
表示項(xiàng)目中的警告??
Compiler Errors
表示編譯錯(cuò)誤
Location
表示警告的位置
報(bào)告中的描述其實(shí)非常清晰金赦,一般找到代碼位置对嚼,結(jié)合代碼理解下纵竖,自己基本都能明白了
可以直接復(fù)制路徑到Chrome打開(kāi)查看,右擊查看源碼就有行號(hào)
自定義規(guī)則
上面的命令中
-e Pods
表示移除Pods文件夾里代碼的分析, 如果有繼續(xù)-e Debug.m
-report-type html
表示分析后輸出的文件類型為HTML沽甥,查看其他支持的文件類型
-o oclint_result.html
表示輸出到oclint_result.html
這個(gè)文件中()
-rc LONG_LINE=200
表示每行最大字節(jié)長(zhǎng)度為200(默認(rèn)值為100乏奥,感覺(jué)在OC中100完全不夠用啊)
一些常用規(guī)則的注釋
# --命名
# 變量名字最長(zhǎng)字節(jié)
#-rc=LONG_VARIABLE_NAME=20 \
# 變量名字最短字節(jié)
#-disable-rule ShortVariableName \
# --size
# 圈復(fù)雜度
#-re=CYCLOMATIC_COMPLEXITY=10 \
# 每個(gè)類最行數(shù)
#-rc=LONG_CLASS=700 \
# 每行字節(jié)數(shù)量
#-rc=LONG_LINE=200 \
# 每個(gè)方法行數(shù)
#-rc=LONG_METHOD=80 \
# 忽略注釋后括號(hào)后的有效代碼行數(shù)
#-rc=NCSS_METHOD=40 \
# 嵌套深度
#-rc=NESTED_BLOCK_DEPTH=5 \
# 字段數(shù)量
#-rc=TOO_MANY_FIELDS=20 \
# 方法數(shù)量
#-rc=TOO_MANY_METHODS=30 \
# 方法參數(shù)
#-rc=TOO_MANY_PARAMETERS=6
oclint-json-compilation-database命令手冊(cè)
oclint命令手冊(cè)
OCLint自定義規(guī)則介紹
OCLint全部規(guī)則介紹
文檔里面有每個(gè)規(guī)則的demo和對(duì)應(yīng)的命令名字媳瞪,上面沒(méi)介紹到的大家可以去文檔查詢
Xcode集成OCLint
這里有官網(wǎng)指導(dǎo)網(wǎng)址照宝,十分簡(jiǎn)單
http://oclint-docs.readthedocs.io/en/stable/guide/xcode.html
但是有點(diǎn)小坑:可能出現(xiàn)下面錯(cuò)誤
in `===': invalid byte sequence in US-ASCII
此時(shí)你需要在xcode的腳本的最前面,加上:
# 指定編碼
export LANG="zh_CN.UTF-8"
export LC_COLLATE="zh_CN.UTF-8"
export LC_CTYPE="zh_CN.UTF-8"
export LC_MESSAGES="zh_CN.UTF-8"
export LC_MONETARY="zh_CN.UTF-8"
export LC_NUMERIC="zh_CN.UTF-8"
export LC_TIME="zh_CN.UTF-8"
export LC_ALL=
我寫了一個(gè)簡(jiǎn)單的腳本文件oclint_xcode大家可以自己下載兢仰,可替換的變量剂碴,已經(jīng)在腳本中使用注釋標(biāo)注了出來(lái)
創(chuàng)建一個(gè)OCLint的Aggregate忆矛,將腳本放到項(xiàng)目工程根目錄下,在Run Script中加入以下代碼洽议,點(diǎn)擊運(yùn)行即可
bash ./oclint.sh
Jenkins集成OCLint
1. 創(chuàng)建一個(gè)PMDOclint.sh
的文件, 將下述代碼拷貝到文件中漫拭,并將文件放入到j(luò)enkins的根目錄下 (例如我的就是/Users/buildWork/.jenkins/PMDOclint.sh
) , 我自己使用的腳本放到了倉(cāng)庫(kù)中oclint_apply,可以去里面下載apply_jenkins/PMDOclint.sh
2. jenkins需要安裝PMD Plugin
插件
3. jenkins新建一個(gè)項(xiàng)目儿捧,Git配置成需要代碼分析的代碼庫(kù)
4. 剩下的按照下圖配置挑宠,(將PMDOclint.sh
放到Jenkins的主目錄,如果出現(xiàn)問(wèn)題懒鉴,涉及到的路徑碎浇,請(qǐng)注意檢查一下)
5. 效果
Warning??
(一). xcodebuild命令不好用的時(shí)候奴璃,使用com + opt + shift + k
和 com + shift + k
有80%的可能解決??
(二). oclint: error: one compiler command contains multiple jobs:
解決方案: