最近要在持續化交付上添加一環,靜態代碼分析。雖然xcode
的Analyze
也有這個功能,但是那個工具用起來比較麻煩,需要手動去操作。接下來就看看OCLint
的使用吧。
本次環境配置是在xcode8
環境下,xctool
已不再支持xcode8
.
我是用homebrew
安裝的。首先添加下載源 ,然后正式安裝。
brew tap oclint/formulae
brew install oclint
安裝oclint
完成后需要安裝xcpretty
,該工具可以將編譯的代碼產生的信息格式化輸出。
gem install xcpretty
每次編譯前記得先 clean
一下,以下是我的命令。
xcodebuild clean -workspace Hospital_Doctor/Hospital_Doctor.xcworkspace -scheme Hospital_Doctor -configuration 'Debug'
xcodebuild -workspace Hospital_Doctor/Hospital_Doctor.xcworkspace -scheme Hospital_Doctor -configuration 'Debug'| xcpretty --report json-compilation-database
然后會在build/reports
目錄下生成 compilation_db.json
文件,但是oclint
識別的是 compile_commands.json
文件。
cp Hospital_Doctor/build/reports/compilation_db.json compile_commands.json
然后用oclint 解析上面的文件
oclint-json-compilation-database -v -e Pods -e Carthage -e Hospital_DoctorTests -e Hospital_DoctorUITests
-e 參數是忽略的文件或文件夾
在這里我還在項目根目錄(當前目錄)配了一個.oclint
文件,該文件中的配置在執行oclint 命令時自動加載,也可以在個人用戶目錄下新建這個.oclint
文件,即~/.oclint
,下面是我的配置文件。
rule-configurations:
- key: CYCLOMATIC_COMPLEXITY
value: 15
- key: LONG_LINE
value: 300
- key: TOO_MANY_PARAMETERS
value: 10
output: oclint.html
report-type: html
max-priority-1: 0
max-priority-2: 1000
max-priority-3: 3000
enable-clang-static-analyzer: false
rule-configurations
中是一些代碼的規范,這里是修改的默認的,也可以不填用默認的。oclint 導出的html 文件可以在瀏覽器中查看。
之后我想把他集成到fastlane
中,fastlane
中提供了oclint action
,我用xcodebuild
先生成了json 文件,然后執行oclint
的動作,發現有問題,打印出來后fastlane 中具體執行的命令是如下
oclint -report-type=pmd -o=oclint_report.pmd -rc=LONG_LINE=200 -rc=LONG_METHOD=200 -max-priority-1=10 -max-priority-2=1000 -max-priority-3=2000 -p . "***"
同樣可以生成html文件,可以直接在瀏覽器打開查看。