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

Jak*_*kub 8 xcode swift swift-package-manager

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

在此输入图像描述

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

我预期会发生什么:

如果我选择仅选择一个目标而不是Rx我期望的,它只会获取ReCaptcha依赖项并忽略Rx.

在此输入图像描述

实际发生的情况:

仅导入后,ReCaptcha我得到的包已解析但无法使用,如果我在导入窗口中选择,ReCaptchaRx我将得到预期的可用 Rx,这很好。但为什么RxSwift在这种情况下 SPM 还要获取并解析呢?

在此输入图像描述

问题

为什么 Xcode 解析RxSwift不依赖于它的目标?这可以预防吗?我期望与AppSwizzle此示例中类似的行为,即如果不使用目标则不会得到解决。

源代码:

这是一个开源库: https://github.com/JakubMazur/ReCaptcha/blob/swift-package-manager/Package.swift

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

小智 6

基本上,Swift 包管理器还不够复杂,无法解决所有传递依赖项,即使它们仅由您不依赖的目标使用。

虽然 Xcode 侧边栏包依赖项列表中显示的所有传递依赖项很混乱,但我不认为这意味着您的演示应用程序实际上会附带任何未使用的目标/依赖项。这只是混乱,因为它们显示在侧边栏中并且在缓存目录中检出。

略有不同:从 SPM 5.2 开始,SPM足够智能,不会下载仅由依赖项的测试目标使用的传递依赖项。也许有一天,这会得到改进,以涵盖您所询问的情况。