OCLint
是一個強大的靜態程式碼分析工具,可以用來提高程式碼質量,查詢潛在的bug,主要針對 C、C++和Objective-C的靜態分析。功能非常強大,而且是出自國人之手。專案地址:http://oclint.org/。
主要能檢查到的程式碼缺陷:
1 2 3 4 5 6 7 |
可能出現的bug,空的if/else/try/catch/finally的引數 沒有使用的變數或者引數 複雜的程式碼邏輯,多個if/else的判斷 不需要的程式碼 過長的方法或者引數 錯誤的分配方式 .... |
安裝OCLint
OCLint是一個開源的專案,你可以通過原始碼安裝,需要設定對應的環境變數,也可以使用作者釋出的release進行安裝,不過我更習慣使用Homebrew
安裝。
首先需要設定brew的第三方倉庫oclint/formulae
。
brew tap oclint/formulae
然後安裝OCLint
。
brew install oclint
針對對OCLint升級的方法:
brew update
brew upgrade oclint
使用brew cleanup
可以清理舊版本的安裝資料。
xcodebuild
xcodebuild
是xcode的編譯命令。
可以檢視xcodebuild的版本資訊:
xcodebuild -version
1 2 |
Xcode 7.3.1 Build version 7D1014 |
也可以檢視當前系統的sdk以及其版本:
xcodebuild -showsdks
1 2 3 4 5 6 7 |
OS X SDKs: OS X 10.11 -sdk macosx10.11 iOS SDKs: iOS 9.3 -sdk iphoneos9.3 ... |
需要使用xcodebuild [flags]命令進行編譯並把相關的日誌資訊輸入到xcodebuild.log中,需要在.xcodeproj
檔案所在的目錄裡面執行。
xcodebuild | tee xocdebuild.log
flags引數預設使用Release,這樣就得到了一份編譯程式碼資訊相關的日誌。
下面需要對日誌使用OCLint
進行分析
分析日誌
我們需要使用OCLint對日誌資訊進行分析執行命令
oclint-xcodebuild xcodebuild.log
得到的資訊:
1 2 |
This binary is no longer under maintenance by OCLint team. Please consider using xcpretty (https://github.com/supermarin/xcpretty) instead! |
oclint-xcodebuild不在使用了,需要安裝xcpretty,使用xcpretty命令分析日誌資訊。
xcpretty
是用來格式化xcodebuild
輸出的工具,使用ruby開發。
安裝:
gem install xcpretty
使用引數--report json-compilation-database
或者-r json-compilation-database
可以生成指定生成資料的格式,當前指定為json格式。
執行命令:
xcodebuild |xcpretty -r json-compilation-database
在build/reports
中得到檔案compilation_db.json
分析json資料
對於json資料的分析需要使用oclint-json-compilation-database
。
執行命令
oclint-json-compilation-database — -o=report.html
這樣可以到一個html的報告。
但是執行的執行的時候卻得到了一個錯誤資訊:
1 |
Error: compile_commands.json not found at current location. |
找不到complie_commands.json檔案,使用xcpretty
生成的檔名是:compilation_db.json,在目錄build/reports
目錄中。
因此需要把xcpretty
生成的檔案compilation_db.json
複製到當前目錄下。重新命名為compile_commands.json
。
再次執行命令得到生成結果:report.html。
oclint分析json引數
開發者會在專案中會大量使用第三方庫,在做OCLint
需要忽略對於第三方庫的檢查,在執行oclint-json-comilation-database
的時候可以使用-e忽略不需要分析的目錄比如:
oclint-json-compilation-database -e Pods — -o=report.html
還可以改變一些檢查的方式,比如OCLint
有一個方法數的檢查Long method P3 Method with 179 lines exceeds limit of 100
,方法數超過100行就會出現這個警告,可以通過引數改變預設100行的限制。
oclint-json-compilation-database -e Pods — -rc=LONG_LINE=200 -o=report.html
指令碼化
根據上面的步驟寫了一個shell指令碼用來執行OCLint的檢查
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#! /bin/sh if which oclint 2>/dev/null; then echo 'oclint exist' else brew tap oclint/formulae brew install oclint fi if which xcpretty 2>/dev/null; then echo 'xcpretty exist' else gem install xcpretty fi cd test xcodebuild clean xcodebuild | xcpretty -r json-compilation-database cp build/reports/compilation_db.json compile_commands.json oclint-json-compilation-database -e Pods -- -rc=LONG_LINE=200 -rc=NCSS_METHOD=100 -o=report.html |