如何为GitHub monorepo中存放的Cocoapod配置podspec的source属性
Monorepo托管CocoaPod的podspec source配置规范
你当前使用的专属前缀tag配置是官方推荐的主流方案,完全可用,只需要补充配套的子目录路径配置即可。
CocoaPods的source属性仅用于指定Git仓库地址和拉取的版本锚点(tag/ commit sha/ branch),不支持直接指定仓库子目录,所有Pod相关的源码、资源路径都需要基于仓库根目录写相对路径。
完整配置示例
针对你的仓库结构,配套的完整podspec配置参考如下:
# source配置和你当前的写法一致,使用Pod专属前缀的tag区分不同组件的版本 s.source = { :git => 'https://github.com/myrepo.git' , :tag => "My-iOS-Pod-#{s.version}" } # 所有资源路径都基于仓库根目录,补全Pod所在的子路径 s.source_files = 'shared/ios/MyCocoaPod/Classes/**/*.{h,m,swift}' s.public_header_files = 'shared/ios/MyCocoaPod/Classes/**/*.h' s.resource_bundles = { 'MyCocoaPod' => ['shared/ios/MyCocoaPod/Assets/**/*'] } # 如果依赖同仓库内的其他内部Pod,也需要指定对应相对路径 # s.dependency 'OtherInternalPod', :path => 'shared/ios/OtherInternalPod'
可选的其他配置方案
如果你的Monorepo内所有iOS组件统一版本发版,可以不用组件专属前缀tag,直接用统一版本tag即可:
# 所有iOS组件共用同一个发版tag,比如ios-v1.2.0 s.source = { :git => 'https://github.com/myrepo.git' , :tag => "ios-v#{s.version}" }
注意事项
- 发版打tag时,需确保对应tag的提交中,Pod子目录下的代码和当前版本匹配,避免版本不一致问题
- 生产环境发版尽量使用固定tag或commit sha作为版本锚点,不推荐使用动态branch,保证版本可复现
- 如果你的Pod要发布到公共CocoaPods仓库或私有Spec仓库,需确保Git仓库的权限配置正确,外部可以正常拉取对应tag的代码
内容的提问来源于stack exchange,提问作者johnborges
相关产品推荐
相关产品推荐

