开发过程中有两个难点,一是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
增加自定义标准
- 怎么开发自定义标准相关材料很少,只能多参阅其他的标准,依葫芦画瓢。
- 下载SwiftLint源码,
git clone https://github.com/realm/SwiftLint.git
- 进入源码地点文件夹
cd SwiftLint
- 履行
xed .
构建工程(这里会进行依靠库的下载,当时开了梯子,一直失利,后面把梯子关了就下载成功了。)
- 选择swiftlint的
Edit Scheme
- 设置
Arguments
和Options
(要扫描文件的途径) - command + b 履行完成后就会有扫描日志
- 新增自定义标准需创立在
/Source/SwiftLintFramework/Rules
途径下 - 创立新的Rule文件后,在
PrimaryRulelist.swift
中增加新rule声明 - SwiftLint要求新Rule必须承继
ASTRule
或Rule
- 如果需求支持经过
.swiftlint.yml
动态传递参数,需承继ConfigurationProviderRule
替换本地SwiftLint履行文件
- 经过Homebrew装置的SwiftLint可履行文件存放在
/opt/homebrew/Cellar/swiftlint/0.49.1/bin/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