分享两个工具
关于第三方工具的安装,推荐使用Homebrew,唐巧大神也在博客中推荐过。使用brew search xxxx
来查看是否有对应的工具可以使用Homebrew安装。
##CLOC
CLOC是专门用于代码统计的命令行工具,支持几乎所有语言。
使用Homebrew安装:brew install cloc
,使用也非常简单,命令行进入项目目录,执行cloc ./
即可,这样会统计目录下的所有代码。如果不希望统计某些文件夹,可以设置需要忽略的目录,比如忽略Pods文件夹:cloc ./ --exclude-dir=Pods
。
oclit
oclit作为一个静态的代码分析工具,功能非常强大,而且出自国人之手。
为了一劳永逸,首先安装xctool:brew install xctool
,这是Facebook提供的代替苹果xcodebuild
的工具。
安装oclit:brew install Caskroom/cask/oclint
,为了能够在Xcode上直接显示代码分析的结果,还需要完成以下几步
- 添加Aggregate,
- 为刚才创建的Aggregate添加运行脚本,注意:不要在选中Aggregate的状态下点击Editor菜单,不然Add Run Script Build Phase按钮是灰色的
- 添加脚本代码,脚本代码和官方文档有些不同。
注意:上面代码中的MyProject
需要替换成你的工程名,如果你的工程不是用workspace来管理的,那么其中这两行代码
需要替换为
4.编译刚才创建的Aggregate,需要耐性等待结果,完成之后就能看到oclint给出的结果
###错误排查 若build成功了但是没有给出任何警告,很可能是出现了错误
- 检查是否有警告,之前就遇到team没选择对,导致没有分析结果,或者像我一样选择None。
- 检查是否存在
~
目录下.bash_profile
文件(隐藏文件,执行下方的命令查看隐藏文件),在Finder中按Command+Shift+G键前往文件夹,填写~
,进入目录查看,若无此文件。这需要创建一个,命令行进入此目录:cd ~
后touch .bash_profile
。
显示隐藏文件defaults write com.apple.finder AppleShowAllFiles TRUE
后 killall Finder
恢复隐藏文件的隐藏defaults write com.apple.finder AppleShowAllFiles FALSE
后 killall Finder
###分析结果
oclit的代码分析结果包括三种警告等级从高到底依次是:P1,P2,P3。
####P3
- 变量名长度:
Long variable name P3 Variable name with 28 characters is longer than the threshold of 20
变量名超过20个字符,当然20的阀值是可以设置,之后会介绍。 - 反向逻辑:
Inverted logic
,比如
- 方法行数:
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的嵌套 - 可折叠的if代码
Collapsible if statements P3
,比如:
- Switch是否需要default
Switch statements don't need default when fully covered P3
,这个看情况是否需要去除
当然还有很多其他的情况
####P2
- 空的if方法:
Empty if statement P2
- 圈复杂度(CCN):
High cyclomatic complexity P2 Cyclomatic Complexity Number 31 exceeds limit of 10
,意味着代码的复杂程度 - NPath 复杂度:
/High npath complexity P2 NPath Complexity Number 384 exceeds limit of 200
,具体不是很清楚
目前遇到的P2就是这些,P1的还没有遇到过。
回到刚才的脚本代码中
这是oclit给出的参数设置LONG_LINE
表示每行代码的最长字符数,NCSS_METHOD
表示有效代码行的最大行数。0.8dev版本的其他参数包括
可惜的是,并没有Unused method parameter
相关参数。
总之,oclint的分析对于提高代码的可读性和可维护性还是具有一定的参考意义的。