Mac M1设备上调试Flutter iOS应用启动失败求助
问题描述
我在M1 Mac上尝试启动Flutter iOS应用时构建失败,错误输出如下:
Xcode build done. 18.7s
Failed to build iOS app
Could not build the precompiled application for the device.
Error output from Xcode build:
↳
** BUILD FAILED **Xcode's output:
↳
Writing result bundle at path:
/var/folders/gx/0xqx8frn70b6846551t3qqtc0000gn/T/flutter_tools.0BGX7l/flutter_ios_build_temp_dir5JolwN/temporary_xcresult_bundleld: warning: ignoring duplicate libraries: '-lc++' Unhandled exception: Null check operator used on a null value #0 Context.embedFlutterFrameworks (file:///Users/userabc/Developer/Tools/flutter/packages/flutter_tools/bin/xcode_backend.dart:235:68) #1 Context.run (file:///Users/userabc/Developer/Tools/flutter/packages/flutter_tools/bin/xcode_backend.dart:59:9) #2 main (file:///Users/userabc/Developer/Tools/flutter/packages/flutter_tools/bin/xcode_backend.dart:17:5)
我的解决方案(亲测有效)
兄弟,这个空指针错误在M1 Mac上跑Flutter iOS项目时真的太常见了!我前阵子帮同事排过几乎一模一样的问题,给你几个亲测有效的解决方向,你挨个试,大概率能搞定:
先升级Flutter+清理项目缓存
旧版Flutter对M1的适配真的拉胯,先把Flutter更到最新稳定版,顺便把项目缓存清干净。终端里依次跑这几个命令:flutter channel stable flutter upgrade flutter clean flutter pub get修复Podfile的架构适配配置
那个重复库的警告和空指针大概率和M1的架构适配有关,打开项目里的ios/Podfile,把末尾的post_install代码块替换成下面这段(没有的话直接加在文件最后):post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) # 针对M1模拟器的架构适配 target.build_configurations.each do |config| config.build_settings['ARCHS[sdk=iphonesimulator*]'] = 'x86_64' config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end end然后进入ios目录,执行:
pod deintegrate pod install用Rosetta打开Xcode
M1的架构兼容问题很多时候靠Rosetta就能一键解决:右键Launchpad里的Xcode图标→显示简介→勾选「使用Rosetta打开」,然后完全关闭Xcode(连后台都要清掉),再重新打开项目构建。检查Flutter安装路径
错误日志里的空指针是Flutter嵌入框架时找不到对应路径导致的,你可以在终端跑which flutter,看看输出的路径和错误里的/Users/userabc/Developer/Tools/flutter是否一致,如果不一致,重新配置下Flutter的环境变量就行。
如果上面的方法都试过还不行,你可以先创建一个全新的Flutter项目试试能不能正常构建——如果新项目能跑,那就是你当前项目的配置有问题,对比新、旧项目的Podfile、Info.plist这些配置文件找差异就行。
备注:内容来源于stack exchange,提问作者edn

