Fabric 请求不在存档或 iTunes Connect dSYM 文件中的 dSYM

Fabric requesting dSYM that's not in archive or iTunes Connect dSYM file

我有一个安装了 Crashlytics 的应用程序。要为它获取 dSYM 文件,我总是去 Window/Organizer,右键单击以在 finder 中显示,右键单击 "show package contents" 并转到 dSYM 目录以获取它们。

在这种情况下,Crashlytics 表示它缺少 dSYM 文件,该文件是随机的数字和字母字符串 (65cbd90a2b443d36ab7a6a419b797a71)。当我使用上述方法查找它时,我只看到一个名为 MyApp.app.dSYM 的文件和我通过 CocoaPods 合并的几个框架的 dSYM 文件。我尝试使用拖放该文件,但 Fabric 坚持使用随机字符串。

我试过显示 MyApp.app.dSYM 的包内容,但除了 "Contents" 文件夹和带 DWARF 子目录的 "Resources" 文件夹和没有扩展名为 "My App".

的文件

查看此 post 后,我 99% 确定我不能 build an archive and resubmit it

我也试过直接从 iTunesConnect 下载 dSYM,如 in this post 所述。

我尝试上传那个 dSYM "as is" 并压缩它 (dSYM.zip),但是 Fabric 仍然想要那个似乎不存在于本地存档和 dSYM 中的随机字符串在 iTunesConnect 上。

非常感谢关于我可能获得 Crashlytics 要求的 dSYM 文件的其他方法的任何建议。

创建二进制文件时,符号位于文件内的特定位置。当没有符号时,崩溃日志将指示二进制文件中某些点的偏移量,例如someFramework.someFunction +100

因此创建了一个 dSYM 文件来帮助在该特定二进制文件中建立索引。重新存档修改后的代码库或项目将导致新二进制文件中的不同偏移量,因此您不能简单地重新存档和上传。

这就是为什么用例如 release-v2.1 标记您的 git 存储库很重要,因此如果您需要,您可以返回并重新存档,偏移量应该相同。

就 Fabric 的工作原理而言,它需要 dSYM 文件的压缩版本,您发布的数字可能是 zip 文件的哈希值,我不能 100% 确定。

如果您的系统上安装了 Fabric 应用程序,运行在设备上安装一个版本应该会导致自动上传 dSYM 文件(如果您重复构建和 运行 一个项目,它仍然会在每个构建中上传每个 dSYM 文件。

你最好的选择是在你的 git 仓库中找到确切的时间点,然后在模拟器中重新运行 应用程序,这应该上传 dSYM 并希望配对到旧的,虽然我不确定它会起作用。否则,如果您认为您拥有准确的 dSYM,请尝试将其压缩并上传。

如果这不起作用,您将不得不采用老方法并使用终端和崩溃日志中的偏移量手动重新符号化它。这需要一点时间,但可以使用 atos

atos [-o AppName.app/AppName] [-l loadAddress] [-arch architecture] 

当您从 iTunes Connect 下载 DSYM 包时,您就快完成了!下载后添加.zip扩展名,双击解压

在生成的 DSYM 文件夹中,将有一个名为 65cbd90a2b443d36ab7a6a419b797a71 的文件(Crashlytics 要求的那个)。如果不存在 - 请仔细检查您在 Crashlytics 和 iTunes connect 上看到的是相同的版本。

只将该文件上传到 Crashlytics。

问题已解决。

对于未启用 Bitcode 的应用程序,Crashlytics 将自动上传您的 dSYMs。如果您在应用中启用了 Bitcode,则需要手动上传 dSYM。

启用 Bitcode 的应用程序需要从 Xcode 下载其 dSYM,然后将其上传到 Crashlytics,以表示崩溃。支持 Bitcode 的应用程序的 DSYM 可以从 Xcode 的 Organizer 下载。 Select 您应用程序的特定存档,然后点击“下载 dSYM”按钮,这会将 Bitcode 编译的 dSYM 插入到原始存档中。

正在手动上传 dSYM

如果您发现未拾取 dSYM,您可以手动添加它们,方法是转到 app settings page,选择一个应用程序,然后单击“丢失的 DSYM”选项卡上传 dSYM。

为了帮助找到 dSYM 所在的位置,运行 在打开的终端中执行此命令:

mdfind "com_apple_xcode_dsym_uuids == <UUID>"

要找到所有 dSYM,请尝试

mdfind "com_apple_xcode_dsym_uuids == *"

此外,如果您将 dSYM 上传到 Fabric,您应该检查 UUID 是否与丢失的 UUID 匹配。 运行 在打开的终端中执行此命令将为您提供 dSYM 的 UUID。

dwarfdump -u <PathToYourAppsDsym>

参考

Crashlytics Advanced Setup