You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多仓库iOS应用迁移SPM遇传递本地依赖不支持问题求解决方案

解决SPM远程包依赖本地子包的架构问题

你遇到的核心问题是:SPM不允许远程包(基于版本/修订号引用)依赖本地路径的子包,因为远程包需要具备独立拉取、构建的能力,本地路径依赖仅适用于本地开发场景。以下是三种可行的解决方案,适配你的多仓库架构:

方案一:将MultiFrameworks仓库内的子模块整合为同一SPM包的多产品

把UI、业务逻辑、网络层三个子包,配置成同一个Package.swift下的多个产品(Product),而非独立的本地包引用。这样整个MultiFrameworks作为单一远程包,内部子模块通过产品暴露,主App可按需引用:

  1. 调整MultiFrameworks仓库的Package.swift:
// swift-tools-version: 5.9
import PackageDescription

let package = Package(
    name: "MultiFrameworks",
    products: [
        .library(name: "UIFramework", targets: ["UIFramework"]),
        .library(name: "BusinessLogicFramework", targets: ["BusinessLogicFramework"]),
        .library(name: "NetworkFramework", targets: ["NetworkFramework"]),
    ],
    dependencies: [],
    targets: [
        .target(name: "UIFramework"),
        .target(name: "BusinessLogicFramework", dependencies: ["UIFramework"]),
        .target(name: "NetworkFramework", dependencies: ["BusinessLogicFramework"]),
    ]
)
  1. 主App的Package.swift中直接依赖远程仓库,并指定需要的子产品:
dependencies: [
    .package(url: "https://github.com/lalejzapata/MultiFrameworks", from: "1.0.0"),
],
targets: [
    .target(name: "MyMainApp", dependencies: [
        .product(name: "UIFramework", package: "MultiFrameworks"),
        .product(name: "NetworkFramework", package: "MultiFrameworks"),
    ]),
]

方案二:将子模块拆分为独立远程仓库,MultiFrameworks依赖远程子包

如果三个子模块需要完全独立维护,可以将每个子包(UI、业务、网络)单独部署为远程仓库,然后在MultiFrameworks的Package.swift中通过远程URL依赖这些子包:

// MultiFrameworks的Package.swift
dependencies: [
    .package(url: "https://github.com/lalejzapata/UIFramework", from: "1.0.0"),
    .package(url: "https://github.com/lalejzapata/BusinessLogicFramework", from: "1.0.0"),
    .package(url: "https://github.com/lalejzapata/NetworkFramework", from: "1.0.0"),
],

主App可选择直接依赖MultiFrameworks包(一次性引入所有子模块),或单独依赖需要的子包。

方案三:本地开发用路径依赖,发布切换为远程依赖

适合本地调试阶段,主App通过path引用本地的MultiFrameworks包,支持其内部的本地子包依赖:

// 本地开发时的主App Package.swift
.package(path: "../MultiFrameworks"),

当需要发布或共享代码时,确保MultiFrameworks已调整为方案一或方案二的结构,再切换为远程URL依赖。

内容的提问来源于stack exchange,提问作者zgluis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:57:43