Swift包管理器,基于目标的依赖关系。

8

我正在尝试基于SPM获取依赖目标,我在这里定义了Package.swift

enter image description here

所以我在包依赖项中定义了RxSwift,但它仅在目标ReCaptchaRx中使用,而不是在目标ReCaptcha中使用。

我期望发生的事情:

如果我选择只选择一个没有Rx的目标,我希望它只获取ReCaptcha依赖项并忽略Rx

enter image description here

实际发生了什么:

只导入ReCaptcha后,我得到了已解决但无法使用的软件包。如果我在导入窗口中选择ReCaptchaRx,则会得到可以使用的Rx,这很好。但为什么在这种情况下SPM甚至还要获取和解决RxSwift呢?

enter image description here

问题

为什么Xcode会在没有依赖关系的目标上解析RxSwift?这可以被防止吗?我希望它的行为与AppSwizzle在这个例子中类似,如果目标没有被使用,就不会被解析。

源代码:

这是一个开源库,可以在此处找到: https://github.com/JakubMazur/ReCaptcha/blob/swift-package-manager/Package.swift

如果您想在SPM中检出此代码将从https://github.com/JakubMazur/ReCaptcha分支swift-package-manager解析包。

1个回答

6

实际上,Swift Package Manager 还不够复杂以至于不能解决所有传递依赖关系,即使它们仅由你没有依赖的目标使用。

虽然所有传递依赖都显示在 Xcode 侧栏的包依赖项列表中可能会让人感到混乱,但我并不认为这意味着你的演示应用程序实际上会随那些未使用的目标/依赖项一起发布。它只是指它们在侧边栏中显示,并已检出到缓存目录中。

稍微有些不同:截至 SPM 5.2,SPM 已经足够聪明,可以不下载仅由您的依赖项的测试目标使用的传递依赖项。也许将来会改进以涵盖您所询问的情况。


1
谢谢,看起来这还没有实现。根据你的回答中提供的链接,这是一个未解决的问题:https://bugs.swift.org/browse/SR-8658 - Jakub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接