运行Flutter程序时xcode_backend.dart报空检查运算符错误
Flutter编译报错:Null check operator used on a null value (Xcode 15 + macOS Sonoma)
错误信息
Unhandled exception: Null check operator used on a null value #0 Context.embedFlutterFrameworks (file:///Users/mustafa/flutter/packages/flutter_tools/bin/xcode_backend.dart:235:68) #1 Context.run (file:///Users/mustafa/flutter/packages/flutter_tools/bin/xcode_backend.dart:59:9) #2 main (file:///Users/mustafa/flutter/packages/flutter_tools/bin/xcode_backend.dart:17:5) #3 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:295:33) #4 _RawReceivePort._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12) Command PhaseScriptExecution failed with a nonzero exit code
环境信息
- 设备:MacBook Air M1
- 系统:macOS Sonoma 14.0
- Xcode:15.0
- Flutter版本:Channel master, 3.16.0-6.0.pre.46
- 已尝试操作:清理Flutter缓存、更新Flutter、重新安装Podfile
解决方案
1. 切换到Flutter稳定版/beta版
master分支属于开发预览分支,存在Xcode 15适配bug的概率较高,切换到稳定版可快速解决问题:
flutter channel stable flutter upgrade
若稳定版仍有异常,可尝试beta版:
flutter channel beta flutter upgrade
2. 手动修复xcode_backend.dart的空检查问题
错误源于xcode_backend.dart第235行的空检查运算符!被用于null值,找到本地Flutter安装目录下的该文件(路径:/Users/mustafa/flutter/packages/flutter_tools/bin/xcode_backend.dart),修改对应代码:
- 定位到235行(通常是获取
FLUTTER_FRAMEWORK_DIR环境变量的语句),将强制解包的!替换为空安全处理,例如:
原代码:final flutterFrameworkDir = environment['FLUTTER_FRAMEWORK_DIR']!;
修改为:final flutterFrameworkDir = environment['FLUTTER_FRAMEWORK_DIR'] ?? ''; - 保存文件后重新编译项目。
3. 清理Xcode派生数据
Xcode的Derived Data缓存可能导致编译异常,清理步骤:
- 打开Xcode,点击顶部菜单栏
Xcode->Preferences - 切换到
Locations标签,点击Derived Data右侧的箭头打开文件夹 - 删除当前项目对应的文件夹,回到Xcode重新编译
4. 检查Xcode构建配置
确认Xcode中Flutter相关环境变量配置正确:
- 在Xcode中打开项目,选择主target
- 进入
Build Settings,搜索FLUTTER_FRAMEWORK_DIR - 确认路径指向本地Flutter安装目录下的
bin/cache/artifacts/engine/ios(对应iOS平台),若为空则手动填写完整路径。
内容的提问来源于stack exchange,提问作者Mustafa Ismailjee
相关产品推荐
相关产品推荐

