M1 Max Mac上Flutter编译报错:Command PhaseScriptExecution失败
Flutter编译失败(M1 Max Mac迁移后)
问题描述
从Intel Mac更换为M1 Max Mac后,Flutter应用无法编译,仅抛出无详细信息的异常,Xcode日志如下:
仅显示最近的错误 PhaseScriptExecution Run\ Script /Users/alessandrodefendenti/Library/Developer/Xcode/DerivedData/Runner-deveoduanwnjibbunuscrmjquxnr/Build/Intermediates.noindex/Runner.build/Debug-iphoneos/Runner.build/Script-9740EEB61CF901F6004384FC.sh(来自项目'Runner'的目标'Runner') cd /Users/alessandrodefendenti/Projects/Flutter/winefriends/ios *** 此处为导出内容 *** export variant\=normal /bin/sh -c /Users/alessandrodefendenti/Library/Developer/Xcode/DerivedData/Runner-deveoduanwnjibbunuscrmjquxnr/Build/Intermediates.noindex/Runner.build/Debug-iphoneos/Runner.build/Script-9740EEB61CF901F6004384FC.sh /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/feature_discovery-0.14.1/lib/src/widgets/layout.dart:92:20: 警告:空安全操作符'!'的操作数类型为'WidgetsBinding',该类型不包含空值。 - 'WidgetsBinding' 来自 'package:flutter/src/widgets/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/widgets/binding.dart'). WidgetsBinding.instance!.addPostFrameCallback((_) { ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/feature_discovery-0.14.1/lib/src/widgets/layout.dart:112:20: 警告:空安全操作符'!'的操作数类型为'WidgetsBinding',该类型不包含空值。 - 'WidgetsBinding' 来自 'package:flutter/src/widgets/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/widgets/binding.dart'). WidgetsBinding.instance!.addPostFrameCallback((_) { ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/multi_image_picker-4.8.01/lib/src/asset.dart:93:21: 警告:空安全操作符'!'的操作数类型为'ServicesBinding',该类型不包含空值。 - 'ServicesBinding' 来自 'package:flutter/src/services/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/services/binding.dart'). ServicesBinding.instance!.defaultBinaryMessenger ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/multi_image_picker-4.8.01/lib/src/asset.dart:96:23: 警告:空安全操作符'!'的操作数类型为'ServicesBinding',该类型不包含空值。 - 'ServicesBinding' 来自 'package:flutter/src/services/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/services/binding.dart'). ServicesBinding.instance!.defaultBinaryMessenger ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/multi_image_picker-4.8.01/lib/src/asset.dart:122:21: 警告:空安全操作符'!'的操作数类型为'ServicesBinding',该类型不包含空值。 - 'ServicesBinding' 来自 'package:flutter/src/services/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/services/binding.dart'). ServicesBinding.instance!.defaultBinaryMessenger ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/multi_image_picker-4.8.01/lib/src/asset.dart:125:23: 警告:空安全操作符'!'的操作数类型为'ServicesBinding',该类型不包含空值。 - 'ServicesBinding' 来自 'package:flutter/src/services/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/services/binding.dart'). ServicesBinding.instance!.defaultBinaryMessenger ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/win32-2.3.3/lib/src/structs.g.dart:661:31: 错误:未找到成员'UnicodeChar'。 int get UnicodeChar => Char.UnicodeChar; ^^^^^^^^^^^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/win32-2.3.3/lib/src/structs.g.dart:662:38: 错误:未找到设置器'UnicodeChar'。 set UnicodeChar(int value) => Char.UnicodeChar = value; ^^^^^^^^^^^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/win32-2.3.3/lib/src/structs.g.dart:664:29: 错误:未找到成员'AsciiChar'。 int get AsciiChar => Char.AsciiChar; ^^^^^^^^^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/win32-2.3.3/lib/src/structs.g.dart:665:36: 错误:未找到设置器'AsciiChar'。 set AsciiChar(int value) => Char.AsciiChar = value; ^^^^^^^^^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/flare_flutter-3.0.2/lib/flare_render_box.dart:167:26: 警告:空安全操作符'?.'的操作数类型为'SchedulerBinding',该类型不包含空值。 - 'SchedulerBinding' 来自 'package:flutter/src/scheduler/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/scheduler/binding.dart'). SchedulerBinding.instance?.cancelFrameCallbackWithId(_frameCallbackID); ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/flare_flutter-3.0.2/lib/flare_render_box.dart:170:28: 警告:空安全操作符'?.'的操作数类型为'SchedulerBinding',该类型不包含空值。 - 'SchedulerBinding' 来自 'package:flutter/src/scheduler/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/scheduler/binding.dart'). SchedulerBinding.instance?.scheduleFrameCallback(_beginFrame) ?? -1; ^ /Applications/flutter/.pub-cache/hosted/pub.dartlang.org/flare_flutter-3.0.2/lib/flare_render_box.dart:272:26: 警告:空安全操作符'?.'的操作数类型为'SchedulerBinding',该类型不包含空值。 - 'SchedulerBinding' 来自 'package:flutter/src/scheduler/binding.dart' ('/Applications/flutter/packages/flutter/lib/src/scheduler/binding.dart'). SchedulerBinding.instance?.cancelFrameCallbackWithId(_frameCallbackID); ^ 打包 /Users/alessandrodefendenti/Projects/Flutter/winefriends 失败。 Command PhaseScriptExecution failed with a nonzero exit code
核心问题定位
日志中的致命错误来自win32-2.3.3包,该版本API与当前Dart/Flutter版本不兼容,导致UnicodeChar和AsciiChar成员无法找到;其余为空安全语法警告,不影响编译,但存在版本兼容隐患。M1架构适配问题也可能加剧编译失败。
解决方案
1. 升级win32依赖包
打开项目根目录的pubspec.yaml,找到win32依赖项,将版本更新为兼容稳定版(比如>=5.0.0),执行:
flutter pub upgrade flutter pub get
2. 清理缓存与DerivedData
# 清理Flutter项目缓存 flutter clean # 删除Xcode派生数据 rm -rf ~/Library/Developer/Xcode/DerivedData
之后重新打开Xcode或执行flutter run。
3. M1 Max架构适配
- 打开Xcode,选择
Runner目标,进入Build Settings:- 找到
Architectures,设置为Standard Architectures (arm64, x86_64)或仅arm64 - 找到
Excluded Architectures,确保未勾选arm64
- 找到
- 若仍失败,右键Xcode图标→
显示简介→勾选使用Rosetta打开,重启Xcode后重新编译。
4. 修复依赖警告(可选但推荐)
升级以下依赖包到支持空安全的最新版本,避免后续版本冲突:
feature_discoverymulti_image_pickerflare_flutter
内容的提问来源于stack exchange,提问作者Ale TheFe
相关产品推荐
相关产品推荐

