You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codemagic构建Flutter应用自动上传dSYM至Firebase Crashlytics问题咨询

关于Codemagic构建Flutter应用并上传Firebase Crashlytics dSYM的问题解答

背景说明

我使用Codemagic构建Flutter应用,同时借助Firebase Crashlytics追踪应用状态。为正常使用Firebase Crashlytics,需将每次构建的dSYM文件上传至Firebase。本地构建时,我可按照Firebase Crashlytics指引使用脚本:

/path/to/pods/directory/FirebaseCrashlytics/upload-symbols -gsp /path/to/GoogleService-Info.plist -p ios /path/to/dSYMs

此前我已在Xcode中添加脚本实现dSYM自动上传,但现在希望通过Codemagic完成构建并自动上传dSYM文件,已参考文档配置codemagic.yaml,目前遇到以下问题及对应解答:


1. Crashlytics中出现多个“Unknown Version”条目,来源是什么?

  • 大多是上传的dSYM未关联正确的应用版本信息:比如构建时未正确设置CFBundleShortVersionString或CFBundleVersion,或是上传dSYM时未传递版本标识参数。
  • 测试包(如Ad Hoc、Debug包)未标记版本就被安装运行,Crashlytics无法识别版本,会归类为Unknown Version。
  • dSYM上传流程中,版本信息未被正确传递至Firebase服务器也会导致该问题。

2. 版本89出现多个带有不同UUID的条目,原因是什么?

  • 每个UUID对应独立的dSYM文件,说明同一个版本89存在多次不同构建:比如在Codemagic或本地进行了多次构建,每次构建的环境、编译选项或代码有细微变化,导致生成的dSYM UUID不同。
  • 同一版本包含多架构dSYM(如arm64和x86_64),每个架构对应独立UUID,Crashlytics会分开显示。
  • 版本号重复使用(多次构建都标记为版本89,但实际是不同构建包),也会产生多个UUID条目。

3. 通过Codemagic构建应用时,是否仍需保留Xcode中的脚本?

  • 不需要保留。同时开启Codemagic和Xcode的dSYM上传脚本会导致重复上传,反而引发版本识别混乱。
  • 直接移除Xcode中的上传脚本,仅保留codemagic.yaml内的配置即可,避免冗余操作与冲突。

4. 如何验证Codemagic已正确上传dSYM文件?当前仅未知版本显示已上传dSYM文件。

  • 查看Codemagic构建日志:搜索upload-symbols相关内容,确认脚本执行成功,无报错(如文件找不到、权限问题)。
  • 在Firebase Crashlytics版本列表中找到对应构建版本,查看dSYM状态:若显示“已上传”或UUID匹配,说明上传成功。
  • 触发测试崩溃,查看Crashlytics的崩溃报告是否被正确符号化:能看到具体代码行号和函数名,就代表dSYM已生效。

5. 为何部分版本显示dSYM文件为可选状态?

  • 若应用用Swift编写且开启了Bitcode,App Store会重新编译应用并生成新的dSYM,此时需从App Store Connect下载官方生成的dSYM上传,本地或Codemagic生成的dSYM就会变为可选(官方生成的才匹配线上版本)。
  • 若应用崩溃日志已部分被符号化(如部分符号来自系统库),Crashlytics会标记dSYM为可选,但核心业务代码的dSYM仍为必需。
  • 若该版本暂无崩溃报告,Crashlytics会显示dSYM为可选,因为暂时不需要符号化任何日志。

内容的提问来源于stack exchange,提问作者Jan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 11:05:17