Mac Mini M1设备上使用Flutter构建iOS应用时遭遇Multiple commands produce错误求助
解决Flutter iOS打包时Reachability.framework冲突问题
我之前帮不少开发者处理过这类问题,在M1芯片的Mac上用Flutter打包iOS应用时出现这个错误,本质是两个不同的Target(Reachability和ReachabilitySwift)都试图生成同名的Reachability.framework到同一个目录,导致Xcode的命令执行冲突。下面是几个亲测有效的解决方法:
方法一:修改Target的输出路径,避免冲突
- 打开Flutter项目iOS目录下的
Runner.xcworkspace(一定要打开工作空间,别用单个.xcodeproj文件) - 在Xcode左侧导航栏找到
Reachability和ReachabilitySwift这两个Target - 分别选中它们,切换到Build Settings标签页
- 在搜索框输入
Per-configuration Build Products Path,定位到这个配置项 - 给两个Target设置不同的输出路径:比如给
Reachability设为$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/Reachability,给ReachabilitySwift设为$(BUILD_DIR)/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)/ReachabilitySwift - 保存设置后,重新执行打包命令即可
方法二:排查并移除重复的依赖
如果你的项目里同时引入了OC版本的Reachability和Swift版本的ReachabilitySwift,大概率是Flutter插件的依赖重复导致的:
- 打开项目根目录的
pubspec.yaml,检查所有依赖的插件,看看是不是有两个插件分别依赖了这两个库 - 找到重复的根源,移除其中一个不需要的依赖(比如如果项目用Swift开发,优先保留
ReachabilitySwift) - 执行
flutter pub get更新依赖,然后重新打包
方法三:清理缓存,消除遗留冲突
有时候Xcode的DerivedData缓存会残留旧的构建文件,导致冲突:
- 先在终端执行
flutter clean清理Flutter项目的缓存 - 回到Xcode,点击菜单栏的
Product->Clean Build Folder(快捷键Cmd+Shift+K) - 手动删除DerivedData目录:就是错误提示里的
/Users/***/Library/Developer/Xcode/DerivedData/Runner-btwffzljdlaqbxbugphdlprtatcr/,直接删掉整个文件夹 - 重新执行
flutter build ios或者在Xcode里尝试打包
另外,M1芯片的Mac要注意架构兼容性,你可以检查下Xcode的Build Settings里的Excluded Architectures,在Debug模式下排除arm64(不过这一步更多是解决运行时的架构问题,和当前冲突无关,但可以作为辅助检查项)
内容的提问来源于stack exchange,提问作者nitin_j_sun
相关产品推荐
相关产品推荐

