【问题标题】:Swift Package Manager, target based dependencySwift 包管理器,基于目标的依赖
【发布时间】:2021-09-25 06:10:52
【问题描述】:

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

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

我预期会发生什么:

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

实际发生了什么:

在仅导入 ReCaptcha 后,我正在解决包但无法使用,如果我在导入窗口 ReCaptchaRx 上选择,我会得到预期的可用 Rx,这很好。但是为什么在这种情况下 SPM 还要获取和解析 RxSwift

问题

为什么 Xcode 在不依赖于它的目标上解析 RxSwift?可以预防吗?我希望在此示例中出现与 AppSwizzle 类似的行为,即如果未使用目标,则不会被解析。

源码:

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

如果您想在 SPM 中签出此内容,则会在分支 swift-package-manager 上解析来自 https://github.com/JakubMazur/ReCaptcha 的包

【问题讨论】:

    标签: swift xcode swift-package-manager


    【解决方案1】:

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

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

    略有不同:as of SPM 5.2, SPM is smart enough to not download transitive dependencies only used by your dependencies' test targets。也许有一天这会得到改进,以涵盖您询问的情况。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-10
    • 2020-08-11
    • 2022-08-12
    • 2016-03-20
    • 2021-03-21
    • 2018-09-23
    • 2015-02-01
    • 2017-09-30
    相关资源
    最近更新 更多