SonarQube iOS 代码扫描插件(Objective-C/Swift/Infer/sonar-swift)
仓库地址:https://github.com/tal-tech/sonar-swift
介绍
静态代码扫描是一种检测项目代码的方式,能够在不运行代码的情况下对代码进行扫描,可以扫描出代码的 Bug (例如空指针)、漏洞、坏味道(例如方法内代码行数量过多)等,另外可以检测仓库的代码重复率,注释率,注释行,代码行数,复杂度等信息。
静态代码扫描可以在代码上线之前执行,并且具有执行成本低等特点,被广泛应用于 CI 流水线上。
SonarQube 是一个静态代码扫描服务,https://www.sonarqube.org/ ,支持主流语言的代码扫描,其社区版本在 GitHub 开源,地址:https://github.com/SonarSource/sonarqube。
但是对于部分语言,社区版本并不支持,例如 Objective-C 和 Swift ,本仓库希望解决的就是这两种语言的静态代码扫描分析。
SonarQube 作为一款成熟的代码扫描服务,对外提供了插件功能,支持将第三方的扫描工具的结果导入到SonarQube展示,本仓库基于 https://github.com/Idean/sonar-swift 二次开发,在原先功能的基础上新增了 Facebook Infer 扫描结果的导入。
本仓库作为 SonarQube 的iOS代码扫描插件,支持 Objective-C 语言和 Swift 语言,支持导入 SwiftLint、Infer、OCLint、Lizard、Fauxpas 工具的扫描分析结果。
规则最佳实践
我们在公司内部邀请其他同事共同Review了现有的Infer规则,筛选出了部分规则进行扫描,供大家参考。
规则介绍
支持的工具介绍
Infer
Infer 是由Facebook公司推出的静态代码扫描工具,支持 C/C++/Java 语言的扫描。
链接:https://github.com/facebook/infer
Swiftlint
Swiftlint 是检查 Swift 代码风格和规定的静态代码分析工具,基本上以 GitHub’s Swift 代码风格指南为基础,报告的问题支持在 XCode 上展示,并且可以生成报告文件,我们将读取生成的报告文件,然后上传到 SonarQube 中。
链接:https://github.com/realm/SwiftLint
lizard
lizard 可以分析出 Objective-C 语言的圈复杂度,生成 xml 文件,导入到 SonarQube 的结果中。
链接:https://github.com/terryyin/lizard
OCLint
OCLint 是一个针对于 C/C++/Objective-C 语言的静态代码分析工具,它与Infer不同的是,它更偏向于对代码规范一类问题的扫描,所以我们将 OCLint 部分的问题归类到 坏味道
上面。
链接:https://github.com/oclint/oclint
Fauxpas
Faux Pas 是一款商业软件,支持对 Objective-C 语言进行扫描分析。
链接:http://fauxpasapp.com/
下载
https://github.com/tal-tech/sonar-swift/releases
安装
将 jar 文件放置到 SonarQube 的安装目录下的 extensions/plugins/
目录下,然后重启 SonarQube
使用方式
参考以下脚本使用
- 执行
xcodebuild
,并将 log 记录输出到文件 - 使用 xcpretty 将log日志输出为 json 格式
- 执行 infer 分析,配置并忽略第三方的代码目录,导入刚刚的 json 编译日志
- 执行 swiftlint ,并将结果输出到文件
- 使用 lizard 以 xml 格式输出
- 执行 SonarScanner ,并填写报告路径
参考执行脚本
xcodebuild clean build -workspace app.xcworkspace -scheme scheme -destination 'generic/platform=iOS' COMPILER_INDEX_STORE_ENABLE=NO | tee xcodebuild.log > /dev/null
xcpretty -r json-compilation-database -o compile_commands.json < xcodebuild.log > /dev/null
# --skip-analysis-in-path 是忽略扫描目录
infer run --skip-analysis-in-path Pods --compilation-database compile_commands.json# 可选,如果有 swift 语言使用
swiftlint lint > swiftlint.txtlizard --xml > lizard-report.xml
sonar-scanner -Dsonar.host.url=http://sonarqube -Dsonar.projectKey=app -Dsonar.sources=. -Dsonar.swift.swiftlint.report=swiftlint.txt -Dsonar.swift.lizard.report=lizard-report.xml -Dsonar.swift.infer.report=infer-out/report.json
要求
扫描时必须在 macOS 操作系统上运行。
SonarQube iOS 代码扫描插件(Objective-C/Swift/Infer/sonar-swift)相关推荐
- 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件
背景: 我们在公司(好未来)内部开发了一套基于 SonarQube 的静态代码扫描服务,得益于 SonarQube 开源版本本身的功能,我们可以直接复用支持主流的编程语言,但 SonarQube 的开 ...
- docker 部署jenkins + sonarqube + postgresql 代码扫描
前言 docker部署 错误1 解决1: 问题2: 解决2: 配置sonarqube 先来安装一个汉化插件吧 问题3 整合Sonar和gitlab 安装Gitlab-runner,获取gitlab-T ...
- findbugs插件_Intellij静态代码扫描插件SpotBugs
最近要做Java静态扫描的部分工作,之前是在Jenkins上使用findbugs插件完成的,但是由于现在Jenkins权限收回和Java代码权限的放开(我也搞不懂这两者的关联性),目前打算在本地完成静 ...
- 阿里代码扫描插件安装 (IDEA)
今天被叫找代码里不规范的地方 emmm 这个小插件真滴好用 提高幸福感的事情了 File -> Setting -> Pugins 搜索 alibaba 第一个就是啦 安装好重启就可以了 ...
- Android和iOS静态代码扫描工具
Android 名称 来源 功能特点 检查SQL注入 检查NullPointException 支持IDE情况 Android Lint Android SDK 针对Android,检查范围广 否 是 ...
- Android静态代码扫描效率优化与实践
背景与问题 DevOps实践中,我们在CI(Continuous Integration)持续集成过程主要包含了代码提交.静态检测.单元测试.编译打包环节.其中静态代码检测可以在编码规范,代码缺陷,性 ...
- 使用OClint进行iOS项目的静态代码扫描
使用OClint进行iOS项目的静态代码扫描 原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要 ...
- SonarQube中配置c语言/c++语言代码规则插件
文章目录 一.下载+安装+重新启动 1. 下载文件 2.安装 3. 重新启动SonarQube 4. SonarQube管控台验证 二.SonarQube管控台配置 2.1. 创建配置模板 2.2. ...
- idea 编码扫描插件_用IDEA这样Review代码真牛逼
一个对项目负责的团队代码质量检查是必不可少的,有条件的团队经常有代码review习惯,这样可以使技术团队共同进步,但是一个庞大的工程做代码review其实是很麻烦的,所以就催生了很多的工具,今天我们就 ...
最新文章
- Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
- 论文阅读——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》
- Struts2中ActionContext和ServletActionContext
- netty系列之:channelHandlerContext详解
- html标签名缩写与英文全称对照表
- php键值交换,php键值互换时走的一个弯路
- Oracle date日期类型使用
- Spring Boot 2.x(十四):整合Redis,看这一篇就够了
- 教你在Windows轻松修改Hosts文件
- c语言判断素数(c语言判断素数)
- JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
- gis与一般计算机应用系统有哪些异同,地理信息系统概论课后习题全部答案 黄杏元著...
- android实现截图功能吗,android截屏功能实现代码
- SQL-根据生日计算年龄
- 电视hdr测试软件,短路三分钟 | 你家电视、显示器真的支持HDR么?
- 注入修改代码,白嫖按键精灵ios手机版
- data参数 layui_layui upload 额外参数上传
- 简单的node文件上传下载及中文乱码问题解决
- 戴愫-有效提升与陌生人的社交能力
- 【valist】c语言可变参数宏
热门文章
- 获取唯一标识的几种方法
- (转)【GLSL教程】(五)卡通着色
- python 爬虫解决登录验证问题_python网络爬虫的简单实践——解决无验证模拟登陆问题...
- 你也想要逃过迷茫期吗?
- 命运多厄的830,准备买彩票的我[Teaks]
- 资料员报考建筑八大员报考建筑工程施工资料管理的七条建议
- 苹果手机最新回收行情(2022.2.12)
- 使用Microsoft.Office.Interop.PowerPoin遥控PPT
- 微众银行重视用户体验 帮助提升大众金融素养
- 利用samba共享网络打印机