Swift 包管理器传递本地依赖 - 包依赖于本地包,但不支持

问题描述 投票:0回答:1

我有一个 iOS 多存储库应用程序,它使用 cocoapods 来同步多个框架,我正在尝试迁移到 swift 包管理器,无论我在尝试连接所有依赖项时遇到问题,这是我的架构:

我的应用程序位于一个存储库中,其余包位于不同的存储库中,该包是一个功能模块,在内部模块化以分离 UI,业务逻辑和网络层,它们每个都是不同的包,这里是更好地解释它的图表:

Architecture diagram

由于 MultiFrameWorkPackage 依赖于其他框架,我需要在本地引用它,但是当我尝试从 MyApp.xcodeproj 远程获取 MultiFrameWorkPackage 时,我收到以下错误:

使用基于修订的版本需要包“multiframeworks” 要求,它取决于本地包“frameworka”,这不是 支持

是否有任何解决方法可以通过 SPM 实现这种架构?

以下是代码示例,您甚至可以尝试运行它:

回购1: https://github.com/lalejzapata/MyMainApp

回购2: https://github.com/lalejzapata/MultiFrameworks

ios swift xcode swift-package-manager
1个回答
0
投票

终于成功了,一开始我想要不同的 Package.swift 文件并将它们作为单独的包同步,最终我只有 1 个 Package.swift 来同步所有文件和目标,这里有一些关键点,以及最终的 Package .swift 文件:

  • 当您有许多嵌套文件夹时,请确保它们的名称与您的包/目标不同,否则 xcode 可能会忽略它们,ej,避免 -> FrameworkA/FrameworkA/MyFile.swift。
  • 保持路径简单,因为不允许在包的根目录之外有引用,例如
    path: ../FrameworkX
  • 查看发布的存储库以获取完整的工作示例。

.

let package = Package(
name: "MultiFrameworksPackage",
products: [
    .library(
        name: "MultiFrameworksPackage",
        targets: ["MultiFrameworks", "FrameworkA", "FrameworkB"]
    )],
targets: [
    .target(
        name: "MultiFrameworks",
        dependencies: [
            "FrameworkA"
        ],
        path: "Sources"
    ),
    .target(
        name: "FrameworkA",
        dependencies: [
            "FrameworkB"
        ],
        path: "FrameworkA"
    ),
    .target(
        name: "FrameworkB",
        dependencies: [
        ],
        path: "FrameworkB"
    )
]

© www.soinside.com 2019 - 2024. All rights reserved.