Firebase Crashlytics 使用入门


此快速入门介绍了如何使用 Firebase Crashlytics SDK 在应用中设置 Firebase Crashlytics,以便您可以在 Firebase 控制台中获得全面的崩溃报告。

设置 Crashlytics 需要在 Firebase 控制台和 IDE 中分别执行一些操作(例如添加 Firebase 配置文件和 Crashlytics SDK)。为了完成设置,您需要强制造成一次测试崩溃,以便向 Firebase 发送您的第一个崩溃报告。

准备工作

  1. 将 Firebase 添加到您的 Apple 项目(如果尚未添加)。如果您没有 Apple 应用,可以下载一个示例应用

  2. 建议:要自动获取路径日志以了解导致崩溃事件、非严重事件或 ANR 事件的用户操作,您需要在 Firebase 项目中启用 Google Analytics

    • 如果您的现有 Firebase 项目未启用 Google Analytics,您可以访问 Firebase 控制台,依次点击 >“项目设置”,然后在集成标签页中启用 Google Analytics

    • 如果您要创建新的 Firebase 项目,请在项目创建工作流中启用 Google Analytics

    请注意,路径日志适用于 Crashlytics 支持的所有 Apple 平台(watchOS 除外)。

第 1 步:将 Crashlytics SDK 添加到您的应用

使用 Swift Package Manager 安装和管理 Firebase 依赖项。

  1. 在 Xcode 中打开您的应用项目,依次点击 File(文件)> Add Packages(添加软件包)
  2. 出现提示时,添加 Firebase Apple 平台 SDK 代码库:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. 选择 Crashlytics 库。
  5. 如需利用面包屑导航日志,还可以将 Firebase SDK for Google Analytics 添加到您的应用中。确保您的 Firebase 项目中启用了 Google Analytics
  6. -ObjC 标志添加到目标 build 设置的“其他链接器标志”部分。
  7. (仅限 macOS)在 Info.plist 中,添加键 NSApplicationCrashOnExceptions 并将其设置为 YES
  8. 完成之后,Xcode 将会自动开始在后台解析和下载您的依赖项。

接下来,配置 Firebase 模块:

  1. App 结构体或 UIApplicationDelegate 中导入 Firebase 模块:

    Swift

    import Firebase

    Objective-C

    @import Firebase;
  2. 配置一个 FirebaseApp 共享实例(通常在应用的 application(_:didFinishLaunchingWithOptions:) 方法中配置):

    Swift

    // Use the Firebase library to configure APIs.
    FirebaseApp.configure()
    

    Objective-C

    // Use the Firebase library to configure APIs.
    [FIRApp configure];
    

第 2 步:设置 Xcode 以自动上传 dSYM 文件

若要生成方便阅读的崩溃报告,Crashlytics 需要使用项目的调试符号 (dSYM) 文件。以下步骤介绍了如何配置 Xcode,使其在您每次构建应用时自动生成 dSYM、处理 dSYM 并上传文件。

  1. 打开项目的 Xcode 工作区,然后在左侧导航器中选择其项目文件。

  2. TARGETS(目标)列表中,选择您的主要 build 目标。

  3. 点击 Build Settings(构建设置)标签页,然后完成以下步骤,以便 Xcode 为您的 build 生成 dSYM。

    1. 点击 All(全部),然后搜索 debug information format

    2. 对于所有 build 类型,将 Debug Information Format(调试信息格式)设置为 DWARF with dSYM File

  4. 点击 Build Phases(构建阶段)标签页,然后完成以下步骤,以便 Xcode 可以处理您的 dSYM 并上传文件。

    1. 依次点击 > New Run Script Phase(新建运行脚本阶段)。

      确保这个新运行脚本阶段是项目的最后一个构建阶段;否则 Crashlytics 将无法正确处理 dSYM。

    2. 展开新的“Run Script”(运行脚本)部分。

    3. 在脚本字段(位于 Shell 标签下)中,添加以下运行脚本。

      此脚本会处理项目的 dSYM 文件,并将文件上传到 Crashlytics

      "${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
    4. 在“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)

如需详细了解 dSYM 文件和 Crashlytics(包括如何手动上传 dSYM 文件),请访问获取经过去混淆处理的崩溃报告

第 3 步:强制造成一次测试崩溃以完成设置

如需完成 Crashlytics 设置并在 Firebase 控制台的 Crashlytics 信息中心内查看初始数据,您需要强制造成一次测试崩溃。

  1. 向应用添加可用于强制造成测试崩溃的代码。

    您可以使用以下代码向应用添加一个按下即会导致崩溃的按钮。该按钮标有“测试崩溃”。

    SwiftUI

    Button("Crash") {
      fatalError("Crash was triggered")
    }
    

    UIKit

    Swift

    import UIKit
    
    class ViewController: UIViewController {
      override func viewDidLoad() {
          super.viewDidLoad()
    
          // Do any additional setup after loading the view, typically from a nib.
    
          let button = UIButton(type: .roundedRect)
          button.frame = CGRect(x: 20, y: 50, width: 100, height: 30)
          button.setTitle("Test Crash", for: [])
          button.addTarget(self, action: #selector(self.crashButtonTapped(_:)), for: .touchUpInside)
          view.addSubview(button)
      }
    
      @IBAction func crashButtonTapped(_ sender: AnyObject) {
          let numbers = [0]
          let _ = numbers[1]
      }
    }
    

    Objective-C

    #import "ViewController.h"
    
    @implementation ViewController
    ‐ (void)viewDidLoad {
        [super viewDidLoad];
    
        // Do any additional setup after loading the view, typically from a nib.
    
        UIButton* button = [UIButton buttonWithType:UIButtonTypeRoundedRect];
        button.frame = CGRectMake(20, 50, 100, 30);
        [button setTitle:@"Test Crash" forState:UIControlStateNormal];
        [button addTarget:self action:@selector(crashButtonTapped:)
            forControlEvents:UIControlEventTouchUpInside];
        [self.view addSubview:button];
    }
    
    ‐ (IBAction)crashButtonTapped:(id)sender {
        @[][1];
    }
    
    @end
    
  2. 在断开 Xcode 调试程序的情况下,在 Xcode 中构建并运行您的应用。

    1. 点击 Build and then run the current scheme(构建并运行当前方案),在测试设备或模拟器上构建您的应用。

    2. 等待应用运行,然后点击 停止运行方案或操作以关闭应用的初始实例。此初始实例包含会干扰 Crashlytics 的调试程序。

  3. 强制造成测试崩溃以发送应用的第一个崩溃报告:

    1. 在测试设备或模拟器的主屏幕中打开您的应用。

    2. 在您的应用中,按下您使用上述代码添加的“测试崩溃”按钮。

    3. 应用崩溃后,在 Xcode 中再次运行该应用,以便它可以将崩溃报告发送到 Firebase。

  4. 前往 Firebase 控制台的 Crashlytics 信息中心,查看您的测试崩溃报告。

    如果您已刷新控制台,但在五分钟后仍未看到测试崩溃报告,请启用调试日志记录,查看您的应用是否正在发送崩溃报告。


大功告成!Crashlytics 现在会监控您的应用是否发生崩溃。您可以访问 Crashlytics 信息中心以查看和调查所有报告和统计信息。

后续步骤