Bor*_* Y. 6 swift swift-package-manager swiftlint
到目前为止,我发现的是这篇博客文章:是时候使用Swift Package Manager了,建议将SwiftLint和其他工具与集成Package.swift
。
我能够将依赖关系添加到包文件中,并成功构建和测试,但是SwiftLint从未警告我有关语法违规的信息。
在Xcode项目中使用此“构建阶段”步骤之前,请执行以下操作:
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
Run Code Online (Sandbox Code Playgroud)
文章建议采用蒙犬本身毫无用处没有PackageConfigs。这个想法是在提交期间运行SwiftLint命令。我试图添加两个项目,但无法在合理的时间内使它正常工作。在提交期间,我看到如下警告:
非法指示:4 $ komondor运行前提交
对于Swift Package Manager来说,这还处于初期,互联网上几乎没有信息。
理想情况下,我希望有任何可以使我们的团队自动化SwiftLint的解决方案,理想情况下,不需要添加22个依赖项,配置文件和动态库。
您现在可以通过Swift Package Manager 插件正式使用 SwiftLint 。为此,请添加包依赖项,然后在要检查的目标中指定插件Package.swift
:
let package = Package(
...
dependencies: [
.package(url: "https://github.com/realm/SwiftLint", branch: "main")
],
targets: [
.target(
...
plugins: [.plugin(name: "SwiftLintPlugin", package: "SwiftLint")]
)
]
)
Run Code Online (Sandbox Code Playgroud)
截至 2023 年 1 月 13 日,我发现在包依赖项中指定exact
最新版本 ( 0.50.3
) 会导致 SPM 无法解析依赖项。使用branch
集合main
(如上所述)或特定的revision
两者似乎都有效。
然后,在 中.swiftlint.yml
,您可以指定要 lint 的目录:
included:
- Sources
- Tests
Run Code Online (Sandbox Code Playgroud)
小智 7
从 0.47.1 版本开始,可以将 SwiftLint 附加到 Swift Package。您可以使用.artifactbundle.zip
artefact: 在您的Package.swift
:
(...)
targets: [
.binaryTarget(
name: "SwiftLintBinary",
url: "https://github.com/realm/SwiftLint/releases/download/0.47.1/SwiftLintBinary-macos.artifactbundle.zip",
checksum: "cdc36c26225fba80efc3ac2e67c2e3c3f54937145869ea5dbcaa234e57fc3724"
),
.plugin(
name: "SwiftLintPlugin",
capability: .buildTool(),
dependencies: ["SwiftLintBinary"]
),
.target(
name: "YourPackageName",
dependencies: [],
plugins: ["SwiftLintPlugin"]
),
(...)
]
Run Code Online (Sandbox Code Playgroud)
接下来您必须设置插件配置。在“Plugins/SwiftLintPlugin”目录中创建一个“plugin.swift”文件:
import PackagePlugin
@main
struct SwiftLintPlugins: BuildToolPlugin {
func createBuildCommands(context: PluginContext, target: Target) async throws -> [Command] {
return [
.buildCommand(
displayName: "Linting \(target.name)...",
executable: try context.tool(named: "swiftlint").path,
arguments: [
"lint",
"--in-process-sourcekit",
"--path",
target.directory.string // only lint the files in the target directory
],
environment: [:]
)
]
}
}
Run Code Online (Sandbox Code Playgroud)
就是这样。
如果您需要更多背景信息,您还可以在此处查看我的存储库: https: //github.com/Filozoff/Kukulka
Swift 中的一项名为Package Manager Extensible Build Tools ( SE-0303 ) 的提案已实施,并可在Swift 5.6中使用,截至 2021 年 10 月,该版本尚未发布。
新的目标类型plugin
(与executable
和一起library
)将可用于在构建期间配置命令。这意味着 SwiftLint 需要做一些工作才能成为 Swift 包插件。SwiftLint 作者可以实现一个包插件,该插件在构建之前创建一个运行 Swiftlint 的命令。
我将在该提案实施时以及 SwiftLint 支持可扩展构建工具时进行更新
归档时间: |
|
查看次数: |
194 次 |
最近记录: |