有没有办法添加spm包作为开发依赖项?
例如,有一种方法可以做类似developmentDependencies: { somePackage }
之类的事情。
(就像我们可以在其他软件包管理器(如npm,pub等)中轻松实现的那样?)
答案 0 :(得分:1)
不,目前没有。这是我在Swift Evolution forums上讨论过的几次,这是我想要的,我实际上以为我已经看到了一些有关它发生的消息,可惜,没有。
获得与现在相同效果的“最佳”方法是在进行发行版本构建时注释掉您的开发依赖项。有一个名为Rocket的工具,其中包括隐藏开发依赖项作为其发布步骤的一部分。不过,我没有使用它,因为我选择编写自己的脚本。我的示例是我的项目DiceKit,其中的Package.swift
文件不包含开发依赖关系,并且当我的CI需要这些依赖关系时,我在测试前运行include_dev_dependencies.py
脚本和{{3} }。
这种方法绝对不是理想的方法,可能对您不起作用,但是我希望您能找到解决办法。祝你好运!
答案 1 :(得分:1)
实际上,我可以从Swift 5.2开始确认 1 。 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中的内置程序包管理器对其进行了测试,其表现与预期的一样。