swift - Swift 包管理器,如何将包添加为开发依赖项?
问题描述
有没有办法添加一个 spm 包作为开发依赖项?
例如,有没有办法我们可以做一些事情,比如,developmentDependencies: { somePackage }
.
(就像我们可以在 npm、pub 等其他包管理器中轻松实现一样?)
解决方案
实际上,我可以在 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 中的内置包管理器对此进行了测试,其行为符合预期。
推荐阅读
- sql - 在给定时间范围内将结果转换为每小时计数
- ios - 关于 TableViews:如何通过类管理节标题和行?
- docker - 在 macOS 和 Windows 上替代 --network 主机的 Docker
- python - 在 python 中执行 grep -v 的更快方法
- sass - 通过项目变量文件扩展 $grid-breakpoints map-merge 变量
- python - 如何使用云功能调用 gsutil 或使用 GCS 对象的路径将数据从 GCS 移动到 s3 存储桶
- java - 如何在切换布局后重新启动 onclicklistener
- javascript - 当我们通过 for..of 迭代生成器时,我们可以将参数传递给生成器吗?
- r - 对 NA 值使用 strptime
- python - 将分类列转换为特定整数