如何在Xcode工作空间的所有子项目中共享Pods并支持后续新增项目
解决方案
你遇到的报错是因为CocoaPods解析Podfile时要求顶层必须指定默认项目或工作空间,你原来的配置中workspace和project声明都放在了target循环内部,CocoaPods在执行循环逻辑前的校验阶段就会因为找不到全局项目配置抛出错误。
修改后的Podfile配置
# 顶层声明工作空间,Podfile需放在MyApp根目录和MyApp.xcworkspace同级 workspace 'MyApp' use_frameworks! def shared_pods pod 'Pod1' pod 'Pod2' end # 递归遍历所有非Pods目录下的xcodeproj Dir["**/*.xcodeproj"].select { |project_path| !project_path.start_with?('Pods') && !project_path.include?('/Pods/') }.each do |project_path| target_name = File.basename(project_path, ".xcodeproj") # 主Target配置 target target_name do project project_path shared_pods # 测试Target嵌套声明,自动继承主Target的project配置 target "#{target_name}Tests" do inherit! :search_paths end end end
配置说明
- 把
workspace声明提到顶层,CocoaPods校验阶段就能识别工作空间配置,不会再报找不到项目的错误 - 测试Target嵌套在对应主Target内部,会自动继承主Target的
project配置,不需要重复声明,也避免了测试Target找不到对应项目的问题 - 过滤条件额外增加了
!project_path.include?('/Pods/'),避免遍历到子目录下的Pods相关项目文件
验证步骤
- 将修改后的Podfile放在MyApp根目录(和MyApp.xcworkspace同层级)
- 执行
pod install即可完成所有现有项目的Pods集成 - 后续新增项目后不需要修改Podfile,直接重新执行
pod install就会自动识别新增项目并集成共享依赖
内容的提问来源于stack exchange,提问作者Soumya Mahunt
相关产品推荐
相关产品推荐

