AppStore 下载的 dSYM 中缺少 UUID dSYM(更多目标应用程序)

Posted

技术标签:

【中文标题】AppStore 下载的 dSYM 中缺少 UUID dSYM(更多目标应用程序)【英文标题】:Missing UUID dSYM within the AppStore downloaded dSYMs (more targets app) 【发布时间】:2019-08-26 08:42:24 【问题描述】:

ios 应用 (XCode 10.3) 遇到以下问题:

Crashlytics 说我缺少 dSYM,并提供了缺少的 dSYM UUID(我同时缺少必需和可选 UUID) 应用是BitCode应用,dSYM从AppStore下载,上传到Crashlytics。我看到其他 dSYM 的许多其他崩溃已正确下载和去符号化。 该应用程序是多目标应用程序。以前,当应用程序只是单一目标应用程序时,一切正常。额外的目标似乎是个问题。 所有目标都选择了 dSYM 的 BitCode 和 DWARF 所有调用 Crashlytics 的目标都在构建阶段运行(至少我相信我这样做是正确的) 目标是手表应用、手表应用扩展、Siri 意图、Siri 意图 UI 和 iOS 应用小部件。 我已经手动打开了从 AppStore 下载的 dSYM,并且丢失的 dSYM UUID 确实丢失了。 我还检查了本地构建的应用存档,dSYM UUID 不存在(是的,预期结果)

任何想法,从哪里获得丢失的 dSYM,都会让人更开心...拜托。

【问题讨论】:

这里有同样的问题。这可能与 Crashlytics 无关。您可以通过从崩溃报告中获取构建 UUID 来获得更低的级别,通常二进制图像部分的第一行是应用程序,然后是框架,尖括号中的位是图像的 UUID。如果有一个匹配的 dsym,它象征着,我无法象征的崩溃错误,dsym 丢失。 这肯定与 Crashlytics 无关。根本原因似乎是 AppStore,因为我从 AppStore 下载的 dSYM 文件比上传的少。我还没有解决这个问题,我已经找到了错误并修复了崩溃。对我有所帮助的是 XCode -> Window -> Organizer -> 崩溃。到目前为止没有显示所有内容,但显示了修复错误的缺失信息。 刚刚做了更多的挖掘工作。凭直觉,我刚刚尝试了 dwarfdump --lookup= ,其中 offset 是堆栈跟踪中的 + 号,对相同的二进制文件和体系结构使用不匹配的 dsym 文件。这给了我与来自同一构建的不同崩溃报告相同的位置。我现在没有更多时间花在上面,但我最好的猜测是,它是一个与 beta 安装或类似版本没有变化的框架,因此它具有不同的 UUID,但代码相同。 【参考方案1】:

有时在 appstoreconnect 上分配的 UUID 不正确。崩溃报告包含正确的报告——即堆栈跟踪将一行归因于正确的二进制图像。 如果上传的 dsym 具有不正确的 UUID,Crashlytics 无法将堆栈跟踪中的行与任何上传的 dsym 匹配,因此会将它们标记为缺失。

但是有一种方法可以重写 dsym 的 UUID,然后将其重新上传到 crashlytics。

注意:这种方法是有风险的。如果您用不正确的 UUID 覆盖 dSYM 的 UUID,然后将其上传到 Crashlytics,则无法纠正该错误。所以你需要绝对确定你 A) 正在寻找正确的二进制图像; B) 你有正确的 UUID。

这是怎么做的:

步骤 A:在 Crashlytics 中:

    记下缺少 dsym 的构建版本 记下丢失的 dsym 的 UUID

步骤 B:在您的一个崩溃文件中为该版本找到一个不带符号的行:

(注意:在大多数情况下,它是您应用的二进制图像,在这种情况下,您可以跳过此处的所有步骤,然后将您的应用名称用作二进制图像)

    打开 Xcode -> 窗口 -> 管理器 在左侧窗格中,选择崩溃 使用左上角的下拉菜单选择您感兴趣的版本 下载该版本的所有崩溃后,找到您感兴趣的崩溃 在崩溃报告中找到您感兴趣且没有符号化的行 记下二值图像

步骤 C-a:手动找到并替换 dsym 为不正确的 UUID:

    打开 Xcode -> 窗口 -> 管理器 在左侧窗格中,选择存档 选择与您在步骤 A) 中记下的版本相对应的存档 在右侧窗格中,选择下载调试符号 下载完成后,在管理器中右键单击存档 -> 在 Finder 中显示 在 Finder 中,右键单击存档 -> 显示包内容 转到 dSYMs 目录 可选:按大小按 DESC 顺序对查找器列表进行排序 从顶部开始,右击第一个dsym文件->显示包内容 导航到目录 -> 资源 -> Dwarf 将 Dwarf 目录中的文件名称与您在步骤 B) 6 中记下的二进制图像名称进行比较。 如果匹配,请按照 this 优秀文章中概述的步骤手动替换 UUID 如果不匹配,请重复步骤 9 - 11,遍历所有 dsym 文件,直到找到正确的文件

步骤 C-b:自动找到并替换 dsym 为不正确的 UUID:

    打开 Xcode -> 窗口 -> 管理器 在左侧窗格中,选择存档 选择与您在步骤 A) 中记下的版本相对应的存档 在右侧窗格中,选择下载调试符号 下载完成后,在管理器中右键单击存档 -> 在 Finder 中显示 在 Finder 中,右键单击存档 -> 显示包内容 转到 dSYMs 目录 使用this command line program 通过提供二进制图像名称和正确的 UUID 来替换 UUID

【讨论】:

【参考方案2】:

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

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

【讨论】:

在我的机器上找不到缺少的 dSYM - 正如预期的那样,它是作为位码构建的,因此 Apple 重新编译它。是的,appstoreconnect 的 zip 中也缺少此 UUID。还是谢谢。

以上是关于AppStore 下载的 dSYM 中缺少 UUID dSYM(更多目标应用程序)的主要内容,如果未能解决你的问题,请参考以下文章

Crashlytics:“我们缺少处理崩溃的 dSYM”[关闭]

上传到 App Center 后缺少 dSYM

在 iOS 9.2 中使用 Crashlytics 缺少 dSYM

在不上传 dsym 的情况下删除 Fabric 缺少 dsym 警告消息

Firebase 上传缺少所需的 dSYM 不工作

上传 DSYMS 文件失败。我已经上传了 myapp.app.dSYM 压缩文件,但它再次要求我上传“上传缺少所需的 dSYM”