Swift 包管理器,如何将包添加为开发依赖项?
Swift Package Manager, How to add a package as development dependency?
有没有办法添加一个 spm 包作为开发依赖?
例如,我们是否可以做一些事情,例如 developmentDependencies: { somePackage }
。
(就像我们可以在 npm、pub 等其他包管理器中轻松实现一样?)
没有,目前没有。这是我在 Swift Evolution forums 上看到过几次讨论的事情,这是我想要的事情,我实际上认为我已经看到了一些关于它发生的新闻,但是,唉,没有。
获得与现在相同效果的“最佳”方法是在进行发布构建时注释掉您的开发依赖项。测试后有一个工具叫Rocket that includes the hiding of dev dependencies as part of its release steps. I haven't used it, though, as I chose to write my own scripts instead. My example is my project DiceKit, where the Package.swift
file does not include dev dependencies, and when my CI needs those dependencies, I run an include_dev_dependencies.py
script before testing and a remove_dev_dependencies.py
这种方法肯定不理想,可能不适合你,但我希望你能想出点办法。祝你好运!
实际上,我可以确认1 Swift 5.2 这是可能的。 SE-0226 定义“基于目标的依赖项解析”,这基本上意味着 SPM 将只下载您使用的目标实际需要的依赖项。
例如:
// swift-tools-version:5.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "SwiftlySearch",
platforms: [
.iOS(.v13)
],
products: [
.library(
name: "SwiftlySearch",
targets: ["SwiftlySearch"]
),
],
dependencies: [
.package(url: "https://github.com/nalexn/ViewInspector.git", from: "0.4.3")
],
targets: [
.target(
name: "SwiftlySearch",
dependencies: []
),
.testTarget(
name: "SwiftlySearchTests",
dependencies: ["SwiftlySearch", "ViewInspector"]
),
]
)
这只会为目标“SwiftlySearchTests”下载 ViewInspector,不会 为已发布的库 SwiftlySearch。
TL;DR:只需在使用它们的目标上声明依赖关系,SPM 会找出其余部分。
1 我刚刚使用 Xcode 11.6 中的内置包管理器对此进行了测试,其表现符合预期。
有没有办法添加一个 spm 包作为开发依赖?
例如,我们是否可以做一些事情,例如 developmentDependencies: { somePackage }
。
(就像我们可以在 npm、pub 等其他包管理器中轻松实现一样?)
没有,目前没有。这是我在 Swift Evolution forums 上看到过几次讨论的事情,这是我想要的事情,我实际上认为我已经看到了一些关于它发生的新闻,但是,唉,没有。
获得与现在相同效果的“最佳”方法是在进行发布构建时注释掉您的开发依赖项。测试后有一个工具叫Rocket that includes the hiding of dev dependencies as part of its release steps. I haven't used it, though, as I chose to write my own scripts instead. My example is my project DiceKit, where the Package.swift
file does not include dev dependencies, and when my CI needs those dependencies, I run an include_dev_dependencies.py
script before testing and a remove_dev_dependencies.py
这种方法肯定不理想,可能不适合你,但我希望你能想出点办法。祝你好运!
实际上,我可以确认1 Swift 5.2 这是可能的。 SE-0226 定义“基于目标的依赖项解析”,这基本上意味着 SPM 将只下载您使用的目标实际需要的依赖项。
例如:
// swift-tools-version:5.2
// The swift-tools-version declares the minimum version of Swift required to build this package.
import PackageDescription
let package = Package(
name: "SwiftlySearch",
platforms: [
.iOS(.v13)
],
products: [
.library(
name: "SwiftlySearch",
targets: ["SwiftlySearch"]
),
],
dependencies: [
.package(url: "https://github.com/nalexn/ViewInspector.git", from: "0.4.3")
],
targets: [
.target(
name: "SwiftlySearch",
dependencies: []
),
.testTarget(
name: "SwiftlySearchTests",
dependencies: ["SwiftlySearch", "ViewInspector"]
),
]
)
这只会为目标“SwiftlySearchTests”下载 ViewInspector,不会 为已发布的库 SwiftlySearch。
TL;DR:只需在使用它们的目标上声明依赖关系,SPM 会找出其余部分。
1 我刚刚使用 Xcode 11.6 中的内置包管理器对此进行了测试,其表现符合预期。