有没有办法,添加一个spm包作为开发依赖?例如,有没有一种方法,我们可以做一些事情,像,developmentDependencies: { somePackage }。(like我们可以很容易地在其他软件包管理器如npm,pub等?)
developmentDependencies: { somePackage }
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中的内置软件包管理器对此进行了测试,结果与预期一致。
r6hnlfcb2#
不,目前还没有。这是我在Swift Evolution forums上看到讨论过几次的东西,这是我喜欢的东西,我真的以为我已经看到了一些关于它发生的新闻,但是唉,没有。要想获得与现在相同的效果,最好的方法是在进行发布构建时注解掉您的dev依赖项。有一个名为Rocket的工具,它将隐藏dev依赖项作为其发布步骤的一部分。但我没有使用它,因为我选择编写自己的脚本。我的例子是我的项目DiceKit。其中Package.swift文件不包括dev依赖项,当我的CI需要这些依赖项时,我在测试前运行include_dev_dependencies.py脚本,在测试后运行remove_dev_dependencies.py脚本。这种方法肯定不理想,可能对你不起作用,但我希望你能想出办法。祝你好运!
Package.swift
include_dev_dependencies.py
remove_dev_dependencies.py
yfjy0ee73#
.target( name: “MyDemoApp", dependencies: [ .product(name: "jsonlogic", package: "json-logic-swift") ] ),
我必须声明导入名称和包名称
3条答案
按热度按时间tp5buhyn1#
实际上,我可以确认1在Swift 5.2中这是可能的。SE-0226定义了“基于目标的依赖关系解析”,这基本上意味着SPM将只下载您使用的目标实际需要的依赖关系。
例如:
这将仅下载目标“SwiftlySearchTests”的ViewInspector,而 * 不 * 下载已发布库SwiftlySearch的ViewInspector。
TL;DR:只声明使用依赖项的目标的依赖项,SPM会解决其余的问题。
1我刚刚使用Xcode 11.6中的内置软件包管理器对此进行了测试,结果与预期一致。
r6hnlfcb2#
不,目前还没有。这是我在Swift Evolution forums上看到讨论过几次的东西,这是我喜欢的东西,我真的以为我已经看到了一些关于它发生的新闻,但是唉,没有。
要想获得与现在相同的效果,最好的方法是在进行发布构建时注解掉您的dev依赖项。有一个名为Rocket的工具,它将隐藏dev依赖项作为其发布步骤的一部分。但我没有使用它,因为我选择编写自己的脚本。我的例子是我的项目DiceKit。其中
Package.swift
文件不包括dev依赖项,当我的CI需要这些依赖项时,我在测试前运行include_dev_dependencies.py
脚本,在测试后运行remove_dev_dependencies.py
脚本。这种方法肯定不理想,可能对你不起作用,但我希望你能想出办法。祝你好运!
yfjy0ee73#
我必须声明导入名称和包名称