我们已经从 fabric.io 转移到 Firebase,除了一件事之外,一切似乎都很好。
我们正在使用 统一 2019.2.6 , 目标平台为 iOS ,目标架构是“通用”。
对于 dSYMs 上传,我将 dSYMs 文件夹从 *.xcarchive 打包到 dSYMs.zip 并通过以下代码将其上传到 Firebase
./upload-symbols -gsp <path_to_plist>/GoogleService-Info.plist -p ios <path_to_dSYMs.zip>/dSYMs.zip
结果,我在终端中看到以下几行:
Successfully submitted symbols for architecture arm64 with UUID <uuid_1> in dSYM: <path_to_unzipped_dsyms>/dSYMs/<myapp>.app.dSYM
Successfully submitted symbols for architecture armv7 with UUID <uuid_2> in dSYM: <path_to_unzipped_dsyms>/dSYMs/<myapp>.app.dSYM
Successfully uploaded Crashlytics symbols
之后,我可以在 Crashlytics 仪表板中看到去符号化的崩溃
但也在 Crashlytics dSYMs 选项卡中,我看到以下内容:
Missing dSYMs
UID <uuid_3> Version <my_version> Status **Optional** Crash count <count_1>
UID <uuid_4> Version <my_version> Status **Optional** Crash count <count_2>
<...>
所以问题是:
(dwarfdump 仅在 *.xcarchive dSYM 中显示 armv7 和 arm64 架构)
最佳答案
Firebaser 在这里 -
dSYM 将为您的应用程序中的所有二进制文件和框架生成,这些通常会被标记为“必需的”dSYM。您在应用中链接的框架也会生成 dSYM,这些通常会被标记为“可选”。因此,必需的和可选的 dSYM 来自不同的库,但最终它们都来自您的应用程序和您链接的任何框架。
如果您不上传可选的 dSYM,您可能会看到(大部分时间)的行为是您的某些崩溃不会有一些符号化的堆栈帧;在这些情况下,您的应用最有可能运行在您的应用中链接的框架中的一两个方法,并且您经常会看到它被来自其他库的符号化堆栈帧包围。但是,大多数情况下,将可选的 dSYM 上传到 Crashlytics 并不那么重要。
Crashlytics 将阻止崩溃报告进入您的仪表板,直到与该崩溃报告相关联的任何“必需的”缺失 dSYM 被上传。上传后,崩溃将被处理并显示在您的仪表板上。如果仅缺少可选的 dSYM,则这些崩溃将 不是 停止出现在您的仪表板上。
最后,在定位和上传 dSYM 方面,我建议从这里开始:https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios .您可以使用类似 dwarfdump -u </path/to/dSYMs>
的工具检查您下载的 dSYM 是否与仪表板中缺少的 dSYM 的 UUID 匹配。
关于ios - Firebase Crashlytics : missing OPTIONAL dSYMs,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61640184/