关于xcode11:如何使用Swift Package Manager将SwiftLint与iOS应用程序集成?

How to integrate SwiftLint with an iOS app using Swift Package Manager?

我正在Xcode 11(测试版5)中创建一个新的iOS应用程序,我想尝试使用Swift Package Manager代替CocoaPods来管理依赖项。

使用SwiftLint和CocoaPods时的常见模式是将SwiftLint添加为依赖项,然后添加一个构建阶段以执行${PODS_ROOT}/SwiftLint/swiftlint; 这样,所有开发人员最终都会使用相同版本的SwiftLint。

如果我尝试在Xcode中将SwiftLint添加为SwiftPM依赖项,则会禁用我需要的可执行目标:

Add Package Screenshot

我可以通过创建没有产品或目标的虚拟Package.swift并在构建阶段运行swift run swiftlint来伪造它,但是感觉很怪异和奇怪:

1
2
3
4
5
6
7
8
9
10
11
// swift-tools-version:5.1
import PackageDescription

let package = Package(
    name:"dummy-package",
    products: [],
    dependencies: [
        .package(url:"https://github.com/realm/SwiftLint.git", from:"0.34.0")
    ],
    targets: []
)

有没有不创建虚拟包的方法吗? 还是Swift Package Manager不适用于此特定用例?


滥用iOS代码依赖管理器来运行构建工具的所有方法都是骇人听闻的。

版本兼容SPM的工具依赖关系的正确方法是使用Mint:安装和运行Swift CLI软件包的软件包管理器。 另请参阅"更好的iOS项目:如何使用Mint管理工具"。