M1芯片Mac下Xcode构建Flutter应用报PhaseScriptExecution错误如何解决
操作存在的问题
- 你当前配置的排除架构规则为全局生效:排除arm64仅适用于iOS模拟器编译场景,iOS真机本身就基于arm64架构,全局排除后真机构建、归档时无法生成对应架构的编译产物,最终触发
Command PhaseScriptExecution failed with a nonzero exit code报错。 - 模拟器可正常构建是因为你通过Rosetta运行Xcode时,iOS模拟器运行的是x86_64架构,排除arm64刚好匹配模拟器的编译要求,因此不会出现问题。
解决步骤
- 修正Xcode排除架构配置
- 打开Xcode项目的Build Settings面板,找到
Excluded Architectures配置项 - 点击配置项左侧的展开箭头,拆分不同编译环境的配置:
- 仅在
Any iOS Simulator SDK选项下添加arm64排除规则 - 移除
Any iOS SDK等其他所有配置项下的arm64排除规则
- 仅在
- 打开Xcode项目的Build Settings面板,找到
- 同步Pod配置避免第三方库覆盖架构设置
- 打开项目ios目录下的
Podfile,在末尾添加如下配置:
- 打开项目ios目录下的
post_install do |installer| installer.pods_project.targets.each do |target| flutter_additional_ios_build_settings(target) target.build_configurations.each do |config| # 仅对iOS模拟器排除arm64架构 config.build_settings["EXCLUDED_ARCHS[sdk=iphonesimulator*]"] = "arm64" end end end
- 保存后在ios目录下执行
pod deintegrate && pod install重新生成Pods配置
- 确认基础编译配置
- 检查
Build Active Architecture Only配置:Debug模式设置为Yes,Release模式设置为No - 确认
Architectures配置项的值为默认的$(ARCHS_STANDARD),不要手动修改为仅x86_64
- 检查
- 清理缓存重新构建
- 项目根目录执行
flutter clean清理Flutter缓存 - Xcode中点击
Product > Clean Build Folder清理编译缓存,之后再进行真机构建或归档操作
- 项目根目录执行
内容的提问来源于stack exchange,提问作者dilusha_dasanayaka
相关产品推荐
相关产品推荐

