繁体   English   中英

使用 Swift Package Manager 时如何导入包的依赖?

[英]How to import a package's dependency when using Swift Package Manager?

我开始了一个新的 Xcode 项目。 我使用 Swift Package 管理器(例如Quick )导入了 package 。

我在 Xcode 的侧边栏中看到 Quick。

我现在可以通过首先导入 Quick 来使用它:

import Quick

一切都适用于 Quick。


我注意到在 Xcode 的侧边栏中,当我导入 Quick 时,它会自动导入其依赖项(例如Nimble )。

我以为我可以通过导入它来开始使用这个依赖项,但这会导致错误:

import Quick
import Nimble // ❌ No such module 'Nimble'

如果我尝试省略import并直接使用 Nimble 中的一行代码,我也会收到错误消息:

expect(1 + 1).to(equal(3)) // Use of unresolved identifier 'expect'

如何在我的项目中使用 Nimble?


我猜想解决这个问题的一种方法是通过 Swift Package 管理器显式添加 Nimble package。

但是,这似乎是错误的,因为:

  1. 我的 Xcode 项目中已经有了 Nimble 的源代码
  2. 我不希望从 Swift Package Manager 获得的显式 Nimble 版本与从 Quick 获得的隐式 Nimble 版本之间存在版本不匹配。

使用 Swift Package Manager 时如何导入包的依赖项?

要在您的项目中使用 Nimble,您必须以与 Quick 相同的方式使用 SPM 安装它。 你可以在你的班级中导入 Quick

1- SPM 只下载一次依赖项,显然是相同版本或范围。

2- 您必须控制版本,在相同的版本范围内设置依赖项。

Swift package 清单具有产品字段,库作者可以使用该字段来声明对客户端可用的构建工件:

package 产品定义了可供 package 的客户使用的外部可见构建工件。 产品由一个或多个包目标的构建工件组装而成

每当您使用 package 时,您都可以选择导入这些声明产品使用的目标。 假设您有包含产品B的包装A并且在产品B中以CD为目标,使用A时可以导入CD

现在,假设 package ACD中分别使用 package E的目标FG 在这种情况下,使用 package A还可以使 package E中的FG可用于您的项目。

现在让我们考虑您的场景:您正在使用 package Quick的产品Quick ,它公开了目标Quick并且您可以毫无问题地导入Quick 尽管 package Quick在其测试目标内部使用 package Nimble ,但它并未在Quick目标中使用Nimble ,这是 ZEFE90A8E604A7C840E88D03A67F6B7D8 公开使用的目标。 要使用Nimble ,您必须明确添加Nimble package。

但是,这似乎是错误的,因为:

  1. 我的 Xcode 项目中已经有了 Nimble 的源代码
  2. 我不希望从 Swift Package Manager 获得的显式 Nimble 版本与从 Quick 获得的隐式 Nimble 版本之间存在版本不匹配。

我会说这种行为是正确的,应该是可以预料的。 依赖关系管理器允许依赖关系作者使用适当的约束来指定他们的依赖关系,并且Quick的作者已经指定他们的公共目标Quick对 package Nimble及其任何目标没有任何依赖关系。 这为您提供了独立选择包QuickNimble的版本约束的灵活性,这是您所期望的,因为它们的作者告诉 SPM 它们是独立的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM