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

如何将Swift SPM包拆分为多个可独立导入的子模块

问题根因

你的配置存在两个核心问题:

  • 拼写错误:你将Networking误写为Newtorking(t和e顺序颠倒),target名称和路径都存在该拼写错误,导致SPM无法匹配到对应目录,配置自然无法生效
  • 产品配置不符合按需导入要求:你当前仅声明了一个名为MyPackage的聚合库,引入该库时会同时导入两个模块,无法实现按需分别导入的需求

正确配置方案

首先确认你的Sources目录结构和描述一致:

Sources
├── Networking
│   └── 你的网络相关代码文件
└── Widgets
    └── 你的UI组件相关代码文件

修改Package.swift内容如下:

let package = Package(
    name: "MyPackage",
    platforms: [
        .iOS(.v14)
    ],
    products: [
        // 单独导出Networking库,支持按需引入
        .library(
            name: "MyPackageNetworking",
            targets: ["MyPackageNetworking"]),
        // 单独导出Widgets库,支持按需引入
        .library(
            name: "MyPackageWidgets",
            targets: ["MyPackageWidgets"]),
        // 如果需要保留原有聚合库,一次性导入所有模块,可保留下方配置
        // .library(
        //     name: "MyPackage",
        //     targets: ["MyPackageNetworking", "MyPackageWidgets"]),
    ],
    targets: [
        .target(
            name: "MyPackageNetworking",
            path: "Sources/Networking"),
        .target(
            name: "MyPackageWidgets",
            path: "Sources/Widgets")
    ]
)

验证说明

配置修改完成后:

  • 项目中引入该SPM依赖后,即可分别import MyPackageNetworking和import MyPackageWidgets,两个模块完全独立,不会导入冗余代码
  • 如果两个模块之间存在依赖关系,可在对应target的dependencies参数中添加关联,比如Widgets需要依赖Networking时,将Widgets的target配置改为.target(name: "MyPackageWidgets", dependencies: ["MyPackageNetworking"], path: "Sources/Widgets")即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 15:36:00