在 iOS 上报告崩溃

Firebase 崩溃报告会针对您应用中的错误作出详细报告。系统会将错误划分到各个具有相似堆栈跟踪记录的“问题”中,并根据错误对用户的影响程度将其分类。除了接收自动报告外,您还可以记录自定义事件,以帮助捕获导致崩溃的步骤。

设置崩溃报告

按照以下步骤在您的应用中设置崩溃报告:

  1. 安装 Firebase SDK
  2. Firebase 控制台中,将您的应用添加到您的 Firebase 项目。
  3. 将 Firebase 崩溃报告的依赖项添加至您的 Podfile:
    pod 'Firebase/Crash'
  4. UIApplicationDelegate 中导入 Firebase 模块:

    Swift

    import Firebase
    

    Objective-C

    @import Firebase;
    
  5. 配置一个 FirebaseApp 共享实例,通常是在应用的 application:didFinishLaunchingWithOptions: 方法中进行配置:

    Swift

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

    Objective-C

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

上传符号文件

为了使崩溃报告简明易懂,您需要在每次编译后上传符号文件。您可以按照以下步骤向 Xcode 中添加一个运行脚本,从而自动上传符号文件:

  1. 下载服务帐号密钥以对您的上传进行身份验证:在 Firebase 控制台中,选择您的项目,然后点击生成新的私钥
  2. 在 Xcode 中,点击您的应用目标,选择 Build Phases,然后点击“+”添加一个阶段。
  3. 选择 Run Script 并添加以下内容,为您的 service account pathGOOGLE_APP_ID 设置合适的值:
    # Replace this with the GOOGLE_APP_ID from your GoogleService-Info.plist file
    GOOGLE_APP_ID=1:my:app:id
    
    # Replace the /Path/To/ServiceAccount.json with the path to the key you just downloaded
    "${PODS_ROOT}"/FirebaseCrash/upload-sym "/Path/To/ServiceAccount.json"
        

创建您的第一项错误

要创建您的第一项错误,请在 AppDelegate 的 didFinishLaunchingWithOptions 方法中添加一个断言,使应用在启动期间、Firebase 初始化函数调用之后立即发生崩溃:

Swift

fatalError()

Objective-C

assert(false);

现在您已经添加了这一断言,可以执行以下操作来创建错误:

  1. 从 Xcode 启动应用。
  2. 点击 Xcode 中的 Stop,以从调试程序分离。
  3. 直接从设备主屏幕或模拟器主屏幕启动应用。
  4. 等待应用崩溃。
  5. 移除崩溃行,以使您的应用成功启动。
  6. 再次从 Xcode 启动快速入门。您应该会在 15 秒内看到一条日志消息,显示报告已成功上传。
  7. 检查 Firebase 控制台的“崩溃报告”(Crash Reporting) 部分以查看错误。错误可能需要过 1 至 2 分钟才会出现在该部分中。

创建自定义日志

您可以使用 FIRCrashLog() 创建在崩溃报告中包含的自定义日志消息。以下示例演示了如何创建日志消息:

Swift

FirebaseCrashMessage("Cause Crash button clicked")
fatalError()

Objective-C

FIRCrashLog(@"Cause Crash button clicked");
assert(NO);

Bitcode 支持

如果您启用了 bitcode,则需要执行以下操作来符号化您的应用,以便读取崩溃报告收集的堆栈跟踪记录:

  1. 下载应用的调试符号 (.dSYM) 文件。如需了解如何下载这些文件,请参阅在“Devices”窗口中查看和导入崩溃

  2. 在所有 .dSYM 文件均下载为 .xcarchive 之后,将 .dSYM 文件解压到一个方便的位置。

  3. 使用批量上传脚本,上传您需要符号化的应用版本的 .dSYM 文件。Spotlight 可能需要一分钟才能将此文件加入其索引。

    ./Pods/FirebaseCrash/batch-upload -i "Path/To/Info.plist" -p "Path/To/GoogleService-Info.plist" "Path/To/ServiceAccount.json" "UUID-OF-DSYM"
    

已知问题

  • Firebase SDK 目前不支持在 Xcode 模拟器中使用 NSException 类。如果您使用了此类,将导致 Firebase 控制台中的堆栈跟踪格式不正确。解决方法是使用真机设备,或者使用不同的异常类型(如 assert)进行测试。

  • 崩溃报告使用唯一 ID 来标识每个用户。由于 Xcode 8.1 中的已知错误,在 iOS 10 模拟器上创建此 ID 会失败,使得错误报告无法上传。要在 Xcode 8.1 中解决此问题,您可以在设备上运行测试,或者在应用设置的 Capabilities 部分中开启 Keychain Sharing。此错误已经在 Xcode 8.2 的测试版本中得到解决。

后续步骤

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面