首页 > 解决方案 > Swift 包管理器,如何将包添加为开发依赖项?

问题描述

有没有办法添加一个 spm 包作为开发依赖项?

例如,有没有办法我们可以做一些事情,比如,developmentDependencies: { somePackage }.

(就像我们可以在 npm、pub 等其他包管理器中轻松实现一样?)

标签: swiftswift-package-manager

解决方案


实际上,我可以在 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 中的内置包管理器对此进行了测试,其行为符合预期。


推荐阅读