Flutter集成firebase_crashlytics后Xcode编译报错如何解决?
以下是针对你遇到的Command PhaseScriptExecution failed with a nonzero exit code错误的几种排查和解决方向:
修复脚本权限
找到Xcode项目中[firebase_crashlytics] Crashlytics Upload Symbols对应的脚本文件,在终端执行chmod +x [脚本完整路径],赋予其可执行权限;或者右键脚本文件选择「显示简介」,确保「共享与权限」中所有人拥有读写权限。明确指定GoogleService-Info.plist路径
打开Xcode的「Build Phases」面板,找到[firebase_crashlytics] Crashlytics Upload Symbols脚本,修改其中的GOOGLE_SERVICE_INFO_PLIST变量,直接写死正确的文件路径,比如"${PROJECT_DIR}/Runner/GoogleService-Info.plist",避免路径解析错误。更新Firebase依赖版本
执行flutter pub upgrade firebase_crashlytics firebase_core,将Firebase相关包更新到最新版本,新版本通常会修复脚本兼容问题。清理构建缓存
- 执行
flutter clean清理Flutter项目缓存 - 打开Xcode,通过「Preferences -> Locations」找到Derived Data目录,删除当前项目的缓存文件夹
- 重新执行
flutter pub get后,再尝试编译项目
- 执行
检查Xcode架构配置
进入Xcode项目的「Build Settings」,确认Architectures设置为Standard Architectures (arm64, x86_64),Build Active Architecture Only在Debug模式下设为Yes,Release模式设为No,避免架构不兼容导致的符号上传失败。手动上传符号文件(临时方案)
如果自动上传始终失败,可以手动上传dSYM文件:- 在Xcode的「Window -> Organizer」中找到项目归档文件,右键选择「显示在访达」
- 右键归档文件选择「显示包内容」,找到
dSYMs文件夹 - 在终端执行命令:
替换其中的路径为你项目的实际路径。${PODS_ROOT}/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs
内容的提问来源于stack exchange,提问作者Hyejung

