Firebase Crashlytics:缺少可选的 dSYM
Firebase Crashlytics: missing OPTIONAL dSYMs
我们已经从 fabric.io 迁移到 Firebase,除一件事外,一切似乎都还不错。
我们正在使用 Unity 2019.2.6,目标平台是 iOS,目标架构是“Universal".
对于 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>
<...>
所以问题是:
为什么这些缺失的 dsym 可选?
这些丢失的 dsyms uuid 是从哪里来的?
如果这些 uuid_3、uuid_4 是我的应用程序支持的体系结构的 uuid,而不是 arm64 和 armv7,那么为什么它们不存在于 dSYMs.zip 来自 *.xcarchive?
(dwarfdump 在 *.xcarchive dSYM 中仅显示 armv7 和 arm64 架构)
- 在哪里可以找到我的应用程序所需的所有 dsym?
DSyms 是 iOS- 与 IPA(又名实际构建文件)一起创建的人工制品。它们不是 运行 应用所必需的,但可用于 Crashlytics(Fabric 和 Firebase)以提供有关崩溃的额外信息。
这里是 Firebaser -
dSYMs 将为您应用程序中的所有二进制文件和框架生成,这些通常会被标记为 "required"dSYMs。您在应用程序中链接的框架也会生成 dSYM,这些框架通常会标记为 "optional." 因此,必需和可选的 dSYM 来自不同的库,但最终它们都来自您的应用程序以及您正在链接的任何框架。
如果您不上传可选的 dSYM,您可能会看到(大多数情况下)的行为是您的某些崩溃不会符号化一些堆栈帧;在这些情况下,您的应用程序 运行 很可能是通过应用程序中链接的框架的一种或两种方法,并且您经常会看到它被来自其他库的符号化堆栈框架所包围。但是,大多数时候,可选的 dSYM 对于上传到 Crashlytics 并不是那么重要。
Crashlytics 将阻止崩溃报告进入您的仪表板,直到上传与该崩溃报告关联的任何 "required" 缺失的 dSYM。上传后,崩溃将被处理并显示在您的仪表板上。如果仅缺少可选的 dSYM,这些崩溃将不会停止出现在您的仪表板上。
最后,关于定位和上传您的 dSYM,我建议从这里开始:https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios。您可以使用 dwarfdump -u </path/to/dSYMs>
等工具来检查您下载的 dSYM 是否与仪表板中缺失的 dSYM 的 UUID 匹配。
我们已经从 fabric.io 迁移到 Firebase,除一件事外,一切似乎都还不错。 我们正在使用 Unity 2019.2.6,目标平台是 iOS,目标架构是“Universal".
对于 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>
<...>
所以问题是:
为什么这些缺失的 dsym 可选?
这些丢失的 dsyms uuid 是从哪里来的?
如果这些 uuid_3、uuid_4 是我的应用程序支持的体系结构的 uuid,而不是 arm64 和 armv7,那么为什么它们不存在于 dSYMs.zip 来自 *.xcarchive?
(dwarfdump 在 *.xcarchive dSYM 中仅显示 armv7 和 arm64 架构)
- 在哪里可以找到我的应用程序所需的所有 dsym?
DSyms 是 iOS- 与 IPA(又名实际构建文件)一起创建的人工制品。它们不是 运行 应用所必需的,但可用于 Crashlytics(Fabric 和 Firebase)以提供有关崩溃的额外信息。
这里是 Firebaser -
dSYMs 将为您应用程序中的所有二进制文件和框架生成,这些通常会被标记为 "required"dSYMs。您在应用程序中链接的框架也会生成 dSYM,这些框架通常会标记为 "optional." 因此,必需和可选的 dSYM 来自不同的库,但最终它们都来自您的应用程序以及您正在链接的任何框架。
如果您不上传可选的 dSYM,您可能会看到(大多数情况下)的行为是您的某些崩溃不会符号化一些堆栈帧;在这些情况下,您的应用程序 运行 很可能是通过应用程序中链接的框架的一种或两种方法,并且您经常会看到它被来自其他库的符号化堆栈框架所包围。但是,大多数时候,可选的 dSYM 对于上传到 Crashlytics 并不是那么重要。
Crashlytics 将阻止崩溃报告进入您的仪表板,直到上传与该崩溃报告关联的任何 "required" 缺失的 dSYM。上传后,崩溃将被处理并显示在您的仪表板上。如果仅缺少可选的 dSYM,这些崩溃将不会停止出现在您的仪表板上。
最后,关于定位和上传您的 dSYM,我建议从这里开始:https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports?platform=ios。您可以使用 dwarfdump -u </path/to/dSYMs>
等工具来检查您下载的 dSYM 是否与仪表板中缺失的 dSYM 的 UUID 匹配。