仓库地址:https://github.com/tal-tech/sonar-swift

欢迎 Star。

介绍

静态代码扫描是一种检测项目代码的方式,能够在不运行代码的情况下对代码进行扫描,可以扫描出代码的 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

使用方式

参考以下脚本使用

  1. 执行 xcodebuild,并将 log 记录输出到文件
  2. 使用 xcpretty 将log日志输出为 json 格式
  3. 执行 infer 分析,配置并忽略第三方的代码目录,导入刚刚的 json 编译日志
  4. 执行 swiftlint ,并将结果输出到文件
  5. 使用 lizard 以 xml 格式输出
  6. 执行 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)相关推荐

  1. 插件代码_我们开源了一款 SonarQube iOS 代码扫描插件

    背景: 我们在公司(好未来)内部开发了一套基于 SonarQube 的静态代码扫描服务,得益于 SonarQube 开源版本本身的功能,我们可以直接复用支持主流的编程语言,但 SonarQube 的开 ...

  2. docker 部署jenkins + sonarqube + postgresql 代码扫描

    前言 docker部署 错误1 解决1: 问题2: 解决2: 配置sonarqube 先来安装一个汉化插件吧 问题3 整合Sonar和gitlab 安装Gitlab-runner,获取gitlab-T ...

  3. findbugs插件_Intellij静态代码扫描插件SpotBugs

    最近要做Java静态扫描的部分工作,之前是在Jenkins上使用findbugs插件完成的,但是由于现在Jenkins权限收回和Java代码权限的放开(我也搞不懂这两者的关联性),目前打算在本地完成静 ...

  4. 阿里代码扫描插件安装 (IDEA)

    今天被叫找代码里不规范的地方 emmm 这个小插件真滴好用 提高幸福感的事情了 File -> Setting -> Pugins 搜索 alibaba 第一个就是啦 安装好重启就可以了 ...

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

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

  6. Android静态代码扫描效率优化与实践

    背景与问题 DevOps实践中,我们在CI(Continuous Integration)持续集成过程主要包含了代码提交.静态检测.单元测试.编译打包环节.其中静态代码检测可以在编码规范,代码缺陷,性 ...

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

    使用OClint进行iOS项目的静态代码扫描 原文链接:http://blog.yourtion.com/static-code-analysis-ios-using-oclint.html 最近需要 ...

  8. SonarQube中配置c语言/c++语言代码规则插件

    文章目录 一.下载+安装+重新启动 1. 下载文件 2.安装 3. 重新启动SonarQube 4. SonarQube管控台验证 二.SonarQube管控台配置 2.1. 创建配置模板 2.2. ...

  9. idea 编码扫描插件_用IDEA这样Review代码真牛逼

    一个对项目负责的团队代码质量检查是必不可少的,有条件的团队经常有代码review习惯,这样可以使技术团队共同进步,但是一个庞大的工程做代码review其实是很麻烦的,所以就催生了很多的工具,今天我们就 ...

最新文章

  1. Matlab从入门到精通-在线性代数中的应用(二):求解齐次线性方程组
  2. 论文阅读——《Online Photometric Calibration of Auto Exposure Video for Realtime Visual Odometry and SLAM》
  3. Struts2中ActionContext和ServletActionContext
  4. netty系列之:channelHandlerContext详解
  5. html标签名缩写与英文全称对照表
  6. php键值交换,php键值互换时走的一个弯路
  7. Oracle date日期类型使用
  8. Spring Boot 2.x(十四):整合Redis,看这一篇就够了
  9. 教你在Windows轻松修改Hosts文件
  10. c语言判断素数(c语言判断素数)
  11. JQuery Easyui/TopJUI表格基本的删除功能(删除当前行和多选删除)
  12. gis与一般计算机应用系统有哪些异同,地理信息系统概论课后习题全部答案 黄杏元著...
  13. android实现截图功能吗,android截屏功能实现代码
  14. SQL-根据生日计算年龄
  15. 电视hdr测试软件,短路三分钟 | 你家电视、显示器真的支持HDR么?
  16. 注入修改代码,白嫖按键精灵ios手机版
  17. data参数 layui_layui upload 额外参数上传
  18. 简单的node文件上传下载及中文乱码问题解决
  19. 戴愫-有效提升与陌生人的社交能力
  20. 【valist】c语言可变参数宏

热门文章

  1. 获取唯一标识的几种方法
  2. (转)【GLSL教程】(五)卡通着色
  3. python 爬虫解决登录验证问题_python网络爬虫的简单实践——解决无验证模拟登陆问题...
  4. 你也想要逃过迷茫期吗?
  5. 命运多厄的830,准备买彩票的我[Teaks]
  6. 资料员报考建筑八大员报考建筑工程施工资料管理的七条建议
  7. 苹果手机最新回收行情(2022.2.12)
  8. 使用Microsoft.Office.Interop.PowerPoin遥控PPT
  9. 微众银行重视用户体验 帮助提升大众金融素养
  10. 利用samba共享网络打印机