iOS中为Widget(Today Extension)安装Pods遇重复构建错误求助
解决iOS主应用与Today Extension重复安装Pods导致的编译冲突
嘿,这个问题我碰到过好几次啦!你遇到的「Multiple commands produce」错误,本质是因为主应用myapp和扩展myapp_extension都单独声明了Alamofire依赖,导致它们共同依赖的nanopb.framework被两个target分别处理,Xcode尝试两次把同一个框架嵌入主应用包,自然就冲突了。
下面是最靠谱的解决方案:
步骤1:修改Podfile的结构
把共用的Pods放到抽象目标里,给Extension设置只继承搜索路径,避免重复生成嵌入脚本。修改后的Podfile代码如下:
platform :ios, '9.0' use_frameworks! # 抽象目标用来管理所有target共用的Pods abstract_target 'SharedPods' do pod 'Alamofire', '~> 4.8.0' target 'myapp' do # 主应用正常继承所有Pod配置 end target 'myapp_extension' do # 扩展只继承Pod的搜索路径,不重复生成嵌入框架的脚本 inherit! :search_paths end end
步骤2:清理旧的Pod缓存
- 先删除项目目录下的
Podfile.lock文件和Pods文件夹 - 打开Xcode,点击菜单栏的
Product->Clean Build Folder(或者用快捷键Cmd+Shift+K) - 也可以手动删除错误提示里的DerivedData文件夹:
/Users/abc/Library/Developer/Xcode/DerivedData/myapp-hitzznvtnviylfcammkfaxjvlryg
步骤3:重新安装Pods
打开终端,进入项目目录,执行命令:
pod install
步骤4:重新编译项目
打开生成的.xcworkspace文件,点击编译按钮(或者Cmd+B),这时候应该就不会再出现重复命令的错误了。
原理说明:inherit! :search_paths让Extension target只获取Pods的头文件和库的搜索路径,不会生成自己的「Embed Pods Frameworks」脚本,这样就不会和主应用的脚本重复处理同一个依赖框架,从根源上解决了冲突问题。
内容的提问来源于stack exchange,提问作者Rohitax Rajguru
相关产品推荐
相关产品推荐

