You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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_discovery
  • multi_image_picker
  • flare_flutter

内容的提问来源于stack exchange,提问作者Ale TheFe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:36:27