最近 GitHub Actions 发生了一些变化,我们不确定发生了什么或如何解决它。我们正在测试和构建 iOS 应用程序,并使用 SwiftLint 进行自动 PR 检查。
几个月来,我们的工作配置一直运转良好,但大约 1.5 周前,事情开始变得不稳定。有时它贯穿,有时则不贯穿。
我们的文件中曾经有这样的内容run-tests.yml:
- name: Install SwiftLint
run: brew install swiftlint
Run Code Online (Sandbox Code Playgroud)
9 天前,测试在这一步突然开始失败。以下是来自 GitHub Actions 的日志:
==> 浇注 swiftlint-0.42.0.catalina.bottle.tar.gz
错误:该
brew link步骤未成功完成 已构建公式,但未符号链接到 /usr/local 无法符号链接 bin/swiftlint 目标 /usr/local/bin/swiftlint 已存在。您可能想删除它: rm '/usr/local/bin/swiftlint'要强制链接并覆盖所有冲突的文件:brew link --overwrite swiftlint
列出要删除的所有文件:brew link --overwrite --dry-run swiftlint
可能的冲突文件是:/usr/local/bin/swiftlint
==> 摘要 /usr/local/Cellar/swiftlint/0.42.0:6 个文件,12.2MB 错误:进程已完成,退出代码为 1。
经过一些研究,查看错误消息并看到其他作业成功运行(意味着 SwiftLint 可以正确安装),我们决定设置一个故障保护:尝试链接现有的 SwiftLint,如果失败,只需安装它:
- name: Link SwiftLint or install it
run: brew link --overwrite swiftlint || brew install …Run Code Online (Sandbox Code Playgroud) continuous-integration homebrew swift swiftlint github-actions
如何修复线路长度违规?
由于线路长度违规而不允许的警报消息的相关部分: message: NSLocalizedString("\nYou will be requested to Use %@ to Sign In. %@ doesn't share any information about you. The permission is required to post your Live Video.", ⚠行应为120个字符或更少:当前208个字符(line_length)
更新到 Xcode 10 后,初始项目配置存在一些问题。步骤如下所示:
配置的工作方式如下:
这在 Xcode 9 中工作正常,但显然,它在 Xcode 10 构建系统下不起作用。问题是我是否下载存储库(.generated文件不是存储库的一部分)。点击build它会显示如下结果:
...使用“.sourcery.yml”处的配置文件扫描源...发现 239 种类型。正在加载模板...已加载 9 个模板。生成代码...完成。处理时间0.491948962211609秒...
所以 sourcery 工作正常,然后进行 linting:
Linting 'FromResponse. generated.swift' (1/186)
工作正常以及过程,但最终构建将失败:
错误:找不到构建输入文件:'/path/Generate/FromResponse. generated.swift',...
所以这很奇怪,因为文件实际上是存在的,并且根据构建设置文件应该在生成它们之后进行编译。那么我应该如何在构建过程中处理源代码呢?
我正在开发一个项目,我需要如何禁用 swiftlint 配置文件中的字符限制,那么如何禁用字符限制?
这是 swiftlint 文件
disabled_rules:
- force_cast
- force_try
- variable_name
- type_name
- file_length
- type_body_length
- cyclomatic_complexity
- function_body_length
- valid_docs
- trailing_whitespace
opt_in_rules:
- empty_string
excluded:
- Carthage
- Pods
- SwiftLint/Common/3rdPartyLib
line_length:
warning: 150
error: 200
ignores_function_declarations: true
ignores_comments: true
ignores_urls: true
custom_rules:
smiley_face:
name: "Smiley Face"
regex: '( :\))'
match_kinds:
- comment
- string
message: "A closing parenthesis smiley :) creates a half-hearted smile, and thus is not preferred. Use :]"
severity: warning
Run Code Online (Sandbox Code Playgroud) 我正在研究一个 iOS Swift 项目。Git 被用于版本控制。我只想swiftlint为新更改的文件运行工具。换句话说,我只想检查上次提交之前已编辑的文件的静态问题。如果可能,我会将脚本添加到 中Build phase -> Run script,以便每个开发人员只能找到他们正在处理的文件的静态问题。是否可以?
当前 SwiftLint 规则:
file_length:
warning: 800
error: 1500
Run Code Online (Sandbox Code Playgroud)
错误
我遵循了这个答案,但错误并没有消失
// swiftlint:disable force_cast
import UIKit
class MyClass: UIViewController {
}
// swiftlint:enable force_cast
Run Code Online (Sandbox Code Playgroud)
如何忽略某些文件中的 SwiftLint 规则?
我最近刚刚使用 CocoaPods 安装了 SwiftLint。我想更改 SwiftLint 的规则,但是当我进入 pod -> SwiftLint 时,我找不到名为“rules”的文件,通过该文件我可以编辑我的规则。请让我知道我该如何做同样的事情!多谢!对此,我真的非常感激!
我在 git 版本控制系统下有一个 iOS/Swift 项目。层次结构如下,
home/user/git_root/docs
home/user/git_root/project
home/user/git_root/project/project.xcodeproj
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,我的git_root目录包含文件夹中的一些其他文档docs以及实际的项目目录。
我已经使用自制软件安装swiftlint在我的Mac上,
brew install swiftlint
Run Code Online (Sandbox Code Playgroud)
swiftlint 当前安装的位置是,
which swiftlint
/usr/local/bin/swiftlint
Run Code Online (Sandbox Code Playgroud)
当我运行下面添加的脚本时Build phase -> Run scripts,发生了奇怪的事情,
if which swiftlint >/dev/null; then
echo "swiftlint already installed in machine";
git diff --cached --name-only | grep "\.swift" | while read filename; do
echo "swiftlinting file $filename";
swiftlint lint --path "$filename";
done
fi
Run Code Online (Sandbox Code Playgroud)
一些 swift 文件通过 echo 打印,但swiftlint找不到文件并产生以下错误,
在路径中找不到 lintable 文件:''
例如,下面是构建日志的输出,
swiftlinting 文件项目/a.swift
在路径中找不到 …
对于以下内容:
struct Constants {
static let m2Pi = CGFloat(M_PI) * 2
}
Run Code Online (Sandbox Code Playgroud)
SwiftLint 0.16.1警告我:
警告:传统常量违例:结构范围的常量优先于传统的全局常量.(legacy_constant)
请注意,我需要此值UIBezierPath.init(arcCenter center: CGPoint, radius: CGFloat, startAngle: CGFloat, endAngle: CGFloat, clockwise: Bool)来获得闭合弧.
使用 Alamofire 上传图像的代码会触发 SwiftLint 违规。如何解决?
Alamofire.upload(multipartFormData: { (multipartFormData) in
multipartFormData.append(imageData, withName: "profileImage", fileName: "image.png", mimeType: "image/jpg")
}, usingThreshold: UInt64.init(), to: requestURL, method: .post, headers: headers) { (result) in
switch result {
case .success(let upload, _, _):
upload.responseJSON { response in
if let error = response.error {
completionBlock(.failure(error as NSError))
return
}
completionBlock(.success(response))
}
case .failure(let error):
completionBlock(.failure(error as NSError))
}
}
Run Code Online (Sandbox Code Playgroud)
带有尾随闭包违规的多个闭包:传递多个闭包参数时不应使用尾随闭包语法。(multiple_closures_with_trailing_closure)