分享兩個工具json
關於第三方工具的安裝,推薦使用Homebrew,唐巧大神也在博客中推薦過。使用brew search xxxx
來查看是否有對應的工具可使用Homebrew安裝。xcode
CLOC是專門用於代碼統計的命令行工具,支持幾乎全部語言。bash
使用Homebrew安裝:brew install cloc
,使用也很是簡單,命令行進入項目目錄,執行cloc ./
便可,這樣會統計目錄下的全部代碼。若是不但願統計某些文件夾,能夠設置須要忽略的目錄,好比忽略Pods文件夾:cloc ./ --exclude-dir=Pods
。app
統計結果:工具
oclit做爲一個靜態的代碼分析工具,功能很是強大,並且出自國人之手。ui
爲了一勞永逸,首先安裝xctool:brew install xctool
,這是Facebook提供的代替蘋果xcodebuild
的工具。spa
安裝oclit:brew install Caskroom/cask/oclint
,爲了可以在Xcode上直接顯示代碼分析的結果,還須要完成如下幾步.net
#import path export PATH=${PATH}:/usr/local/bin #import what we have in bash_profile source ~/.bash_profile #check for oclint hash oclint &> /dev/null if [ $? -eq 1 ]; then echo >&2 "oclint not found, analyzing stopped" exit 1 fi hash xctool &> /dev/null if [ $? -eq 1 ]; then echo >&2 "xctool not found, analyzing stopped" exit 1 fi cd ${SRCROOT} xctool -workspace MyProject.xcworkspace -scheme MyProject clean xctool -workspace MyProject.xcworkspace -scheme MyProject -reporter json-compilation-database:compile_commands.json build oclint-json-compilation-database \ -e Pods \ -- -rc=LONG_LINE=100 \ -rc=NCSS_METHOD=60 \ -rc=MINIMUM_CASES_IN_SWITCH=1 \ | sed 's/\(.*\.\m\{1,2\}:[0-9]*:[0-9]*:\)/\1 warning:/'
注意:上面代碼中的MyProject
須要替換成你的工程名,若是你的工程不是用workspace來管理的,那麼其中這兩行代碼命令行
xctool -workspace MyProject.xcworkspace -scheme MyProject clean xctool -workspace MyProject.xcworkspace -scheme MyProject -reporter json-compilation-database:compile_commands.json build
須要替換爲code
xctool -project MyProject.xcodeproj -scheme MyProject clean xctool -project MyProject.xcodeproj -scheme MyProject -reporter json-compilation-database:compile_commands.json build
4.編譯剛纔建立的Aggregate,須要耐性等待結果,完成以後就能看到oclint給出的結果
若build成功了可是沒有給出任何警告,極可能是出現了錯誤
~
目錄下.bash_profile
文件,由於此文件是隱藏文件,首先要讓Finder能顯示隱藏文件,命令行執行defaults write com.apple.finder AppleShowAllFiles TRUE
後 killall Finder
,在Finder中Command+Shift+G前往文件夾,填寫~
查看,若無此文件,命令行進入次目錄建立一個便可:cd ~
後touch .bash_profile
。恢復隱藏文件的隱藏defaults write com.apple.finder AppleShowAllFiles FALSE
後 killall Finder
oclit的代碼分析結果包括三種警告等級從高到底依次是:P1,P2,P3。
Long variable name P3 Variable name with 28 characters is longer than the threshold of 20
變量名超過20個字符,固然20的閥值是能夠設置,以後會介紹。Inverted logic
,好比if (![response isKindOfClass:[NSError class]]) { // } else{ // }
Long method P3 Method with 179 lines exceeds limit of 100
,方法下的代碼超過100行,不包括註釋。Unused method parameter P3 The parameter 'section' is unused.
,不過這個警告在IOS開發中比較廣泛,能夠忽略Deep nested block P3 Block depth of 8 exceeds limit of 5
,好比各類block的嵌套或者if/else的嵌套固然還有不少其餘的狀況
High cyclomatic complexity P2 Cyclomatic Complexity Number 31 exceeds limit of 10
,意味着代碼的複雜程度/High npath complexity P2 NPath Complexity Number 384 exceeds limit of 200
,具體不是很清楚目前遇到的P2就是這些,P1的尚未遇到過。
回到剛纔的腳本代碼中
-- -rc=LONG_LINE=300 \ -rc=NCSS_METHOD=60 \
這是oclit給出的參數設置LONG_LINE
表示每行代碼的最長字符數,NCSS_METHOD
表示有效代碼行的最大行數。0.8dev版本的其餘參數包括
CYCLOMATIC_COMPLEXITY Cyclomatic complexity of a method, default value is 10 LONG_CLASS Number of lines for a C++ class or Objective-C interface, category, protocol, and implementation, default value is 1000 LONG_LINE Number of characters for one line of code, default value is 100 LONG_METHOD Number of lines for a method or function, default value is 50 MINIMUM_CASES_IN_SWITCH Count of case statements in a switch statement, default value is 3 NPATH_COMPLEXITY NPath complexity of a method, default value is 200 NCSS_METHOD Number of non-commenting source statements of a method, default value is 30 NESTED_BLOCK_DEPTH Depth of a block or compound statement, default value is 5
惋惜的是,並無Unused method parameter
相關參數。
總之,oclint的分析仍是具備比較高的參考性,對於提升代碼的可讀性、可維護性仍是有必定幫助的。