使用OCLint进行代码检测

本文介绍了如何使用OCLint,一个静态代码分析工具,来提高代码质量并查找潜在的bug。通过Homebrew安装OCLint,利用xcodebuild、xcpretty和OCLint的组合使用进行代码检测,并提供了脚本化的执行流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近需要使用工具进行代码检测,进一步查找代码缺陷。决定使用OCLint,看了一些文章,整理如下:

OCLint介绍

OCLint是一个强大的静态代码分析工具,可以用来提高代码质量,查找潜在的bug。项目地址:http://oclint.org/。
主要能检查到的代码缺陷:
可能出现的bug,空的if/else/try/catch/finally的参数
没有使用的变量或者参数
复杂的代码逻辑,多个if/else的判断
不需要的代码
过长的方法或者参数
错误的分配方式

静态代码分析工具是侦测编译器不可见的潜在缺陷的关键技术。OCLint 具有以下先进的代码检验特性:

依靠源码的抽象语法树来提高分析的精确度以及效率,误报率低
动态规则
灵活可扩展的配置,确保用户可以自定义分析行为
命令行式的调用使持续集成成为可能

OCLint 安装

使用Homebrew安装

brew install oclint

针对对OCLint升级的方法:

brew update
brew upgrade oclint

清理旧版本的安装数据

brew cleanup

OCLint 工具的组成

OCLint 工具集由一下三部分组成

oclint
oclint-json-compilation-database
oclint-xcodebuild
具体的使用手册还是建议大家去阅读他们的官方文档,其功能可以简单概括为:
oclint 是 OCLint 工具集最主要的指令,主要作用是规则加载、编译分析选项以及生成分析报告
oclint-json-compilation-database 的作用是在 JSON Compilation Database format 类型的编译文件 compile_commands.json 中提取必要的信息。
oclint-xcodebuild 用于将 xcodebuild 生成的 log 文件 xcodebuild.log 转换为 JSON Compilation Database format 类型

xcodebuild

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

xcodebuild -version

xcpretty

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

xcpretty 安装

gem install xcpretty

OCLint / xcodebuild /xcpretty结合使用

OCLint 结合 xcodebuild/xcpretty 的使用主要分为一下几个步骤:

  • 使用 xcodebuild clean 清理工程(可选)
  • 使用 xcodebuild build 编译工程
  • 使用 xcpretty 输出编译文件
  • 使用 oclint-json-compilation-database 输出分析结果

具体命令行如下(注意:使用下面命令行需先cd到需要检测的工程目录下):

  1. 编译工程
    以下命令将编译代码信息相关的日志输入到xcodebuild.log中
xcodebuild | tee xocdebuild.log
  1. xcpretty 输出编译文件

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

xcodebuild |xcpretty -r json-compilation-database

在build/reports中得到文件compilation_db.json

  1. 分析json数据
    使用xcpretty生成的文件名是:compilation_db.json,在目录build/reports目录中。
    因此需要把xcpretty生成的文件compilation_db.json复制到当前目录下。重命名为compile_commands.json。
    注意:运行下面命令之前要执行上面这个步骤:否则会提示找不到compile_commands.json文件
    oclint-json-compilation-database – -o=report.html
    这样可以到一个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 -e ManagerProject/Tools -- -rc=LONG_LINE=300 -disable-rule=LongLine -report-type html -o=report.html -max-priority-1=9999 -max-priority-2=9999 -max-priority-3=9999

上述脚本解释:
-e 选项来忽略对制定路径文件的分析,对于使用 Cocoapods 来管理依赖的工程,我们往往会忽略 Pods 文件夹。

-report-type html 设置最后生成的html格式,便于阅读

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值