OCLint 安装与使用

OCLint是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug,主要针对c,c++和Objective-c的静态分析。功能非常强大,而且是出自国人之手。项目地址:http://oclint.org/

主要能检查到的代码缺陷:

可能出现的bug,空的if/else/try/catch/finally的参数
没有使用的变量或者参数
复杂的代码逻辑,多个if/else的判断
不需要的代码
过长的方法或者参数
错误的分配方式
....

安装OCLint

OCLint是一个开源的项目,你可以通过源码安装,需要设置对应的环境变量,也可以使用作者发布的release进行安装,不过我更习惯使用Homebrew安装。
首先需要设置brew的第三方仓库oclint/formulae

brew tap oclint/formulae

然后安装OCLint

brew install oclint

针对对OCLint升级的方法:

brew update
brew upgrade oclint

使用brew cleanup可以清理旧版本的安装数据。

xcodebuild

xcodebuild是xcode的编译命令。
可以查看xcodebuild的版本信息:

xcodebuild -version

Xcode 7.3.1
Build version 7D1014

也可以查看当前系统的sdk以及其版本:

xcodebuild -showsdks

OS X SDKs:
    OS X 10.11                        -sdk macosx10.11

iOS SDKs:
    iOS 9.3                           -sdk iphoneos9.3

    ...

需要使用xcodebuild [flags]命令进行编译并把相关的日志信息输入到xcodebuild.log中,需要在.xcodeproj文件所在的目录里面运行。

xcodebuild | tee xocdebuild.log

flags参数默认使用Release,这样就得到了一份编译代码信息相关的日志。
下面需要对日志使用OCLint进行分析

分析日志

我们需要使用OCLint对日志信息进行分析运行命令

oclint-xcodebuild xcodebuild.log

得到的信息:

This binary is no longer under maintenance by OCLint team.
Please consider using xcpretty (https://github.com/supermarin/xcpretty) instead!

oclint-xcodebuild不在使用了,需要安装xcpretty,使用xcpretty命令分析日志信息。
xcpretty是用来格式化xcodebuild输出的工具,使用ruby开发。
安装:

gem install xcpretty

使用参数--report json-compilation-database或者-r json-compilation-database可以生成指定生成数据的格式,当前指定为json格式。
运行命令:

xcodebuild |xcpretty -r json-compilation-database

build/reports中得到文件compilation_db.json

分析json数据

对于json数据的分析需要使用oclint-json-compilation-database
运行命令

oclint-json-compilation-database -- -o=report.html

这样可以到一个html的报告。
但是运行的运行的时候却得到了一个错误信息:

Error: compile_commands.json not found at current location.

找不到complie_commands.json文件,使用xcpretty生成的文件名是:compilation_db.json,在目录build/reports目录中。
因此需要把xcpretty生成的文件compilation_db.json复制到当前目录下。重命名为compile_commands.json
再次运行命令得到生成结果:report.html。

oclint分析json参数

开发者会在项目中会大量使用第三方库,在做OCLint需要忽略对于第三方库的检查,在运行oclint-json-comilation-database的时候可以使用-e忽略不需要分析的目录比如:

oclint-json-compilation-database -e Pods -- -o=report.html

还可以改变一些检查的方式,比如OCLint有一个方法数的检查Long method P3 Method with 179 lines exceeds limit of 100,方法数超过100行就会出现这个警告,可以通过参数改变默认100行的限制。

oclint-json-compilation-database -e Pods -- -rc=LONG_LINE=200 -o=report.html

脚本化

根据上面的步骤写了一个shell脚本用来执行OCLint的检查

#! /bin/sh
if which oclint 2>/dev/null; then
    echo 'oclint exist'
else
    brew tap oclint/formulae
    brew install oclint
fi
if which xcpretty 2>/dev/null; then
    echo 'xcpretty exist'
else
    gem install xcpretty
fi
cd test
xcodebuild clean
xcodebuild | xcpretty -r json-compilation-database
cp build/reports/compilation_db.json compile_commands.json
oclint-json-compilation-database -e Pods   -- -rc=LONG_LINE=200 -rc=NCSS_METHOD=100  -o=report.html

姜家志
尽力了!才有资格说运气不好。
1 篇内容引用

尽力了!才有资格说运气不好。

2.3k 声望
148 粉丝
0 条评论
推荐阅读
gitlab-runner升级到最新版本
出现这个问题的原因是因为gitlab-runner的版本过低,当前gitlab-runner最新版本为:12.7.1解决办法:升级gitlab-runner为最新版本,先升级包:

姜家志阅读 4.5k

重载的奥义之函数重载
  重载,顾名思义从字面上理解就是重复装载,打一个不恰当的比方,你可以用一个篮子装蔬菜,也可以装水果或者其它,使用的是同一个篮子,但是可以用篮子重复装载的东西不一样。

Sharemaker阅读 265

封面图
喜报|3DCAT入选“灵境杯”深圳市最佳元宇宙案例!
2022年11月10日~11日,2022全球元宇宙大会深圳站胜利召开,在本次大会上重磅发布“灵境杯”全球元宇宙创新大赛成果,公布深圳最具潜力元宇宙入选企业。

3DCAT阅读 248

封面图
MySQL为什么会死锁?
就跟卡bug一样,比如说你去面试,面试官问你:MySQL为什么会死锁;你告诉面试官:你录用我我就告诉你,面试官说:你告诉我我就录用你,然后你两就一直这么你问我我问你,这就是死锁。

一口鸭梨阅读 230

【iOS逆向与安全】系统推送服务(APNS)拦截
经过之前的分享,相信大家已经掌握了用户级的插件开发。勤奋好学的你是否对系统级的插件也有着浓厚的性趣,本篇文章将和大家一起学习如何分析并编写一款系统级的插件。

小陈阅读 167

【iOS】字符串NSString转换为emoji表情的方式
emoji的表情存成uint32的形式,如0x1f60d、0x1f603等,可以通过系统方法转换为emoji的表情,emoji表情可以直接复制到其他地方打开。正常存储往往以字符串的形式保存。以下为Swift及oc版本的字符串转emoji表情的方...

Lynx阅读 145

用JS重构了一个K线图小组件,支持桌面移动端全平台适配
dsxkline 支持基本功能,滚动缩放滑动分页实时刷新,支持MA,BOLL、VOL、KDJ、MACD、RSI、WR、CCI、BIAS、PSY等指标

fangyun阅读 142

尽力了!才有资格说运气不好。

2.3k 声望
148 粉丝
宣传栏