天天看點

oclint-xcodebuild 的使用

一、OCLint官網簡介

OCLint是一個代碼靜态分析描工具,可以用來提高品質和減少缺陷,他目前支援C,C++,Objective-C語言,它目前可以發現這些問題:

可能的bug - 空的 if / else / try / catch / finally 語句

未使用的代碼 - 未使用的局部變量和參數

複雜的代碼 - 高圈複雜度, NPath複雜, 高NCSS

備援代碼 - 多餘的if語句和無用的括号

壞味道的代碼 - 過長的方法和過長的參數清單

不好的使用 - 倒邏輯和入參重新指派

官網位址:http://oclint.org

檢查規則(71項):http://docs.oclint.org/en/stable/rules/index.html

二、OCLint相關指令參數介紹

、OCLint
-R 添加規則加載目錄
-allow-duplicated-violations 允許報告中重複報警
-disable-rule=<rule name> 禁止某項規則
-enable-clang-static-analyzer 開啟clang分析器結果寫入oclint報告
-enable-global-analysis 消耗大量記憶體分析所有關聯全局context檔案
-extra-arg=<string> 添加額外參數到編譯指令後
-extra-arg-before=<string> 添加額外參數到編譯指令前
-list-enabled-rules 羅列所有目前支援的規則
-max-priority-X=<threshold> PX級别問題最大數量,X in (  )
-o 報告輸出位置
-p 建構路徑
-rc=<parameter>=<value> 重寫規則行為
-report-type=<name> 報告類型html
-rule=<rule name> 顯式顯示報告規則

、oclint-xcodebuild
xcodebuild | tee xcodebuild.log 建構工程,儲存日志
oclint-xcodebuild xcodebuild.log 生成json編譯指令檔案
oclint-json-compilation-database -- -o=report.html 真正執行lint輸出報告

、oclint-json-compilation-database
-i 包含正規表達式比對的檔案
-e 排除比對檔案
可+oclint所有參數
           

常見oclint指令參數可檢視官方文檔:

http://docs.oclint.org/en/stable/manual/oclint.html#global-analysis-options

三、通過xcodebuild使用oclint

1、首先下載下傳oclint,下載下傳位址如下:

https://github.com/oclint/oclint/releases

oclint-xcodebuild 的使用

選擇上圖中的darwin包即可,下載下傳到本地并解壓,具體安裝可參照官方的安裝指南:http://docs.oclint.org/en/stable/intro/installation.html,有兩種安裝方式,建議選用第二種方式;第一種方式可能會因為shell環境的不同而出錯,即在Jenkins的Execute shell 插件中所使用的shell環境可能是sh,而不是bash,是以可能會報錯:

提示:bash 和 sh 差別簡介:

<1> bash是 Bourne Again SHell 是linux标準的預設shell,它基于Bourne shell,吸收了C shell和Korn shell的一些特性。bash完全相容Bourne shell,也就是說用Bourne shell的腳本不加修改可以在bash中執行。

<2> sh是Bourne shell 這個是UNIX标準的預設shell,對它評價是簡潔、緊湊、 高效、有AT&T編寫,屬于系統管理shell。

第一種方式:

(1)在你的個人根目錄下找到“.bashrc 或 .bash_profile”檔案(隐藏檔案),任選其一,例如,選擇了 .bash_profile,假如沒有.bash_profile檔案,可自行建立,建立過程如下:

1> 啟動終端Terminal
2> 進入目前使用者的home目錄
    輸入cd ~
3> 建立.bash_profile
    輸入touch .bash_profile
4> 編輯.bash_profile檔案
    輸入open .bash_profile
    在彈出的頁面進行編輯
5> 儲存檔案,關閉.bash_profile
6> 更新剛配置的環境變量
    輸入source .bash_profile
           

(2)把路徑加到環境變量中,在 .bash_profile 檔案中,添加你解壓後的oclint-0.10.3的檔案夾路徑,官方給出的參考格式如下:

OCLINT_HOME=/path/to/oclint-release
export PATH=$OCLINT_HOME/bin:$PATH
           

其中,“/path/to/oclint-release”對應的就是你的oclint-0.10.3的檔案夾路徑,此時oclint已經安裝完成了;

第二種方式:把執行檔案拷貝到系統目錄

cp bin/oclint* /usr/local/bin/
cp -rp lib/* /usr/local/lib/
           

詳見官方說明:

OCLint Installation

2、通過xcodebuild執行oclint指令

(1)在bash中,通過cd指令進到需要oclint的工程路徑下;

提醒:建議每次在執行xcodebuild指令之前,都先執行一次clean操作;

xcodebuild clean
           

(2)在bash中執行:

備注:若工程中存在多個不同的target,按照如下格式輸入:

将需要執行的target名字填入到指令中。

此指令調用xcodebuild進行了編譯并把相關日志資訊輸入到xcodebuild.log,該log檔案是後續步驟的必要條件,生成在目前的工程目錄中。官方解釋如下:

We need to save the xcodebuild output to a log file, by convention, name it xcodebuild.log. We can use xcodebuild | tee xcodebuild.log to pipe every line of the output to xcodebuild.log file.

(3)在bash中執行

此步驟是利用之前的.log檔案通過oclint-xcodebuild的可執行檔案生成了名為compile_commands.json的json格式檔案,該檔案應該包含了多組内容,其中的key分别為directory、command、file,該檔案不應該為空。此檔案是下一步輸入的必要條件。

(4)在bash中執行

此步驟是真正執行了oclint,執行完應該在終端輸出結果。

若希望輸出報告到檔案中,運作如下指令:

oclint-json-compilation-database – -o=report.html

四、OCLint 和 Jenkins 的結合使用

1、怎樣在Jenkins中建立一個工程,并進行配置,這裡就不贅述了,可參照

“Jenkins + Xcode + Fir.im 自動建構項目,并打包ipa上傳(MAC)“即可;

2、在Jenkins中安裝 PMD Plug-in 插件;

3、接下來分兩種情況讨論

(1)如果項目中沒有使用CocoaPods托管第三方庫

<1> 在“增加建構步驟”中選擇“Execute shell”,然後在對應的Command選項中,添加如下代碼:

cd MiGuRead
xcodebuild clean
xcodebuild | tee xcodebuild.log
oclint-xcodebuild xcodebuild.log
oclint-json-compilation-database -- -report-type pmd -max-priority-= -o oclint.xml
           

備注:MiGuRead 是對應的項目檔案夾;

<2> 在“增加建構後操作步驟”中選擇“Publish PMD analysis results”,然後在對應的PMD results 中,添加如下内容:

其中 xml 檔案的名稱可自己定義。

(2)如果項目中使用了CocoaPods托管第三方庫,那麼需要對(1)中的步驟<1> 略作調整,步驟<2> 同上,具體如下:

cd podTest
xcodebuild clean
xcodebuild -workspace podTest.xcworkspace -scheme podTest | tee xcodebuild.log
oclint-xcodebuild xcodebuild.log
oclint-json-compilation-database -- -report-type pmd -max-priority-= -o oclint.xml
           

備注:podTest是對應的項目檔案夾;

4、建構後,我們可以在目前項目的首頁中看到類似如下的趨勢圖:

oclint-xcodebuild 的使用

同時,項目首頁中會新增一個選項“PMD Warnings”,提示:這個選項的出現,可能會有一定的延遲,具體延遲時間視情況而定:

oclint-xcodebuild 的使用

點選“PMD Warnings”後,可檢視 PMD Result:

oclint-xcodebuild 的使用

上圖中指出了詳細的規則違反情況,例如:

Files - 違反規則的檔案

Categories - 違反規則的類别

Types - 違反規則的類型

Warnings - 違反規則的警告

Details - 違反規則的詳情

一般通過進去看代碼來解讀這些違反的規則;

補充:關于規則的官方文檔如下:

Rule Index

OCLint 0.10.3 includes 71 rules.

http://docs.oclint.org/en/stable/rules/index.html

參考文章: mac下通過xcodebuild使用oclint