使用OClint进行iOS项目的静态代码扫描

原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html


最近需要一个静态分析代码工具,帮助我们发布运行应用前找到代码潜在的问题。

其实对于iOS开发,我们的日常开发上已经用到了这样一个静态分析的工具,那就是 Clang, Clang 是支持CC++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 ReportSummary: TotalFiles=14 FilesWithViolations=4 P1=0 P2=2 P3=6SuperLoggerPreviewView.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 ReportSummary: 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项目的静态代码扫描相关推荐

  1. Android和iOS静态代码扫描工具

    Android 名称 来源 功能特点 检查SQL注入 检查NullPointException 支持IDE情况 Android Lint Android SDK 针对Android,检查范围广 否 是 ...

  2. 静态代码扫描环境搭建(mac)

    一.安装要求 1.1 软件要求 在进行sonarqube环境安装和搭建前务必确定当前机器和平台配置满足如下要求.机器上需要安装java(Oracle JRE 11 或 OpenJDK 11),Sona ...

  3. 使用SonarCloud对.NET Core项目进行静态代码分析

    本文将介绍如何使用SonarCloud进行.NET Core项目的静态代码分析.SonarCloud是SonarQube提供的基于云的版本,特别针对于开源项目是免费的. 首先,在sonarcloud. ...

  4. java 静态扫描_静态代码扫描工具 – (八)- 扫描Java项目

    静态代码扫描工具 – (八)- 扫描Java项目 1.准备好Java项目代码 只要是java语言实现的项目均可. 比如,自动化测试的代码,测试平台等均可以. 本次案例,使用java语言实现的测试平台来 ...

  5. 现有的静态代码扫描体系弱爆了?看看阿里的吧!

    摘要:本文由淘宝技术部高级无线开发工程师详细剖析了手机淘宝的现状及挑战.针对手淘问题发现被动.感知模糊和缺乏经验积累等众多问题,阿里精心研发推出了定制化的移动静态代码扫描体系!那么该自行研发的扫描体系 ...

  6. 微服务测试之静态代码扫描

    静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...

  7. 随行付微服务测试之静态代码扫描

    静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...

  8. android静态代码扫描,android 静态代码扫描

    开始做这样一个东西是为了帮助开发减少代码方面的问题,提高代码质量,减小以后上线的风险.前面看了 360 的那个静态代码扫描感觉很强大,但目前没这实力去做成这样,希望早日开源,多多学习.所以就先用开源的 ...

  9. coverity代码检测工具介绍_微服务测试之静态代码扫描

    静态代码扫描为整个发展组织增加价值.无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险. 背景 微服务架构模 ...

最新文章

  1. 机器学习(实战)泰坦尼克号(游客存活率预估)
  2. 李德毅院士《探索新一代人工智能产业发展》
  3. Hibernate总结
  4. 016_CSS选择器列表
  5. GARFIELD@02-17-2005
  6. Spring的自动装配方法
  7. Centos启用rz/sz命令
  8. net core 2 读取appsettings.json
  9. Pannellum:详解利用Pannellum实现Web三维全景功能
  10. 安卓bin固件文件编辑器_摄像头恶意固件制作指南
  11. 基于微信小程序的人脸识别
  12. 计算机四级题库百度云资源,计算机四级题库
  13. Android开发——电话簿
  14. API接口之JWT设置token过期时间(二)
  15. Squirrel中的类与实例
  16. 少儿编程app排名_学生学习软件——10款学生党必备的APP
  17. Python中Pickle模块的dump()方法和load()方法
  18. 想学设计模式、想搞架构设计,先学学 UML 系统建模吧
  19. (一)Go语言学习笔记
  20. Vue的基本知识——wsdchong

热门文章

  1. 小学接触web的我是如何拿下蚂蚁实习 Offer的
  2. 看了就会的 Node.js 三大基础模块常用 API
  3. java版spring cloud+spring boot+redis多租户社交电子商务平台 (十三)springboot集成spring cache...
  4. 物联网数据终端演进之道
  5. Wget CVE-2014-4877:FTP 符号链接任意文件系统访问
  6. POJ 1562深搜判断连体油田个数
  7. 【BZOJ3036】绿豆蛙的归宿 概率DP
  8. DDD为何叫好不叫座?兼论DCI与业务分析的方法论
  9. HDU 1978 How many ways DP问题
  10. 如何直接soap字符串,访问webservice