为什么 Crashlytics 每次都要求丢失 DSYM 文件?

Why Crashlytics is asking for missing DSYM file every time?

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

But the problem is that whenever I am creating a new build for our app its again showing missing DSYM File upload new.

有解决办法吗?

在织物文档中,我找到了这个。但是我没看懂。

任何人都可以向我解释如何解决这个问题吗?

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

TL;DR

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

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

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

更多详情

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

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

要查看,首先在XCode中打开管理器window(Window>管理器或cmd+shift+6),右击最后一个压缩包,点击“显示在发现者”。在打开的 Finder window 上,右键单击您应用的最后一个 xcarchive,然后单击显示内容(抱歉,图片是法语的)

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

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

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

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

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

在您的 Xcode 项目中,在构建阶段下添加上面的 运行 脚本:

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

此错误表示某些 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

他们又变了:

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

我们最近遇到了同样的问题。最终得到了一个有点自定义的上传脚本版本。

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 第三方库、项目框架等,否则不会被符号化。虽然仍然出现在堆栈跟踪中。