【问题标题】:Solving dependency management issues in Xcode解决 Xcode 中的依赖管理问题
【发布时间】:2021-07-23 16:52:18
【问题描述】:

使用最新的 Xcode (12.5) 我遇到了依赖管理问题

我的应用程序结构如下(至少有冲突的部分):

+ MainApp
+-- Shared Framework
| +- Dynamic SPM Package1 (do not embed)
|   +- Other package needed for that SPM
|
+-  Dynamic SPM Package1 (embed and sign)
    +- Other package needed for that SPM

所以我的应用程序使用了一个框架。该框架本身使用我的一个 swift 包,它本身依赖于另一个。 我的主应用程序中也使用了那个 swift 包,并且在那里嵌入和签名。 在我的框架中,它被标记为No not embed

所以现在当我构建我的产品并检查它时,在它的框架文件夹中,我看到了我的共享框架。在它的 frameworks 文件夹中的共享框架内,我看不到 Dynamic SPM Package1 这很好,因为我告诉 Xcode 不要嵌入......很好......但我可以看到,是该 SPM 所需的另一个包。不好...为什么它在那里,当需要它的框架也没有嵌入时?

我怎样才能告诉 Xcode 不要这样做? 再次......与以前版本的 Xcode (12.4) 一起工作。所以那里似乎发生了变化......?!?

【问题讨论】:

    标签: ios swift xcode swift-package-manager


    【解决方案1】:

    如果你控制了所有的框架和包,我认为你可以通过将你的 Swift Package 产品设置为.dynamic 库来解决这个问题: https://docs.swift.org/package-manager/PackageDescription/PackageDescription.html#product

    确保在重新构建之前执行删除派生数据、重置 SPM 缓存和更新到最新包版​​本的常规操作。

    在此屏幕截图中,第一个包 (NYPLUtilities) 指定了 .dynamic 产品:

    如果这些其他包中的任何一个是第三方依赖项(因此如果没有分叉,您就无法真正编辑 Package 产品定义,例如上面屏幕截图中的 PureLayout),那么它会更复杂。如果 Package 没有明确指定 .dynamic 产品,则 Xcode 12/13.1 在将其添加到 Xcode 项目时似乎总是将其嵌入,即使官方 SPM 文档指出:

    /// A library's product can either be statically or dynamically linked.
    /// If possible, don't declare the type of library explicitly to let 
    /// the Swift Package Manager choose between static or dynamic linking based
    /// on the preference of the package's consumer.
    

    我找到了 2 个解决方法:

    1. 创建一个包含所有您无法控制的 Swift 包的 shell 框架目标。动态链接您的应用程序和其他框架(依赖于这些框架)。更多信息在这里:https://forums.swift.org/t/how-to-link-a-swift-package-as-dynamic/32062
    2. 手动修改Xcode工程,去掉embed阶段但保留link阶段:https://forums.swift.org/t/is-this-an-xcode-bug-or-somehow-related-to-spm/33987/3

    希望 Apple 将在未来版本的 Xcode 中解决此问题。

    【讨论】:

      猜你喜欢
      • 2019-06-07
      • 2023-02-21
      • 1970-01-01
      • 1970-01-01
      • 2015-12-13
      • 2021-03-13
      • 1970-01-01
      • 2015-05-01
      • 1970-01-01
      相关资源
      最近更新 更多