在App Store下载的dSYMs中缺少UUID dSYM(更多目标应用)

6
我在iOS应用程序(XCode 10.3)中遇到以下问题:
  • Crashlytics表示我缺少一个dSYM,并提供了缺失的dSYM UUID(我既缺少所需的UUID,也缺少可选的UUID)
  • 该应用程序为BitCode应用程序,dSYMs从AppStore下载并上传到Crashlytics。 我看到许多其他dSYMs的崩溃信息已成功下载并解析。
  • 该应用程序是多目标应用程序。 以前,当该应用程序只是单个目标应用程序时,一切正常。 现在似乎出现了额外的问题。
  • 所有目标都选择了具有DWARF和dSYM的BitCode
  • 所有目标在构建阶段调用Crashlytics运行(至少我认为我做得正确)
  • 目标包括手表应用程序、手表应用程序扩展、Siri意图、Siri意图UI和iOS应用程序小部件。
  • 我手动打开了从AppStore下载的dSYM,确实缺少了dSYM UUID。
  • 我还检查了本地构建的应用程序存档,那里也没有dSYM UUID(是的,这是预期结果)
任何关于如何获取缺失的dSYM的想法,都会让我感到更加愉快... 请。

1
这里有同样的问题。这可能与Crashlytics无关。您可以通过从崩溃报告中获取构建UUID来获得更低级别的信息,通常Binary Images部分的第一行是应用程序,后跟框架,而尖括号中的位是图像的UUID。如果有匹配的dsym,则进行符号化,但对于我无法符号化的崩溃,dsym丢失了。 - Gordon Dove
这与Crashlytics毫无关系。根本原因似乎是AppStore,因为我从AppStore下载的dSYM文件比我上传的少。我还没有解决这个问题,但我已经找到了错误并修复了崩溃。对我有所帮助的是XCode -> 窗口 -> 组织器 -> 崩溃。虽然没有显示所有内容,但为我提供了修复错误所需的缺失信息。 - Michael Bernat
刚刚又深入了解了一下。凭直觉,我尝试使用一个与同一二进制文件和架构不匹配的dsym文件进行dwarfdump --lookup=<offset>,其中偏移量是堆栈跟踪中的+数字。这给了我与另一个崩溃报告相同的位置,该报告从同一版本构建中进行符号化。我现在没有更多时间可以花费了,但我最好的猜测是它是一个框架,它没有从beta安装或类似安装中更改,因此它具有不同的UUID,但相同的代码。 - Gordon Dove
2个回答

1
有时在appstoreconnect上分配的UUID是不正确的。崩溃报告包含正确的UUID - 即堆栈跟踪将一行归属于正确的二进制图像。 如果上传的dsym具有不正确的UUID,则Crashlytics无法将堆栈跟踪中的行与任何上传的dsym匹配,因此会标记它们为丢失。
但是有一种方法可以重写dsym的UUID,然后重新上传到Crashlytics。
注意:这种方法很危险。如果您使用不正确的UUID覆盖dSYM的UUID,然后将其上传到Crashlytics,则无法纠正该错误。因此,您必须绝对确定A)正在查找正确的二进制图像;B)具有正确的UUID。
以下是操作步骤:
步骤A:在Crashlytics中: 1. 记下缺少dsym的构建版本 2. 记下缺少dsym的UUID
步骤B:在其中一个崩溃文件中找到未符号化的行,该行对应该版本:

(注:在大多数情况下,它是您应用程序的二进制映像,在这种情况下,您可以跳过所有步骤,然后只使用您的应用程序名称作为二进制映像)

  1. 打开Xcode -> 窗口 -> 组织者
  2. 在左侧窗格中,选择崩溃
  3. 使用左上角的下拉菜单选择您感兴趣的版本
  4. 下载该版本的所有崩溃后,找到您感兴趣的崩溃
  5. 找到您感兴趣且未被符号化的崩溃报告中的行
  6. 记录二进制映像

步骤C-a:手动定位并替换具有不正确UUID的dsym:

  1. 打开 Xcode -> 窗口 -> 组织者
  2. 在左侧窗格中,选择“存档”
  3. 选择与您在步骤A)中记录的版本相对应的存档
  4. 在右侧窗格中,选择“下载调试符号”
  5. 下载完成后,在组织者中右键单击存档 -> 在 Finder 中显示
  6. 在 Finder 中,右键单击存档 -> 显示包内容
  7. 进入 dSYMs 目录
  8. 可选:按大小降序排列查找列表
  9. 从顶部开始,右键单击第一个 dsym 文件 -> 显示包内容
  10. 导航到 Contents -> Resources -> Dwarf
  11. 将 Dwarf 目录中文件的名称与您在步骤B)6中记录的二进制映像名称进行比较
  12. 如果匹配,请按this优秀写作中概述的步骤手动替换 UUID
  13. 如果不匹配,请重复步骤9-11,浏览所有 dsym 文件,直到找到正确的文件

步骤 C-b:自动定位并替换带有错误 UUID 的 dsym:

  1. 打开 Xcode -> 窗口 -> 组织者
  2. 在左侧窗格中选择“存档”
  3. 选择与您在步骤 A 中记录的版本对应的存档
  4. 在右侧窗格中,选择“下载调试符号”
  5. 下载完成后,在组织者中右键单击存档 -> 在 Finder 中显示
  6. 在 Finder 中,右键单击存档 -> 显示包内容
  7. 转到 dSYMs 目录
  8. 使用 此命令行程序 通过提供二进制图像名称和正确的 UUID 来替换 UUID

0

尝试使用mdfind "com_apple_xcode_dsym_uuids == <UUID>"在您的计算机上查找具有特定UUID的dSYM。

如果这不起作用,那么我的直觉是crashlytics会捕获来自这些不受支持的目标的崩溃,还会显示缺少UUID,但dSYM文件根本不可用,甚至不在iTunes Connect上。


在我的机器上找不到缺失的dSYM - 正如预期的那样,它是作为位码构建的,因此苹果会重新编译它。是的,这个UUID在来自appstoreconnect的压缩包中也是缺失的。无论如何,谢谢。 - Michael Bernat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接