OCLint使用

image.png

OCLint的分析結(jié)果:
優(yōu)先級(jí)的級(jí)別是從Priority 1, Priority 2, Priority 3 依次降低的
Total Files 總文件數(shù)
Files with Violations 違規(guī)文件數(shù)
Compiler Warnings 表示項(xiàng)目中的警告??
Compiler Errors 表示編譯錯(cuò)誤
Location 表示警告的位置
報(bào)告中的描述其實(shí)非常清晰符相,一般找到代碼位置甲棍,結(jié)合代碼理解

一删窒、OCLint 安裝
使用Homebrew 安裝:在安裝前德迹,確保安裝了 homebrew知染。

$ brew tap oclint/formulae
$ brew install oclint

安裝完以后驗(yàn)證下 OCLint 是否安裝成功烈掠。輸入
$ oclint --version

二彤钟、xcpretty 的安裝
在安裝前来候,確保安裝了 Ruby gem.
$gem install xcpretty

三、 使用 oclint
1.如果項(xiàng)目使用了 Cocopod逸雹,則需要指定 -workspace xxx.workspace
2.每次編譯之前需要 clean
3.cd 進(jìn)入項(xiàng)目
4.查看項(xiàng)目基本信息
$xcodebuild -list

sikong@localhost OCLintDemo % xcodebuild -list 
Command line invocation:
    /Applications/Xcode.app/Contents/Developer/usr/bin/xcodebuild -list

Information about project "OCLintDemo":
    Targets:
        OCLintDemo
        OCLintDemoTests

    Build Configurations:
        Debug
        Release

    If no build configuration is specified and -scheme is not passed then "Release" is used.

    Schemes:
        OCLintDemo

sikong@localhost OCLintDemo % 

5.編譯.編譯成功后营搅,會(huì)在項(xiàng)目的文件夾下出現(xiàn) compile_commands.json 文件

$xcodebuild -scheme OCLintDemo -workspace OCLintDemo.xcworkspace clean && xcodebuild -scheme OCLintDemo -workspace OCLintDemo.xcworkspace -configuration Debug | xcpretty -r json-compilation-database -o compile_commands.json

6.生成 html 報(bào)表
$ oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html

看到有報(bào)錯(cuò),但是報(bào)錯(cuò)信息太多了梆砸,不好定位,利用下面的腳本則可以將報(bào)錯(cuò)信息寫(xiě)入 log 文件,方便查看
oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html 2>&1 | tee 1.log

報(bào)錯(cuò)信息:oclint: error: one compiler command contains multiple jobs:的解決方案如下:

ProjectTargetsBuilding Settings下的 COMPILER_INDEX_STORE_ENABLE 設(shè)置為NO
podfiletarget 'xx' do前面添加下面的腳本:

post_install do |installer|
  installer.pods_project.targets.each do |target|
      target.build_configurations.each do |config|
          config.build_settings['COMPILER_INDEX_STORE_ENABLE'] = "NO"
      end
  end
end

報(bào)錯(cuò)信息:oclint: error: violations exceed threshold: P1=0[0] P2=323[10] P3=4523[20]的解決方案如下:
看到報(bào)錯(cuò)信息是默認(rèn)的警告數(shù)量超過(guò)限制朋譬,則 lint 失敗棍苹。事實(shí)上 lint 后可以跟參數(shù),所以我們修改腳本如下:
oclint-json-compilation-database -e Pods -- -report-type html -o oclintReport.html -rc LONG_LINE=300 -max-priority-1=9999 -max-priority-2=9999 -max-priority-3=9999

四日矫、oclint規(guī)則


image

規(guī)則默認(rèn)值:

名稱(chēng) 描述 默認(rèn)閾值
CYCLOMATIC_COMPLEXITY 方法的循環(huán)復(fù)雜性(圈負(fù)責(zé)度) 10
LONG_CLASS C類(lèi)或Objective-C接口赂弓,類(lèi)別,協(xié)議和實(shí)現(xiàn)的行數(shù) 1000
LONG_LINE 一行代碼的字符數(shù) 100
LONG_METHOD 方法或函數(shù)的行數(shù) 50
LONG_VARIABLE_NAME 變量名稱(chēng)的字符數(shù) 20
MAXIMUM_IF_LENGTH if語(yǔ)句的行數(shù) 15
MINIMUM_CASES_IN_SWITCH switch語(yǔ)句中的case數(shù) 3
NPATH_COMPLEXITY 方法的NPath復(fù)雜性 200
NCSS_METHOD 一個(gè)沒(méi)有注釋的方法語(yǔ)句數(shù) 30
NESTED_BLOCK_DEPTH 塊或復(fù)合語(yǔ)句的深度 5
SHORT_VARIABLE_NAME 變量名稱(chēng)的字符數(shù) 3
TOO_MANY_FIELDS 類(lèi)的字段數(shù) 20
TOO_MANY_METHODS 類(lèi)的方法數(shù) 30
TOO_MANY_PARAMETERS 方法的參數(shù)數(shù) 10

根據(jù)實(shí)際需要修改部分檢測(cè)規(guī)則:
oclint-json-compilation-database -e Pods -e 3rd -- -rc=LONG_LINE=300 -rc=LONG_METHOD=200 -rc=TOO_MANY_METHODS=100 -rc=CYCLOMATIC_COMPLEXITY=50 -rc=NCSS_METHOD=120 -disable-rule ShortVariableName -disable-rule ObjCAssignIvarOutsideAccessors -disable-rule AssignIvarOutsideAccessors -max-priority-1=100000 -max-priority-2=100000 -max-priority-3=100000 -report-type html -o oclintReport.html

參考:https://juejin.cn/post/6844903853775650830#heading-6
http://docs.oclint.org/en/stable/howto/rcfile.html
http://docs.oclint.org/en/stable/rules/index.html
http://www.reibang.com/p/35cf99c07eaa

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末哪轿,一起剝皮案震驚了整個(gè)濱河市盈魁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窃诉,老刑警劉巖杨耙,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異飘痛,居然都是意外死亡珊膜,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)宣脉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)辅搬,“玉大人,你說(shuō)我怎么就攤上這事】八欤” “怎么了介蛉?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)溶褪。 經(jīng)常有香客問(wèn)我币旧,道長(zhǎng),這世上最難降的妖魔是什么猿妈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任吹菱,我火速辦了婚禮,結(jié)果婚禮上彭则,老公的妹妹穿的比我還像新娘鳍刷。我一直安慰自己,他們只是感情好俯抖,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布输瓜。 她就那樣靜靜地躺著,像睡著了一般芬萍。 火紅的嫁衣襯著肌膚如雪尤揣。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,708評(píng)論 1 305
  • 那天柬祠,我揣著相機(jī)與錄音北戏,去河邊找鬼。 笑死漫蛔,一個(gè)胖子當(dāng)著我的面吹牛嗜愈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播莽龟,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼芝硬,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了轧房?” 一聲冷哼從身側(cè)響起拌阴,我...
    開(kāi)封第一講書(shū)人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎奶镶,沒(méi)想到半個(gè)月后迟赃,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡厂镇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年纤壁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捺信。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酌媒,死狀恐怖欠痴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情秒咨,我是刑警寧澤喇辽,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站雨席,受9級(jí)特大地震影響菩咨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜陡厘,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一抽米、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧糙置,春花似錦云茸、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至网持,卻和暖如春宜岛,著一層夾襖步出監(jiān)牢的瞬間长踊,已是汗流浹背功舀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留身弊,地道東北人辟汰。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像阱佛,于是被迫代替她去往敵國(guó)和親帖汞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言 OCLint是基于 Clang Tooling 開(kāi)發(fā)的靜態(tài)分析工具凑术,主要用來(lái)發(fā)現(xiàn)編譯器檢查不到的那些潛在的關(guān)...
    張聰_2048閱讀 5,700評(píng)論 3 20
  • 前言 oclint 是對(duì)C翩蘸、C++、Objective-C進(jìn)行靜態(tài)代碼檢查的工具 ,使用 oclint 對(duì)代碼進(jìn)行...
    麥兜兜二寶閱讀 2,127評(píng)論 0 5
  • 前言 OCLint 是一個(gè)靜態(tài)分析代碼的工具淮逊,支持自定義規(guī)則催首,可以很好地幫助我們規(guī)范代碼,這篇文章主要介紹通過(guò)OC...
    alanwangmodify閱讀 4,304評(píng)論 3 53
  • OCLint OCLint 是基于 Clang 的靜態(tài)分析工具泄鹏,支持對(duì) C郎任、C++ 和 Objective-C 代...
    Demonboy閱讀 3,589評(píng)論 0 1
  • 一.簡(jiǎn)介 OCLint是基于 Clang Tooling 開(kāi)發(fā)的靜態(tài)分析工具,主要用來(lái)發(fā)現(xiàn)編譯器檢查不到的那些潛在...
    Money_YC閱讀 10,586評(píng)論 1 10