Flutter多Flavor环境下Firebase Crashlytics dSYM上传脚本配置问题
解决Flutter多Flavor项目Crashlytics dSYM分项目上传问题
方案一:通过Build Configuration设置环境变量直接指定App ID
- 在Xcode中打开项目的
Build Settings,为每个Flavor对应的Build Configuration(如Debug-FlavorA、Release-FlavorB等)添加自定义环境变量:- 点击
+号选择Add User-Defined Setting,命名为FIREBASE_APP_ID - 给每个Configuration设置对应Firebase项目的App ID(可从对应Flavor的
firebase_app_id.json中复制)
- 点击
- 修改Crashlytics的上传脚本,替换默认的App ID读取逻辑:
原脚本中类似GOOGLE_APP_ID=$(grep '"google_app_id"' "${SRCROOT}/firebase_app_id.json" | cut -d '"' -f4)的代码,替换为:
确保脚本后续使用# 优先使用Build Configuration中设置的FIREBASE_APP_ID GOOGLE_APP_ID="${FIREBASE_APP_ID}" # 可选兜底逻辑:若未设置环境变量,则从对应Flavor的配置文件读取 if [ -z "$GOOGLE_APP_ID" ]; then GOOGLE_APP_ID=$(grep '"google_app_id"' "${SRCROOT}/lib/firebase_config/${CONFIGURATION}/firebase_app_id.json" | cut -d '"' -f4) fi$GOOGLE_APP_ID指定上传的目标项目。
方案二:通过Configuration名称匹配对应firebase_app_id.json文件
如果你的firebase_app_id.json按Flavor分类存放(如lib/firebase_config/FlavorA/firebase_app_id.json),可通过Xcode的CONFIGURATION环境变量定位文件:
- 修改上传脚本中的App ID提取部分:
# 假设Configuration名称与Flavor目录名一致 FIREBASE_CONFIG_PATH="${SRCROOT}/lib/firebase_config/${CONFIGURATION}/firebase_app_id.json" # 用plutil解析json,比grep更可靠 GOOGLE_APP_ID=$(plutil -extract google_app_id raw "$FIREBASE_CONFIG_PATH")
验证脚本正确性
- 在Xcode中选择对应Scheme执行
Product > Build,查看构建日志的Crashlytics上传步骤,确认GOOGLE_APP_ID为当前Flavor对应的ID - 可在脚本开头添加
echo "Current Configuration: ${CONFIGURATION}"和echo "Using Firebase App ID: ${GOOGLE_APP_ID}"输出调试信息,方便排查问题
注意:确保每个Flavor对应的Build Configuration在Xcode中关联正确,且脚本中firebase_app_id.json的路径无误(${SRCROOT}对应Flutter项目根目录)。
内容的提问来源于stack exchange,提问作者Jonas
相关产品推荐
相关产品推荐

