Flutter 1.x升2.x iOS构建报PhaseScriptExecution无明确错误如何解决
Flutter 1.x升2.x iOS构建失败问题解决方案
该类构建失败与日志中出现的废弃API警告无关联,这类警告不会触发Xcode构建失败,真正的错误根源是PhaseScriptExecution阶段执行flutter assemble命令返回了非0退出码,Xcode默认截断了Dart编译阶段的错误日志,仅保留了最终执行失败的结果。
可能的原因
- 空安全适配未完成:Flutter 2.x默认启用空安全,若项目自有代码或引入的第三方依赖未完成空安全适配,会在Dart编译阶段报错,这类错误会被Xcode的大量警告覆盖,无法直接在构建日志中看到
- Podfile配置错误:当前Podfile的post_install钩子中直接删除了
IPHONEOS_DEPLOYMENT_TARGET配置,会导致部分依赖的iOS部署版本不一致,出现架构匹配失败问题 - 本地缓存损坏:Flutter SDK缓存、Pub依赖缓存或CocoaPods缓存损坏,会导致assemble阶段读取资源异常
- 命令参数异常:flutter assemble命令中的
DartDefines等参数存在未转义的特殊字符,会直接导致命令执行失败
排查解决步骤
- 直接执行flutter assemble命令查看完整错误:将排查到的flutter assemble命令直接在项目根目录的终端执行,即可看到完整的Dart编译错误日志,定位到具体的代码或依赖问题,这是排查该问题的核心步骤
- 修正Podfile配置:将post_install部分的代码替换为如下内容,统一iOS部署版本,避免架构匹配问题:
post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| # 统一设置为全局声明的10.0,不要删除该配置 config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '10.0' # 适配M1芯片的模拟器架构 config.build_settings['EXCLUDED_ARCHS[sdk=iphonesimulator*]'] = 'arm64' end end end
- 全量清理缓存重新构建:依次执行如下命令清理缓存后重试构建:
# 清理Flutter项目缓存 flutter clean # 删除iOS侧CocoaPods相关文件 rm -rf ios/Pods ios/Podfile.lock # 重新拉取Pub依赖 flutter pub get # 重新安装CocoaPods依赖 cd ios && pod install --repo-update && cd ..
- 检查依赖适配性:确认pubspec.yaml中所有第三方依赖的版本都已支持Flutter 2.x和空安全,若存在未适配的依赖,需升级到对应兼容版本
- 检查入口文件配置:确认指定的入口文件
lib/main_dev.dart不存在语法错误、未导入依赖或环境配置错误,多flavor项目需格外注意不同入口的配置一致性
- 检查入口文件配置:确认指定的入口文件
内容的提问来源于stack exchange,提问作者Javier Benitez
相关产品推荐
相关产品推荐

