iOS開(kāi)發(fā)-OCLint的安裝和使用(命令行)

關(guān)于OCLint

OCLint是一個(gè)靜態(tài)代碼分析工具,提高質(zhì)量和減少缺陷通過(guò)檢查C 典阵、C++ 和Objective-C 代碼和尋找潛在的問(wèn)題

可能的缺陷 - 空的if / else / try / catch / finally語(yǔ)句
未使用的代碼 - 未使用的局部變量和參數(shù)
復(fù)雜的代碼 - 很高的圈復(fù)雜度,NPath復(fù)雜性和太高的NCSS
代碼異味 - 長(zhǎng)方法和參數(shù)列表
長(zhǎng)方法和參數(shù)列表不好的實(shí)踐——倒邏輯和參數(shù)重新分配
…

靜態(tài)代碼分析是一個(gè)來(lái)檢測(cè)對(duì)于編譯不可見(jiàn)的缺陷的關(guān)鍵技術(shù)晕翠。

OCLint官網(wǎng)地址

安裝步驟

1、如果沒(méi)有安裝homebrew,就去官網(wǎng)按照教程安裝一下

homebrew官網(wǎng)安裝

2、使用homebrew安裝OCLint和xcpretty

使用第三方的軟件會(huì)比使用xcodebuild方便些
最新xctool的build方法已經(jīng)棄用,不能配合OCLint使用,推薦使用xcpretty

// 安裝OCLint
brew tap oclint/formulae
brew install oclint
// 安裝xcpretty
gem install xcpretty

// 以后可能需要更新
brew update
brew upgrade oclint

報(bào)錯(cuò):Operation not permitted - /usr/bin/rougify 的解決方案

3钟鸵、使用

在終端進(jìn)入項(xiàng)目目錄钉稍,然后替換workspace的名字和scheme的名字,將修改好的命令粘貼到終端執(zhí)行棺耍,等待命令執(zhí)行完畢

myworkspace=haha.xcworkspace # 替換workspace的名字
myscheme=haha # 替換scheme的名字
xcodebuild -workspace $myworkspace -scheme $myscheme clean&&
xcodebuild -workspace $myworkspace -scheme $myscheme \
-configuration Debug \
| xcpretty -r json-compilation-database -o compile_commands.json&&
oclint-json-compilation-database -e Pods -- \
-report-type html -o oclint_result.html \
-rc LONG_LINE=200 \
-max-priority-1=100000 \
-max-priority-2=100000 \
-max-priority-3=100000; \
rm compile_commands.json;
if [ -f ./oclint_result.html ]; then echo '-----分析完畢-----'
else echo "-----分析失敗-----"; fi

中間可能會(huì)在Build Succeeded后面等待一段時(shí)間贡未,這是因?yàn)镺CLint在分析文件
等待命令執(zhí)行完成,終端會(huì)打印出-----分析完畢-----字樣蒙袍,
打開(kāi)項(xiàng)目目錄俊卤,會(huì)看到目錄下會(huì)多出一個(gè)oclint_result.html的文件

如果沒(méi)有使用cocoapods,則去掉myworkspace=haha.xcworkspace害幅、-workspace $myworkspace消恍、-workspace $myworkspace,然后再在終端執(zhí)行
另外可以自己建一個(gè)xx.sh的文件以现,將上面代碼粘貼進(jìn)去狠怨,每次在命令行進(jìn)入xx.sh所在目錄執(zhí)行bash xx.sh就可以了

有時(shí)候會(huì)遇到問(wèn)題:

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

解決方法:

 sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

有時(shí)候編譯不通過(guò)報(bào)錯(cuò):
解決方案
參考文章

解決了约啊,Podfile添加hook:


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

同時(shí),pod的主工程也需要設(shè)置COMPILER_INDEX_STORE_ENABLE這個(gè)值為NO

4佣赖、查看oclint_result.html文件

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é)合代碼理解下憎蛤,自己基本都能明白了

5外傅、自定義規(guī)則

上面的命令中
-e Pods 表示移除Pods文件夾里代碼的分析, 如果有繼續(xù)-e Debug.m
-report-type html 表示分析后輸出的文件類(lèi)型為HTML,查看其他支持的文件類(lèi)型
-o oclint_result.html 表示輸出到oclint_result.html這個(gè)文件中()
-rc LONG_LINE=200 表示每行最大字節(jié)長(zhǎng)度為200(默認(rèn)值為100俩檬,感覺(jué)在OC中100完全不夠用拔取)

一些常用規(guī)則的注釋
# --命名
# 變量名字最長(zhǎng)字節(jié)
#-rc=LONG_VARIABLE_NAME=20 \
# 變量名字最短字節(jié)
#-disable-rule ShortVariableName \
# --size
# 圈復(fù)雜度
#-re=CYCLOMATIC_COMPLEXITY=10 \
# 每個(gè)類(lèi)最行數(shù)
#-rc=LONG_CLASS=700 \
# 每行字節(jié)數(shù)量
#-rc=LONG_LINE=200 \
# 每個(gè)方法行數(shù)
#-rc=LONG_METHOD=80 \
# 忽略注釋后括號(hào)后的有效代碼行數(shù)
#-rc=NCSS_METHOD=40 \
# 嵌套深度
#-rc=NESTED_BLOCK_DEPTH=5 \
# 字段數(shù)量
#-rc=TOO_MANY_FIELDS=20 \
# 方法數(shù)量
#-rc=TOO_MANY_METHODS=30 \
# 方法參數(shù)
#-rc=TOO_MANY_PARAMETERS=6

oclint-json-compilation-database命令手冊(cè)
oclint命令手冊(cè)
OCLint自定義規(guī)則介紹
OCLint全部規(guī)則介紹
文檔里面有每個(gè)規(guī)則的demo和對(duì)應(yīng)的命令名字。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末豆胸,一起剝皮案震驚了整個(gè)濱河市奥洼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌晚胡,老刑警劉巖灵奖,帶你破解...
    沈念sama閱讀 216,544評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異估盘,居然都是意外死亡瓷患,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)遣妥,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)擅编,“玉大人,你說(shuō)我怎么就攤上這事箫踩“” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,764評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵境钟,是天一觀(guān)的道長(zhǎng)锦担。 經(jīng)常有香客問(wèn)我,道長(zhǎng)慨削,這世上最難降的妖魔是什么洞渔? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,193評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮缚态,結(jié)果婚禮上磁椒,老公的妹妹穿的比我還像新娘。我一直安慰自己玫芦,他們只是感情好浆熔,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,216評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著桥帆,像睡著了一般蘸拔。 火紅的嫁衣襯著肌膚如雪师郑。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,182評(píng)論 1 299
  • 那天调窍,我揣著相機(jī)與錄音宝冕,去河邊找鬼。 笑死邓萨,一個(gè)胖子當(dāng)著我的面吹牛地梨,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播缔恳,決...
    沈念sama閱讀 40,063評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼宝剖,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了歉甚?” 一聲冷哼從身側(cè)響起万细,我...
    開(kāi)封第一講書(shū)人閱讀 38,917評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎纸泄,沒(méi)想到半個(gè)月后赖钞,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡聘裁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,543評(píng)論 2 332
  • 正文 我和宋清朗相戀三年雪营,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片衡便。...
    茶點(diǎn)故事閱讀 39,722評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡献起,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出镣陕,到底是詐尸還是另有隱情谴餐,我是刑警寧澤,帶...
    沈念sama閱讀 35,425評(píng)論 5 343
  • 正文 年R本政府宣布呆抑,位于F島的核電站岂嗓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏理肺。R本人自食惡果不足惜摄闸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,019評(píng)論 3 326
  • 文/蒙蒙 一善镰、第九天 我趴在偏房一處隱蔽的房頂上張望妹萨。 院中可真熱鬧,春花似錦炫欺、人聲如沸乎完。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,671評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)树姨。三九已至摩桶,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間帽揪,已是汗流浹背硝清。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,825評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留转晰,地道東北人芦拿。 一個(gè)月前我還...
    沈念sama閱讀 47,729評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像查邢,于是被迫代替她去往敵國(guó)和親蔗崎。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,614評(píng)論 2 353

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