使用OClint进行iOS项目的静态代码扫描
使用OClint进行iOS项目的静态代码扫描
原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html
最近需要一个静态分析代码工具,帮助我们发布运行应用前找到代码潜在的问题。
其实对于iOS开发,我们的日常开发上已经用到了这样一个静态分析的工具,那就是 Clang, Clang 是支持C、C++、Objective-C 和 Swift 的一个前端编译工具,他将 OC 或者 Swift 的代码输出抽象语法树(Abstract Syntax Tree),然后编译成 LLVM 的 bitcode,最后由 LLVM 编译成 machine code。这个工具支撑着我们日常的开发和调试。
OCLint 就是一个建立在 Clang 上的工具,能够发现代码中潜在的问题。具体的功能请见官方文档,这里主要介绍的是其安装与使用。
安装软件
XCtool
brew install xctools
OClint
brew tap oclint/formulae
brew install oclint
测试
进入项目目录(以 SuperLogger 为例),
下载项目切换到有问题的位置(),并进入 SuperLoggerDemo 目录:
git clone https://github.com/yourtion/SuperLogger.git
cd SuperLogger
git checkout 0e64637459996ed91e0dd15718efb5d7200a9971
cd SuperLoggerDemo
测试执行:
# Cleanup before building
rm -f compile_commands.json
xctool -project SuperLoggerDemo.xcodeproj -scheme SuperLoggerDemo clean
# Build Project
xctool build \
-project SuperLoggerDemo.xcodeproj -scheme SuperLoggerDemo \
-reporter json-compilation-database:compile_commands.json
# Analyze Project
oclint-json-compilation-database -e Pods -- \
-max-priority-1=100000 \
-max-priority-2=100000 -max-priority-3=100000 \
-disable-rule=InvertedLogic \
-disable-rule=CollapsibleIfStatements \
-disable-rule=UnusedMethodParameter \
-disable-rule=LongLine \
-disable-rule=LongVariableName \
-disable-rule=ShortVariableName \
-disable-rule=UselessParentheses \
-disable-rule=IvarAssignmentOutsideAccessorsOrInit | sed 's/\(.*\.\m\{1,2\}:[0-9]*:[0-9]*:\)/\1 warning:/'
# Final cleanup
rm -f compile_commands.json
输出
OCLint Report
Summary: TotalFiles=14 FilesWithViolations=4 P1=0 P2=2 P3=6
SuperLoggerPreviewView.m:77:37: warning: replace with container literal [migration|P3]
SuperLogerListView.m:206:37: warning: empty catch statement [empty|P2]
SuperLogerListView.m:25:15: warning: empty if statement [empty|P2]
SuperLogerListView.m:119:1: warning: long method [size|P3] Method with 92 lines exceeds limit of 50
SuperLogerListView.m:171:41: warning: replace with container literal [migration|P3]
SuperLogerListView.m:110:21: warning: replace with object subscripting [migration|P3]
SuperLogger.m:60:30: warning: replace with object subscripting [migration|P3]
SuperLogger.m:108:31: warning: replace with object subscripting [migration|P3]
[OCLint (http://oclint.org) v0.10.2]
具体问题可以参考:http://docs.oclint.org/en/stable/rules/index.html
修复后
OCLint Report
Summary: TotalFiles=14 FilesWithViolations=0 P1=0 P2=0 P3=0
[OCLint (http://oclint.org) v0.10.2]
大概的功能就是这样,使用过程有什么问题欢迎大家一起交流
原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html
使用OClint进行iOS项目的静态代码扫描的更多相关文章
- 使用SonarCloud对.NET Core项目进行静态代码分析
本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析.SonarCloud是SonarQube提供的基于云的版本,特别针对于开源项目是免费的. 首先,在sonarcloud. ...
- Lint——Android SDK提供的静态代码扫描工具
Lint和FindBugs一样,都是静态代码扫描工具,区别在于它是Android SDK提供的,会检查Android项目源文件的正确性.安全性.性能.可用性等潜在的bug并优化改进. 下图简单地描述了 ...
- DEVOPS技术实践_05:sonar静态代码扫描
一.SonarQube静态代码扫描平台 1.1 安装 https://www.sonarqube.org/官网 1.2 下载软件包 https://www.sonarqube.org/download ...
- 【Lua篇】静态代码扫描分析(一)初步介绍
一.静态代码分析 静态代码分析是一种通过检查代码而不是执行程序来发现源代码中错误的手段.通常可以帮助我们发现常见的编码错误,例如: 语法错误 违反制定的标准编码 未定义的变量 安全性问 ...
- 【Lua篇】静态代码扫描分析(四)规则检查
一.前言 通过前面三篇文章已经初步实现了将Lua源代码文件读取解析成语法树,现在就可以通过得到的语法树进行指定规则的代码扫描检查.下图简单列举了一下单个Lua文件内部的语法关系情况(注意并非真正的类图 ...
- 【Lua篇】静态代码扫描分析(三)语法分析
一.语法分析 通过将词法分析获取的Token流按照目标语言的语法进行解析的过程,例如解析函数声明.函数调用.变量声明.各种语句等. 二.Lua语法分析 在写语法分析程序前,先需要了解Lua的语句和语法 ...
- 静态代码扫描工具PMD定制xml的规则(一)操作篇
0.前言 PMD作为开源的静态代码扫描工具有很强的扩展能力,可使用java或xpath定制rule.第一篇从操作上讲解如何定制一个用于扫描xml是否规范的规则.首先我们知道xml格式的文件在java工 ...
- Objective C静态代码扫描和代码质量管理 OClint + SonarQube
OClint是针对C, C++及Objective C代码的静态扫描分析工具,而SonarQube是一个开源的代码质量管理平台.本文将实现将OClint的扫描结果导入到SonarQube中,已实现对O ...
- iOS开发之使用 infer静态代码扫描工具
infer是Facebook 的 Infer 是一个静态分析工具.可以分析 Objective-C, Java 或者 C 代码,报告潜在的问题. 任何人都可以使用 infer 检测应用,可以将严重的 ...
随机推荐
- Web 中调用FreeSWITCH的Portal GUI配置记录
具体设定步骤: ①加载 mod_xml_rpc 模块:load mod_xml_rpc 若想让该模块在FreeSWITCH启动时而自动加载,在conf/autoload_configs/modules ...
- eol-last的相关知识
eslint “eol-last”:0 文件末尾强制换行(就是代码结尾处,要来个空格,相当于加一行,设置为0就可以了) ./src/main.js error eol-last Newline ...
- MACE(3)-----工程化
作者:十岁的小男孩 QQ:929994365 能下者,上. 前言 本文是MACE的第三步即MACE环境编译出来的库在Android工程中的使用.在第一篇博文中通过mace官方提供的安卓工程进行调试,本 ...
- python 全栈开发,Day10(动态参数,命名空间,作用域,函数嵌套)
一.动态参数 def func(a,b,c,d,e,f,g): pass func(1,2,3,4,5,6,7) 如果加30个参数呢?有没有万能的参数,可以代表一切参数呢? *args 动态参数,万能 ...
- vtiger二次开发
搞了快两个星期的vtiger,慢慢的摸索到了一些东西 数据库相当的复杂,已有的模块我只是分析了下页面的加载,方法的调用 大部分时间在研究怎么添加新的功能模块,今天才知道模块可以通过输入命令的方式来添加 ...
- java:冒泡排序、选择排序、插入排序实现
整数排序 给一组整数,按照升序排序,使用选择排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法. 样例 样例 1: 输入: [3, 2, 1, 4, 5] 输出: [1, 2, 3, 4, 5] ...
- openstack Too many open files错误
oopenstack突然web页面无法打开,页面报500错误,查看httpd日志报如下错误 [Fri Feb ::] [:error] [pid ] [remote ] IOError: [Errno ...
- PDA智能程序访问WebService,报告“未能建立与网络的连接”
其实就是你没又连接上网络.首先下个第三方软件关于vs模拟器连接的.然后根据以下说明操作就可以连接了在确保主机已连上互联网的情况下,按以下步骤设置: 1.打开ActiveSync ,点击“文件”——&g ...
- OpenCV中cv2的用法
一.读入图像 使用函数cv2.imread(filepath,flags)读入一副图片 filepath:要读入图片的完整路径 flags:读入图片的标志 cv2.IMREAD_COLOR:默认参数 ...
- Scrapy项目结构分析和工作流程
新建的空Scrapy项目: spiders目录: 负责存放继承自scrapy的爬虫类.里面主要是用于分析response并提取返回的item或者是下一个URL信息,每个Spider负责处理特定的网站或 ...