在 Crashlytics 信息中心内获取易于理解的崩溃报告

默认情况下,Firebase Crashlytics 会自动处理您的调试符号 (dSYM) 文件,以便为您提供经过去混淆处理,方便用户阅读的崩溃报告。您在应用中的 Crashlytics 初始设置期间通常会配置此行为,具体而言,就是添加运行脚本,此脚本会在应用的构建阶段自动上传 dSYM 文件。

遗憾的是,有几种情况可能会导致 dSYM 文件自动上传失败。本指南提供了一些方法,如果 Crashlytics 无法找到应用的 dSYM 文件,您可以借鉴这些方法来排查问题。

确保 Xcode 可以自动处理 dSYM 并上传文件

您在应用中设置 Crashlytics 时,应该就已配置了一个运行脚本来自动处理 dSYM 并上传文件。

确保您的 Crashlytics 运行脚本的配置满足最新要求(至少符合 Xcode 15 要求)。如果您未采用最新配置,可能会收到以下错误:
error: Info.plist Error Unable to process Info.plist at path ...

具体而言,Xcode 15 及更高版本要求您提供更全面的文件位置信息。确保为 Crashlytics 运行脚本 (firebase-ios-sdk/Crashlytics/run) 完成以下设置:

  1. 点击 Build Phases(构建阶段)标签页,然后展开“运行脚本”部分。

  2. 在“Input Files”(输入文件)部分,确保添加了以下文件的位置路径:

    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${PRODUCT_NAME}
    ${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist
    $(TARGET_BUILD_DIR)/$(UNLOCALIZED_RESOURCES_FOLDER_PATH)/GoogleService-Info.plist
    $(TARGET_BUILD_DIR)/$(EXECUTABLE_PATH)

检查 Xcode 是否生成了 dSYM

在很多情况下,dSYM 文件缺失是因为 Xcode 根本没有生成它们。在上传失败时,Crashlytics 会在 Firebase 控制台中显示“dSYM 缺失”提醒。如果您收到该提醒,请先检查 Xcode 是否确实为每个 build 生成了正确的 dSYM:

  1. 在 Xcode 中打开您的项目,然后在 Xcode Navigator 中选择项目文件。

  2. 选择您的主要构建目标。

  3. 打开目标的 Build Settings(构建设置)标签页,然后点击 All(全部)。

  4. 搜索 debug information format

  5. 对于所有构建类型,请将 Debug Information Format(调试信息格式)设置为 DWARF with dSYM File(带有 dSYM 文件的 DWARF)。

  6. 重新构建您的应用。

您的崩溃报告现在应该会显示在 Crashlytics 信息中心内。如果问题仍然存在或者您遇到其他错误,请尝试查找您的 dSYM将其手动上传到 Crashlytics

在本地机器上查找您的 dSYM

运行以下命令,在您的机器上显示所有 dSYM 的 UUID,然后搜索缺少的 dSYM:

mdfind -name .dSYM | while read -r line; do dwarfdump -u "$line"; done

找到 dSYM 后,将其手动上传到 Crashlytics。如果 mdfind 命令未返回任何结果,您可以在 .app 所在的 Products 目录中查找(Products 目录默认位于 Derived Data 中)。如果您的应用已正式发布,您还可以在磁盘上的 .xcarchive 目录中查找其 dSYM:

  1. 在 Xcode 中,打开 Organizer 窗口,然后从列表中选择您的应用。Xcode 会显示您项目的归档列表。

  2. 按住 Control 键的同时点击归档,即可在 Finder 中查看它。再次在按住 Ctrl 键的同时点击它,然后点击 Show Package Contents(显示软件包内容)。

  3. .xcarchive 中有一个 dSYM 目录,该目录包含在 Xcode 的归档过程中生成的 dSYM。

上传您的 dSYM

Crashlytics 支持通过多种方式来上传 dSYM 文件,包括自动手动上传。

(推荐)自动处理 dSYM 并上传文件

在您最初设置 Crashlytics 时,您很可能已为自己的应用配置了该自动上传行为。不过,如果您发现自动上传失败,还是不妨检查一下您的配置是否正确

手动上传 dSYM 文件

如果自动上传失败,您可以通过以下任一方法手动上传 dSYM 文件。

  • 方法 1:使用基于控制台的“拖放”方法上传包含 dSYM 文件的 zip 文件(依次前往 Firebase 控制台 > Crashlytics > dSYM 标签页)。

  • 方法 2:使用 upload-symbols 脚本,您可以在构建流程中随时调用该脚本,以手动上传 dSYM 文件。您可以使用以下任一方法运行 upload-symbols 脚本:

    • 方法 A:在构建流程中加入以下一行内容:

      find dSYM_DIRECTORY -name "*.dSYM" | xargs -I \{\} $PODS_ROOT/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p PLATFORM \{\}
    • 方法 B:直接从终端运行该脚本:

      /PATH/TO/PODS/DIRECTORY/FirebaseCrashlytics/upload-symbols -gsp /PATH/TO/GoogleService-Info.plist -p ios /PATH/TO/dSYMs

    如需查看有关此脚本的使用说明和其他说明,请运行 upload-symbols(添加 --help 参数)。