Flutter多环境配置下集成Firebase Crashlytics遇编译错误求助
解决多Flavor Flutter项目集成Firebase Crashlytics的dSYM上传与编译错误问题
一、修复'Flutter/Flutter.h'文件找不到的编译错误
- 调整Run Script执行顺序
打开Xcode进入项目Target -> Build Phases,确保Crashlytics上传dSYM脚本位于**"Embed Frameworks"阶段之后**,且在Flutter默认的"Run Script"阶段(处理Flutter打包的脚本)之后。若脚本排在编译相关阶段之前,会导致Flutter框架未被引入就执行脚本,触发头文件找不到的错误。 - 检查脚本环境变量
避免在脚本中修改HEADER_SEARCH_PATHS、FRAMEWORK_SEARCH_PATHS这类影响Xcode框架查找的变量;使用$FIREBASE_PLIST变量时,仅用于指定Firebase配置文件,不要覆盖其他关键路径变量。 - 验证Flutter框架路径配置
进入Target -> Build Settings:- Framework Search Paths需包含
$(inherited)和$(PROJECT_DIR)/Flutter - Header Search Paths需包含
$(inherited)和$(PROJECT_DIR)/Flutter
- Framework Search Paths需包含
二、正确配置多Flavor下的Crashlytics dSYM上传
- 为每个Flavor配置独立Firebase文件
为dev、prod、profile分别下载对应配置文件(如GoogleService-Info-Dev.plist、GoogleService-Info-Prod.plist),添加到Xcode项目后,在Target Membership中仅勾选对应Build Configuration(如Dev对应Debug,Prod对应Release/Profile)。 - 配置Build Settings中的FIREBASE_PLIST变量
进入Target -> Build Settings,点击"+"添加用户自定义设置FIREBASE_PLIST,为不同Build Configuration赋值:- Debug:
GoogleService-Info-Dev.plist - Release:
GoogleService-Info-Prod.plist - Profile:
GoogleService-Info-Prod.plist(或对应Profile的配置文件)
- Debug:
- 修改上传dSYM脚本
使用以下适配多Flavor的脚本,替换原有脚本:
若配置文件不在项目根目录,替换"${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${PROJECT_DIR}/${FIREBASE_PLIST}" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"${PROJECT_DIR}为实际相对路径。同时在脚本的"Input Files"中添加以下路径,让Xcode仅在dSYM文件存在时执行:$(DWARF_DSYM_FOLDER_PATH)/$(DWARF_DSYM_FILE_NAME)/Contents/Resources/DWARF/$(TARGET_NAME)$(SRCROOT)/$(FIREBASE_PLIST)
- 验证dSYM上传
编译对应Flavor的Release/Profile版本(dSYM仅在非Debug模式生成),触发测试崩溃后等待5-10分钟查看Crashlytics控制台;若仍提示缺失,可在XcodeWindow -> Organizer中找到归档包,进入dSYMs文件夹手动上传。
三、额外注意事项
- 确保Flutter项目正确集成
firebase_crashlytics插件,并在main.dart中初始化:import 'package:firebase_core/firebase_core.dart'; import 'package:firebase_crashlytics/firebase_crashlytics.dart'; import 'package:flutter/material.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); FirebaseCrashlytics.instance.setCrashlyticsCollectionEnabled(true); FlutterError.onError = FirebaseCrashlytics.instance.recordFlutterError; runApp(const MyApp()); } - 确认Xcode的Release/Profile模式下,Build Settings -> Build Options中的"Debug Information Format"设置为"DWARF with dSYM File"
内容的提问来源于stack exchange,提问作者Hadi Khan
相关产品推荐
相关产品推荐

