iOS開發(fā)-OCLint如何自定義靜態(tài)掃描代碼規(guī)則

一、開發(fā)準備

1、MacOS一般默認都有Xcode,Git和Ruby

2、下載OCLint代碼

OCLint-Github地址

選擇下載

下載到本地的目錄如下:


目錄

3、cd進入oclint-scripts文件加,執(zhí)行./make

如果沒有報錯的話,大約30分鐘后編譯完成,大概過程是下載LLVM、clang的源代碼,編譯LLVM、clang與OCLint的默認規(guī)則。


編譯結(jié)果

不過一般都會遇到一些問題:

(1)、如果沒有安裝cmake一般都會報錯

cmake官網(wǎng),下載Mac操作系統(tǒng)對應的安裝包。安裝完成之后,運行cmake圖形界面程序,在左上角的選項欄中選擇Tools,點擊How to install for Command Line Use。
之后彈出來一個消息框:

One may add CMake to the PATH:
PATH="/Applications/CMake.app/Contents/bin":"$PATH"
Or, to install symlinks to '/usr/local/bin', run:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install
Or, to install symlinks to another directory, run:
sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/path/to/bin

三種安裝cmake command line tool 的方法,即終端能夠識別cmake命令的方法。復制sudo"/Applications/CMake.app/Contents/bin/cmake-gui" --install 命令到終端,然后運行,當然你也可以打出來。 之后再在終端打cmake命令,就不會再提示什么command not found之類的錯誤了,到此安裝成功了。

在Mac安裝cmake command line tool
cmake :command not found解決

(2)、報錯fatal error: 'openssl/ssl.h' file not found

brew install openssl
參考文章:
fatal error: openssl/ssl.h 安裝失敗 解決方案
參考2

(3)、報錯ninja not found

brew install ninja
CMake + Ninja OSX issue

(4)、make錯誤-fatal: 遠端意外掛斷了

正克隆到 'oclint-json-compilation-database'...
remote: Enumerating objects: 88, done.
error: RPC failed; curl 56 LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 54
fatal: 遠端意外掛斷了
fatal: early EOF
fatal: unpack-objects 失敗

直接重新執(zhí)行./make就行

(5)、報錯 Operation timed out

A    llvm/unittests/IR/CFGBuilder.h
A    llvm/unittests/IR/DominatorTreeTest.cpp
svn: E000060: Operation timed out

或者:
svn: E175012: Connection timed out

執(zhí)行命令open ~/.subversion/config
設置 # busy-timeout = 1000000 默認值是10000毫秒也就是10秒,改成10,000,000,或者更大的數(shù)字。

### Set the SQLite busy timeout in milliseconds: the maximum time
### the client waits to get access to the SQLite database before
### returning an error.  The default is 10000, i.e. 10 seconds.
### Longer values may be useful when exclusive locking is enabled.
# busy-timeout = 1000000 

執(zhí)行命令open ~/.subversion/servers
設置# http-timeout = 1800或者更大的數(shù)字比如一天86400秒

./make執(zhí)行成功的畫面:

[14/14] Linking CXX executable bin/oclint-0.14
執(zhí)行make成功

如果改了這兩個參數(shù)還是失敗,建議多試幾次,有可能是網(wǎng)絡不好。

4、創(chuàng)建自定義的規(guī)則

在oclint-scripts目錄下OCLint提供了一個叫scaffoldRule的腳本程序。可以傳入要生成的規(guī)則名,級別,類型,腳本就會在目錄oclint-rules/rules/custom/自動生成一個模板代碼,并且加入編譯路徑中。
舉個例子:


scaffoldRule腳本
# 生成一個名為myDemoRule類型是ASTVisitor的規(guī)則模板

oclint-scripts/scaffoldRule myDemoRule -t ASTVisitor

執(zhí)行命令后:


生成的新規(guī)則

5、編譯自定義的規(guī)則成動態(tài)庫

編譯方法1:重新執(zhí)行oclint-scripts/make

這個太慢了,不推薦,很不方便。

編譯方法2:將規(guī)則相關(guān)的內(nèi)容整合成一個Xcode工程

將規(guī)則相關(guān)的內(nèi)容整合成一個Xcode工程,并且我們的每個規(guī)則都是一個scheme,編譯時可以只選擇編譯那個選擇的規(guī)則生成對應的dylib。
OCLint工程使用CMakeLists的方式維護各個文件的依賴關(guān)系,可以使用CMake自帶的功能將這些CMakeLists生成一個xcodeproj工程文件。

在OCLint源碼目錄下建立一個文件夾oclint-xcodeproject

xcode-debug.sh

#! /bin/sh -e

cmake -G Xcode -D CMAKE_CXX_COMPILER=../build/llvm-install/bin/clang++  -D CMAKE_C_COMPILER=../build/llvm-install/bin/clang -D OCLINT_BUILD_DIR=../build/oclint-core -D OCLINT_SOURCE_DIR=../oclint-core -D OCLINT_METRICS_SOURCE_DIR=../oclint-metrics -D OCLINT_METRICS_BUILD_DIR=../build/oclint-metrics -D LLVM_ROOT=../build/llvm-install/ ../oclint-rules

執(zhí)行命令

bash xcode-debug.sh
構(gòu)建的Xcode工程
自定義的規(guī)則

編譯出來的動態(tài)庫


動態(tài)庫

自定義

然后將編譯好的動態(tài)庫放到oclint的規(guī)則文件夾,這樣就可以使用自己新加的自定義規(guī)則了
路徑:/usr/local/Cellar/oclint/0.13/lib/oclint/rules

路徑

參考文章
OCLint 如何自定義規(guī)則

iOS 持續(xù)集成系列 - 自動化 Code Review

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容