OCLint是一個強大的靜態(tài)代碼分析工具,可以用來提高代碼質(zhì)量粱檀,查找潛在的bug洲敢,主要針對c,c++和Objective-c的靜態(tài)分析。功能非常強大茄蚯,而且是出自國人之手压彭。項目地址:http://oclint.org/。
主要能檢查到的代碼缺陷:
可能出現(xiàn)的bug渗常,空的if/else/try/catch/finally的參數(shù)
沒有使用的變量或者參數(shù)
復(fù)雜的代碼邏輯壮不,多個if/else的判斷
不需要的代碼
過長的方法或者參數(shù)
錯誤的分配方式
....
OCLint是一個開源的項目,你可以通過源碼安裝皱碘,需要設(shè)置對應(yīng)的環(huán)境變量询一,也可以使用作者發(fā)布的release進行安裝,不過我更習(xí)慣使用Homebrew安裝。
首先需要設(shè)置brew的第三方倉庫oclint/formulae健蕊。
brew tap oclint/formulae
然后安裝OCLint菱阵。
brew install oclint
針對對OCLint升級的方法:
brew update
brew upgrade oclint
使用brew cleanup可以清理舊版本的安裝數(shù)據(jù)。(不單是oclint的缩功,是所有使用brew安裝的安裝數(shù)據(jù))
xcodebuild
xcodebuild是xcode的編譯命令晴及。
可以查看xcodebuild的版本信息:
xcodebuild -version
也可以查看當前系統(tǒng)的sdk以及其版本:
xcodebuild -showsdks
需要使用xcodebuild [flags]命令進行編譯并把相關(guān)的日志信息輸入到xcodebuild.log中,需要在.xcodeproj文件所在的目錄里面運行嫡锌。
xcodebuild | tee xocdebuild.log
flags參數(shù)默認使用Release虑稼,這樣就得到了一份編譯代碼信息相關(guān)的日志。
下面需要對日志使用OCLint進行分析
分析日志
我們需要使用OCLint對日志信息進行分析運行命令
oclint-xcodebuild xcodebuild.log
得到的信息:
Thisbinaryisnolonger under maintenance by OCLint team.Please considerusingxcpretty (https://github.com/supermarin/xcpretty) instead!
oclint-xcodebuild不在使用了势木,需要安裝xcpretty,使用xcpretty命令分析日志信息蛛倦。
xcpretty是用來格式化xcodebuild輸出的工具,使用ruby開發(fā)啦桌。
安裝:
gem install xcpretty
使用參數(shù)--report json-compilation-database或者-r json-compilation-database可以生成指定生成數(shù)據(jù)的格式溯壶,當前指定為json格式。
運行命令:
xcodebuild |xcpretty -r json-compilation-database
在build/reports中得到文件compilation_db.json
分析json數(shù)據(jù)
對于json數(shù)據(jù)的分析需要使用 oclint-json-compilation-database甫男。
運行命令
oclint-json-compilation-database -- -o=report.html
這樣可以到一個html的報告茸塞。
但是運行的運行的時候卻得到了一個錯誤信息:
Error:compile_commands.json not found at current location.
找不到complie_commands.json文件,使用xcpretty生成的文件名是:compilation_db.json,在目錄build/reports目錄中查剖。
因此需要把xcpretty生成的文件compilation_db.json復(fù)制到當前目錄下。
重命名為?compile_commands.json?噪窘。
再次運行命令得到生成結(jié)果:report.html笋庄。
oclint分析json參數(shù)
開發(fā)者會在項目中會大量使用第三方庫,在做OCLint需要忽略對于第三方庫的檢查倔监,在運行oclint-json-comilation-database的時候可以使用-e忽略不需要分析的目錄比如:
oclint-json-compilation-database -e Pods -- -o=report.html
還可以改變一些檢查的方式直砂,比如OCLint有一個方法數(shù)的檢查Long method P3 Method with 179 lines exceeds limit of 100,方法數(shù)超過100行就會出現(xiàn)這個警告浩习,可以通過參數(shù)改變默認100行的限制静暂。
oclint-json-compilation-database -e Pods -- -rc=LONG_LINE=200 -o=report.html