如何在父项目的子项目中复用父项目已安装的CocoaPod依赖
CocoaPods 父项目依赖共享给内嵌子项目解决方案
现有两种可行方案,不需要调整现有项目结构:
方案1:调整Podfile嵌套规则(最推荐)
该方案不需要修改项目原有配置,仅调整Podfile规则即可实现依赖共享,操作步骤如下:
- 打开父项目A根目录下的Podfile,将子项目B的target嵌套到父项目A的target作用域内,添加
inherit! :search_paths核心配置,示例配置如下:
platform :ios, '13.0' # 替换为你项目支持的最低系统版本 use_frameworks! target 'ProjectA' do # 替换为父项目A的实际target名称 # 你已经为父项目添加的所有依赖保持不变 pod 'AFNetworking' pod 'SDWebImage' # 其余原有依赖无需修改 target 'ProjectB' do # 替换为子项目B的实际target名称 inherit! :search_paths # 核心配置:继承父target的所有依赖搜索路径 # 子项目如有单独依赖可以在此处额外添加,无单独依赖则留空即可 end end
- 配置完成后,在父项目根目录执行
pod install,执行完成后打开生成的.xcworkspace文件,子项目B就可以直接引用父项目已经安装的所有Pod依赖。
方案2:手动配置子项目编译参数
如果不想修改Podfile,可以手动修改子项目的编译配置实现共享:
- 打开子项目B的target配置页,切换到Build Settings标签
- 找到
Header Search Paths配置项,添加$(SRCROOT)/Pods/Headers/Public,路径根据你项目中Pods目录的相对位置调整,搜索模式设置为递归 - 找到
Other Linker Flags配置项,添加$(inherited)参数,继承父项目的链接配置 - 配置完成后重新编译项目即可生效,缺点是后续新增Pod依赖时如果涉及路径变更需要手动同步配置。
注意事项
- 子项目B的最低支持iOS版本需要和Podfile中指定的平台版本保持一致,避免出现版本兼容报错
- 如果是Swift项目,需要确保Podfile中开启
use_frameworks!,如果是纯OC项目可以使用use_frameworks! :linkage => :static降低包体积。
内容的提问来源于stack exchange,提问作者Adeel Ur Rehman
相关产品推荐
相关产品推荐

