Swift软件包管理器,如何添加一个软件包作为开发依赖?

snz8szmq  于 2022-11-21  发布在  Swift
关注(0)|答案(3)|浏览(191)

有没有办法,添加一个spm包作为开发依赖?
例如,有没有一种方法,我们可以做一些事情,像,developmentDependencies: { somePackage }
(like我们可以很容易地在其他软件包管理器如npm,pub等?)

tp5buhyn

tp5buhyn1#

实际上,我可以确认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的ViewInspector。
TL;DR:只声明使用依赖项的目标的依赖项,SPM会解决其余的问题。
1我刚刚使用Xcode 11.6中的内置软件包管理器对此进行了测试,结果与预期一致。

r6hnlfcb

r6hnlfcb2#

不,目前还没有。这是我在Swift Evolution forums上看到讨论过几次的东西,这是我喜欢的东西,我真的以为我已经看到了一些关于它发生的新闻,但是唉,没有。
要想获得与现在相同的效果,最好的方法是在进行发布构建时注解掉您的dev依赖项。有一个名为Rocket的工具,它将隐藏dev依赖项作为其发布步骤的一部分。但我没有使用它,因为我选择编写自己的脚本。我的例子是我的项目DiceKit。其中Package.swift文件不包括dev依赖项,当我的CI需要这些依赖项时,我在测试前运行include_dev_dependencies.py脚本,在测试后运行remove_dev_dependencies.py脚本。
这种方法肯定不理想,可能对你不起作用,但我希望你能想出办法。祝你好运!

yfjy0ee7

yfjy0ee73#

.target(
    name: “MyDemoApp",
    dependencies: [
        .product(name: "jsonlogic", package: "json-logic-swift")
    ]
),

我必须声明导入名称和包名称

相关问题