【问题标题】:Why Crashlytics is asking for missing DSYM file every time?为什么 Crashlytics 每次都要求丢失 DSYM 文件?
【发布时间】:2018-12-28 15:05:55
【问题描述】:

我在我的应用程序中使用 Crashlytics,一切正常。甚至 Crashlytics 也运行良好。

但问题是,每当我为我们的应用创建新版本 它再次显示丢失的 DSYM 文件上传新。

有什么解决办法吗?

在织物文档中,我找到了这个。但我不明白这一点。

谁能向我解释如何解决这个问题?

https://docs.fabric.io/apple/crashlytics/advanced-setup.html

【问题讨论】:

标签: ios xcode crashlytics google-fabric


【解决方案1】:

我们最近遇到了同样的问题。最后得到了一个上传脚本的定制版本。

if [[ "${CONFIGURATION}" = "Release" ]] || [[ "${CONFIGURATION}" = "Adhoc" ]]; then
  echo "Uploading dSYMs.."
  find "${DWARF_DSYM_FOLDER_PATH}" -name "*.dSYM" | xargs -I \{\} "${PODS_ROOT}/FirebaseCrashlytics/upload-symbols" -gsp "${SRCROOT}/GoogleService-Info.plist" -p ios \{\}
else
  echo "Skip dSYMs upload"
fi

请注意在调试配置中引用的路径和跳过的 dSYM 上传。虽然大部分时间可能无关紧要,因为无论如何 dSYMS 在调试配置中都已关闭。

find 的目的也是为了帮助上传动态框架的 dSYM 文件。例如。 OS 第三方库、项目框架等。否则,它们将不会被符号化。虽然仍然显示在堆栈跟踪中。

【讨论】:

  • 你是最棒的
【解决方案2】:

TL;DR

每次添加一行代码后重新编译项目时,dSYM 都会发生变化,因为生成的二进制文件中的代码行地址不一样。

您可以查看Fabric docs about uploading dsym,通过添加构建阶段或使用 Fabric pod 而不是像 @ekscrypto 所说的那样自动添加构建阶段的 Crashlytics 来自动上传您的 dSYM。

如果您仍想手动执行此操作,请打开您的 xcarchive,您可以在其中找到您的 dSYM 并将它们上传到 crashlytics

更多详情

dSYM 是调试符号的缩写。这有助于 crashlytics 解析它收到的崩溃日志,并有助于显示有关可能发生的崩溃/错误的详细信息。

当您归档您的应用程序时,您会留下 *.xcarchive “文件”,它实际上是一个您可以浏览的文件夹。在这个 xcarchive 中,您应该有一个 dSYM 文件夹,您的 dSYM 就在其中。

要查看它,首先在 XCode 中打开管理器窗口(窗口 > 管理器或 cmd+shift+6),右键单击最后一个存档并单击“在 Finder 中显示”。在打开的 Finder 窗口中,右键单击应用程序的最后一个 xcarchive,然后单击显示内容(抱歉图片是法语的)

这会将您带到您的 xcarchive 中,您可以在其中查看应用的 dSYM

将此上传到 crashlytics 应该可以解决您的问题

【讨论】:

  • @user3476144 找到 DSYM 并上传不是问题。我能够做到这一点。我的问题是关于每个版本为什么我需要上传 DSYM 文件?
  • 每次添加一行代码后重新编译项目时,dSYM 都会发生变化,因为生成的二进制文件中的代码行地址不一样。您可以查看docs.fabric.io/apple/crashlytics/… 来自动将您的 dSYM 文件上传到 Fabric,或者甚至可以在构建阶段中添加一个脚本阶段来执行此操作
  • 不客气,我根据 cmets 编辑了我的答案,以防有人遇到这个 SO 线程:)
  • 上传此存档不再起作用 - 您必须从 iTunes Connect 上传 dsym。转到 iTunes Connect -> 我的应用程序 -> 活动。选择要上传 dSYM 的版本。下载包含符号下的 dSYM。压缩并上传到 Crashlytics 或 Firebase -> Crashlytics
  • @TaimurAjmal 如何将 dSYM 上传到 Crashlytics?
【解决方案3】:

在您的 Xcode 项目中,在 Build Phases 下添加上面的运行脚本:

"${PODS_ROOT}/Fabric/upload-symbols" -gsp "${PROJECT_DIR}/GoogleService-Info.plist" -p ios "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}"

【讨论】:

【解决方案4】:

简单的步骤如下 1 转到存档并右键单击要在 Firebase 上获取崩溃报告的最新版本 2 查看 dsyms 文件夹 3 创建 dsyms 文件夹的 Zip 文件 4 最后将该zip文件上传到firebase控制台

【讨论】:

    【解决方案5】:

    此错误表示某些 dSYM 文件丢失。推荐的方法是不断地将 dSYM 文件上传到 Crashlytics。

    现在 Crashlytics 已集成在 Firebase 中,文档略有更改:https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports-new-sdk

    1. 集成 Crashlytics:pod 'Firebase/Crashlytics'
    2. 添加运行脚本阶段: find "${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}" -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp ${SRCROOT}/GoogleService-Info.plist -p ios \{\}

    如果您不想在每次调试构建应用时都上传 dSYM 文件:https://support.crashlytics.com/knowledgebase/articles/118559-can-i-make-the-dsym-uploading-only-on-release-buil

    【讨论】:

    • 还要确保使用这个符号“而不是”
    • 如何“推荐”手动上传这些文件并尝试一遍又一遍地与源代码同步?这不可能。
    • 通常您会将上传步骤添加到您的分发脚本中,这样您就不必手动进行
    【解决方案6】:

    确保您集成了新的“Fabric”框架,而不仅仅是 Crashlytics 框架。当您这样做时,您将在项目的构建阶段得到一个新脚本。

    此脚本将自动找到您的 dSYM 并将其与您的构建一起上传到 Fabric.io/Crashlytics 系统。

    【讨论】:

    • 我在构建阶段没有 fabric.io 选项。我将如何得到这个?我只是更新了 pod,但我没有得到这个选项。我正在使用 XCode 9.4
    • 最简单的方法是去集成crashlytics,然后打开Fabric应用,然后点击“+New App”,然后按照指南操作;它应该自动添加必要的脚本阶段。
    【解决方案7】:

    他们又变了:

    find dSYM_directory -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp ${SRCROOT}/GoogleService-Info.plist -p ios \{\}
    

    检查这里: https://firebase.google.com/docs/crashlytics/get-deobfuscated-reports-new-sdk

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2020-07-26
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多