如何将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
相关产品推荐
相关产品推荐

