如何创建聚合Pod整合现有子Pod,支持整体或单独安装指定子模块?
我刚好做过类似的Pod整合,这其实是CocoaPods里的subspecs特性,和SwifterSwift、PromiseKit的实现逻辑完全一致。下面一步步教你搞定:
步骤1:整理仓库结构
首先新建一个MyAppUtils仓库,把你原来两个Pod的代码按子模块目录拆分好,结构大概是这样:
MyAppUtils/ ├── AuthUtils/ │ ├── Sources/ # 原来AuthUtils的所有源码文件 │ └── Assets/ # 如果AuthUtils有图片、xib等资源就放这里 ├── AutoLayoutUtils/ │ ├── Sources/ # 原来AutoLayoutUtils的所有源码文件 │ └── Assets/ # 对应AutoLayoutUtils的资源 ├── LICENSE # 许可证文件(从原来的Pod里复制即可) └── MyAppUtils.podspec # 核心的Pod配置文件,后面重点写
步骤2:编写带Subspec的Podspec
这是实现“全量/按需安装”的关键,你需要在MyAppUtils.podspec里为每个子模块单独配置,同时让主Spec默认包含所有子模块。直接给你可复用的模板:
Pod::Spec.new do |s| # 主Pod的基础信息 s.name = "MyAppUtils" s.version = "1.0" s.summary = "我的通用工具集合,包含认证、自动布局等模块" s.homepage = "https://github.com/xxxxx/MyAppUtils" s.license = { :type => "MIT", :file => "LICENSE" } s.author = { "你的名字" => "你的邮箱" } s.source = { :git => "https://github.com/xxxxx/MyAppUtils.git", :tag => s.version.to_s } s.swift_version = "5.0" # 根据你的实际Swift版本调整 s.platform = :ios, "13.0" # 最低支持的iOS版本,和原来的Pod保持一致 # 子模块1:AuthUtils,对应原来的AuthUtils Pod s.subspec "AuthUtils" do |auth| auth.source_files = "AuthUtils/Sources/**/*.{swift,h,m}" # 如果AuthUtils有第三方依赖,比如Alamofire,在这里添加: # auth.dependency "Alamofire", "~> 5.0" # 如果有资源文件,放开下面的注释: # auth.resources = "AuthUtils/Assets/**/*" end # 子模块2:AutoLayoutUtils,对应原来的AutoLayoutUtils Pod s.subspec "AutoLayoutUtils" do |layout| layout.source_files = "AutoLayoutUtils/Sources/**/*.{swift,h,m}" # 同理添加AutoLayoutUtils的依赖或资源 end # 可选:如果主Pod本身有通用基础代码,比如全局工具类,可以在这里配置 # s.source_files = "MyAppUtils/Sources/**/*.{swift,h,m}" end
步骤3:验证并发布
- 本地验证:在仓库根目录执行命令,确保Podspec没有语法错误或路径问题:
pod lib lint MyAppUtils.podspec - 打Tag发布:和原来的Pod流程一致,给仓库打对应版本的Tag并推送到远程:
git tag 1.0 git push origin 1.0
步骤4:测试安装
现在就可以在项目里按需求安装了:
- 全量安装所有模块:
pod 'MyAppUtils', :git => 'https://github.com/xxxxx/MyAppUtils.git', :tag => '1.0' - 单独安装AuthUtils模块:
pod 'MyAppUtils/AuthUtils', :git => 'https://github.com/xxxxx/MyAppUtils.git', :tag => '1.0'
额外注意点
- 子模块之间如果有依赖关系(比如AutoLayoutUtils需要用到AuthUtils的某个类),可以在对应的subspec里添加
auth.dependency "MyAppUtils/AutoLayoutUtils"; - 后续更新子模块时,只需要修改对应subspec的内容,然后升级主Pod的版本号即可,不用单独维护多个仓库;
- 如果原来的Pod有单元测试,记得把测试代码也移到对应子模块的目录下,在subspec里配置
auth.test_spec。
内容的提问来源于stack exchange,提问作者Harry Blue
相关产品推荐
相关产品推荐

