当前位置: 首页 > news >正文

让XCode自动CodeReview你的代码-OCLint使用

前言

OCLint 是一个静态分析代码的工具,支持自定义规则,可以很好地帮助我们规范代码,这篇文章主要介绍通过OCLint让XCode来帮你Code Review,规范代码。
OCLint相关的详细内容也可以到OCLint官网上查看。

安装OCLint 和 xcpretty

这里需要安装OCLintxcpretty 工具

1、 安装xcpretty

gem安装xcpretty

sudo gem install xcpretty复制代码

用sudo是防止一些权限出现问题

2、安装OCLint

安装OCLint有两种常用的方法:

1)通过安装包:

从oclint的github项目链接中下载安装包oclint-0.10.3-x86_64-darwin-15.5.0.tar.gz.
解压后在当前用户的.bashrc中配置环境变量

OCLINT_HOME=/pathexport PATH=$PATH:OCLINT_HOME/bin复制代码

然后source .bashrc即可

2)通过Homebrew
brew tap oclint/formulae
brew install oclint复制代码
3)确认安装成功

运行oclint确认环境配置正确

$ oclint复制代码

如果展示以下内容即为安装成功:

oclint: Not enough positional command line arguments specified!Must specify at least 1 positional arguments: See: oclint -help复制代码

OCLint 的使用

这里介绍一些简单常用的用法,足够应对很多场景,其他详细用法可以到OCLint Manual上查看。


OCLint 有三个指令: oclintoclint-json-compilation-databaseoclint-xcodebuild

1、oclint:常规核心指令。
2、oclint-json-compilation-database:从编译好的compile_commands.json 文件中读取配置信息并执行 oclint。
3、oclint-xcodebuild:主要用于生成compile_commands.json文件,现在已经不进行维护了,我们可以用xcpretty替代,来生成json文件。

oclint指令

使用语法

oclint [options] <source> -- [compiler flags]复制代码

[options]为一些参数选项,可以是规则加载选项、报告形式选项等:

1、 -R <路径> : 检测所用的规则的路径,默认路径$(/path/to/bin/oclint)/../lib/oclint/rules
2、-disable-rule <规则名>: 让相对应的规则失效(OCLint 规则列表)。
3、-rc <参数>=<值> :修改阈值
4、-report-type <报告类型>,有"text"、“html”、“json”、“pmd”、“xcode”几个类型
5、-o <路径> 报告生成路径。

eg:

oclint  -R  /path/to/rules   -disable-rule ObjCAssignIvarOutsideAccessors -report-type xcode复制代码
oclint-json-compilation-database 指令

这是我们主要用到的指令,它是oclint 指令的升级版,使用起来相对 oclint 指令简单方便。
可以通过 -- 的方式在指令的最后加上oclint 选项。

oclint-json-compilation-database 指令有过滤文件选项
-i :包含进某些文件
-e : 过滤掉某些文件
eg:

# 排除Pods 里的文件
oclint-json-compilation-database -e Pods 
# 包含进Pods里的文件
oclint-json-compilation-database -i Pods复制代码
oclint-xcodebuild 指令。

因为oclint-xcodebuild 指令已经不再维护,实际应用中用xcpretty代替,所以这里就不进行介绍。

其他命令工具:xcodebuild 和 xcpretty

xcodebuild

xcodebuild是苹果发布自动构建的工具,可以通过命令行脚本的方式编译、打包Xcode 工程。
可以在终端输入man xcodebuild来查询相关用法

xcpretty

用xcpretty生成OClint 解析用的json 文件
这里用xcpretty是因为oclint-xcodebuild不再维护了,在XCode 8之后采用xcpretty来生成。

用XCode检测代码

首先在targets点添加按钮:


在Cross-platform选项中,选“Aggregate”,然后命名为"OCLint":

接着选中OCLint Target,进入Build Phases选项,点左上角的加号,选择“New Run Script Phase”

然后输入脚本即可:

示例脚本:

source ~/.bash_profile
cd ${SRCROOT}
xcodebuild clean
xcodebuild  -workspace demo.xcworkspace -scheme demo | xcpretty -r json-compilation-database --output compile_commands.json
oclint-json-compilation-database -v \
-e Pods \
-e MGLivenessDetection \
-e MGBaseKit \
-e MGIDCard \
oclint_args -- -report-type xcode \
-disable-rule ObjCAssignIvarOutsideAccessors \
-disable-rule ShortVariableName \
-rc=MINIMUM_CASES_IN_SWITCH=3 \
-rc=CYCLOMATIC_COMPLEXITY=10 \
-rc=LONG_CLASS=700 \
-rc=LONG_LINE=200 \
-rc=NCSS_METHOD=40 \
-rc=NESTED_BLOCK_DEPTH=5 \
-rc=TOO_MANY_FIELDS=20 \
-rc=TOO_MANY_METHODS=30 \
-rc=TOO_MANY_PARAMETERS=6
exit复制代码

接着选择OCLint Scheme,Command+B就可以执行了
在执行前最好删除drivedata里面的数据缓存,以保证不会解析到旧的编译内容。
编译成功后Xcode上会在不符合规则的代码上显示Warning:

参考链接:

iOS 工程自动化 - OCLint 使用详解
用OCLint给iOS代码做静态分析

相关文章:

  • 对话翁志:京东大数据如何让技术真正落地
  • Logstash+FileBeat+MongoDB+Flask打造的日志系统(三)
  • 【SignalR学习系列】5. SignalR WPF程序
  • 使用UAC白名单让指定的程序不受UAC限制
  • 无痕浏览的坑
  • 自动化执行 - 钉钉机器人通知
  • 想了解概率图模型?你要先理解图论的基本定义与形式
  • 从源码分析JSONObject因版本差异导致toString格式异常问题
  • 封装html代码块到js函数中
  • K8S集群tls证书管理
  • Android -- DragDrop
  • 一个完整Java Web项目背后的密码
  • PHP字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、切割成数组等)...
  • vue element ui excel json2csv csv 导出
  • 这7个不可错过的数据可视化技术,让你的位置信息跃然纸上
  • 【RocksDB】TransactionDB源码分析
  • co模块的前端实现
  • IDEA常用插件整理
  • Java IO学习笔记一
  • Laravel 实践之路: 数据库迁移与数据填充
  • php的插入排序,通过双层for循环
  • Ruby 2.x 源代码分析:扩展 概述
  • SpiderData 2019年2月16日 DApp数据排行榜
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 对象引论
  • 前端
  • 区块链分支循环
  • 找一份好的前端工作,起点很重要
  • 阿里云IoT边缘计算助力企业零改造实现远程运维 ...
  • 阿里云移动端播放器高级功能介绍
  • 微龛半导体获数千万Pre-A轮融资,投资方为国中创投 ...
  • # 数论-逆元
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • (1)Android开发优化---------UI优化
  • (M)unity2D敌人的创建、人物属性设置,遇敌掉血
  • (多级缓存)缓存同步
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)计算机毕业设计SSM智慧停车系统
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)VC++中ondraw在什么时候调用的
  • (转)详解PHP处理密码的几种方式
  • ******IT公司面试题汇总+优秀技术博客汇总
  • .gitattributes 文件
  • .net CHARTING图表控件下载地址
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net Signalr 使用笔记
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • 。Net下Windows服务程序开发疑惑
  • @RequestBody与@ResponseBody的使用
  • []error LNK2001: unresolved external symbol _m
  • [20161101]rman备份与数据文件变化7.txt
  • [C++]:for循环for(int num : nums)
  • [C++]命名空间等——喵喵要吃C嘎嘎
  • [c语言]小课堂 day2