开发过程中有两个难点,一是M1电脑装备SwiftLint的命令,二是怎么增加自定义rule,问题二中英文的材料都特别少,完全是根据官方pull requests文档,以及OClint的接入经验一点一点试出来的。

阐明

  • SwiftLint有Homebrew和CocoaPods两种接入方式
  • 因为存在自定义代码标准,所以只介绍经过Homebrew接入

装置使用Homebrew:

brew install swiftlint

用法

整合 SwiftLint 到 Xcode 体系中去从而能够使正告和过错显示到 IDE 上,只需求在 Xcode 中增加一个新的“Run Script Phase”而且包括如下代码即可:

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

如果是M1处理器,命令如下:

alias swiftlint="/opt/homebrew/bin/swiftlint"
if swiftlint >/dev/null; then
 swiftlint
else
 echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

增加自定义标准

  • 怎么开发自定义标准相关材料很少,只能多参阅其他的标准,依葫芦画瓢。
  1. 下载SwiftLint源码,git clone https://github.com/realm/SwiftLint.git
  2. 进入源码地点文件夹cd SwiftLint
  3. 履行xed .构建工程(这里会进行依靠库的下载,当时开了梯子,一直失利,后面把梯子关了就下载成功了。)
SwiftLint接入及自定义规则开发总结
  1. 选择swiftlint的Edit Scheme
  2. 设置ArgumentsOptions(要扫描文件的途径)
    SwiftLint接入及自定义规则开发总结
  3. command + b 履行完成后就会有扫描日志
  4. 新增自定义标准需创立在/Source/SwiftLintFramework/Rules途径下
  5. 创立新的Rule文件后,在PrimaryRulelist.swift中增加新rule声明
  6. SwiftLint要求新Rule必须承继ASTRuleRule
  7. 如果需求支持经过.swiftlint.yml动态传递参数,需承继ConfigurationProviderRule

替换本地SwiftLint履行文件

  • 经过Homebrew装置的SwiftLint可履行文件存放在/opt/homebrew/Cellar/swiftlint/0.49.1/bin/swiftlint这个途径下
  • 而经过源码编译的SwiftLint文件途径,能够在编译日志中查看
    SwiftLint接入及自定义规则开发总结
  • 在这个途径下,能够找到SwiftLint可履行文件
    SwiftLint接入及自定义规则开发总结
  • 将该可履行文件,替换Homebrew装置的SwiftLint可履行文件即可
  • 经过命令swiftlint rules能够查看现有rule,如果其间有咱们新增的rule,阐明替换成功了。
  • 最终进入要检测的工程中,履行swiftlint lint --reporter html > swiftlint.html,即可生成一份html格式的检测陈述。

.swiftlint.yml装备文件阐明

  • 该文件应存放在要检测的工程目录中,是检测所需的装备文件,其间包括需求履行,制止履行,rule参数等内容。
# 履行时扫除去的规矩
disabled_rules:
 # 函数体长度检测
 - function_body_length
 # 目标移除通知只能在deinit移除self,函数中不能removeObserver(self)
 - notification_center_detachment
# 一些规矩仅仅是可选的
opt_in_rules:
 # 一切属性和方法的声明, 都应该明确指定修饰关键字
 # - explicit_acl
 # 声明的属性应该明确其类型
 # - explicit_type_interface
# 能够经过履行如下指令来查找一切可用的规矩:
# swiftlint rules
included: # 履行 linting 时包括的途径。如果呈现这个 `--path` 会被疏忽。
 - swiftTest
excluded: # 履行 linting 时疏忽的途径。 优先级比 `included` 更高。
 - Pods
# 可装备的规矩能够经过这个装备文件来自定义
RuleConfiguration
## 函数体长度
function_body_length:
 warning: 10
 error: 100
## 命名规矩能够设置最小长度和最大程度的正告/过错
type_name:
 min_length: 4 # 仅仅正告
 max_length: # 正告和过错
  warning: 40
  error: 50
 excluded: iPhone # 扫除某个姓名
## 变量标识符名称应该只包括字母数字字符,并以小写字母最初或只应包括大写字母
identifier_name:
 min_length: # 只有最小长度
  error: 5 # 只有过错
 excluded: # 扫除某些姓名
  - id
  - URL
  - GlobalAPIKey
reporter: "html" # 陈述类型 (xcode, json, csv, checkstyle, codeclimate, junit, html, emoji, sonarqube, markdown, github-actions-logging)

最终

  • 如果事务需求检测自己的代码标准,咱们只需求把咱们生成的swiftlint可履行文件以及.swiftlint.yml装备文件交给对方。对方替换本地Homebrew内的swiftlint,然后将.swiftlint.yml放在工程目录下,即可检测了。

参阅材料

基础理论

  • 使用 SwiftLint 进行 Swift 代码标准检查 –
  • 用 SwiftLint 保持 Swift 风格共同_51CTO博客_Swiftlint
  • 怎么经过静态分析进步iOS代码质量 – 腾讯云开发者社区-腾讯云

已有代码标准阐明

  • SwiftLint代码标准属性阐明(一) –
  • SwiftLint代码标准属性阐明(二) –
  • SwiftLint代码标准属性阐明(三) –
  • SwiftLint 规矩录入 | kysonyangs

原理相关

  • SwiftLint 使用及原理 – 简书
  • Swiftlint源码学习 – ExistOrLive’ Gitbook

其他问题

  • iOS SwiftLint 装置报错 Loading sourcekitd.framework 和 SwiftLint not installed – 简书
  • SwiftLint Getting Started Part 1. In this blog I will cover the following… | by Ali Akhtar | Medium