本快速入门介绍了如何使用 Firebase Crashlytics SDK 在您的应用中设置 Firebase Crashlytics,以便您可以在 Firebase 控制台中获得全面的崩溃报告。
设置 Crashlytics 需要在 Firebase 控制台和您的 IDE 中执行任务(例如添加 Firebase 配置文件和 Crashlytics SDK)。要完成设置,您需要强制测试崩溃以将您的第一个崩溃报告发送到 Firebase。
在你开始之前
如果您还没有,请将 Firebase 添加到您的 Apple 项目中。如果您没有 Apple 应用程序,可以下载示例应用程序。
推荐:要获得无崩溃用户、面包屑日志和速度警报等功能,您需要在 Firebase 项目中启用 Google Analytics。
Crashlytics 支持的所有 Apple 平台(watchOS 除外)都可以利用 Google Analytics 的这些功能。请注意,对于 macOS 和 tvOS 应用,您需要 SDK v8.9.0+。
如果您现有的 Firebase 项目没有启用 Google Analytics,您可以从 Firebase 控制台中集成选项卡启用 Google Analytics。
>项目设置的如果您要创建新的 Firebase 项目,请在项目创建工作流程中启用 Google Analytics。
第 1 步:将 Crashlytics SDK 添加到您的应用
使用 Swift Package Manager 安装和管理 Firebase 依赖项。
- 在 Xcode 中,打开您的应用程序项目,导航至File > Add Packages 。
- 出现提示时,添加 Firebase Apple 平台 SDK 存储库:
- 选择 Crashlytics 库。
- 为了获得最佳的 Crashlytics 体验,我们建议在您的 Firebase 项目中启用 Google Analytics ,并将适用于 Google Analytics 的 Firebase SDK 添加到您的应用程序中。您可以选择没有 IDFA 集合或有 IDFA 集合的库。
- 完成后,Xcode 将自动开始在后台解析和下载您的依赖项。
https://github.com/firebase/firebase-ios-sdk
接下来,配置 Firebase 模块:
在您的
App
结构或UIApplicationDelegate
中导入 Firebase 模块:迅速
import Firebase
目标-C
@import Firebase;
配置一个
FirebaseApp
共享实例,通常在您的应用委托的application(_:didFinishLaunchingWithOptions:)
方法中:迅速
// Use the Firebase library to configure APIs. FirebaseApp.configure()
目标-C
// Use the Firebase library to configure APIs. [FIRApp configure];
第 2 步:设置 Xcode 以自动上传 dSYM 文件
要生成人类可读的崩溃报告,Crashlytics 需要您项目的调试符号 (dSYM) 文件。以下步骤描述了如何配置 Xcode 以在您构建应用程序时自动生成、处理它们并上传文件。
打开项目的 Xcode 工作区,然后在左侧导航器中选择其项目文件。
从TARGETS列表中,选择您的主要构建目标。
单击Build Settings选项卡,然后完成以下步骤,以便 Xcode 为您的构建生成 dSYM。
单击全部,然后搜索
debug information format
。将所有构建类型的调试信息格式设置为
DWARF with dSYM File
。
单击Build Phases选项卡,然后完成以下步骤,以便 Xcode 可以处理您的 dSYM 并上传文件。
单击
>新建运行脚本阶段。确保这个新的运行脚本阶段是您项目的最后一个构建阶段;否则,Crashlytics 无法正确处理 dSYM。
展开新的运行脚本部分。
在脚本字段中(位于Shell标签下),添加以下运行脚本。
此脚本处理项目的 dSYM 文件并将文件上传到 Crashlytics。
"${BUILD_DIR%/Build/*}/SourcePackages/checkouts/firebase-ios-sdk/Crashlytics/run"
在输入文件部分,添加以下文件位置的路径:
项目的dSYM 文件的位置:
${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME}
提供项目的 dSYM 文件的位置使 Crashlytics 能够更快地处理大型应用程序的 dSYM。
项目构建的
Info.plist
文件的位置:$(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)
提供项目构建的
Info.plist
文件的位置使 Crashlytics 能够将应用程序版本与 dSYM 相关联。
有关 dSYM 文件和 Crashlytics(包括如何手动上传 dSYM 文件)的更多详细信息,请访问获取去混淆的崩溃报告。
第 3 步:强制测试崩溃以完成设置
要完成 Crashlytics 的设置并在 Firebase 控制台的 Crashlytics 仪表板中查看初始数据,您需要强制测试崩溃。
将可用于强制测试崩溃的代码添加到您的应用程序。
您可以使用以下代码向您的应用程序添加一个按钮,按下该按钮会导致崩溃。该按钮标记为“测试崩溃”。
斯威夫特用户界面
Button("Crash") { fatalError("Crash was triggered") }
UI工具包
迅速
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] } }
目标-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
在 Xcode 中构建并运行您的应用程序。
单击
Build 然后运行当前方案以在测试设备或模拟器上构建您的应用程序。等待您的应用程序运行,然后单击
运行方案或操作以关闭您的应用程序的初始实例。这个初始实例包括干扰 Crashlytics 的调试器。
强制测试崩溃以发送您的应用程序的第一个崩溃报告:
从测试设备或模拟器的主屏幕打开您的应用程序。
在您的应用中,按下您使用上述代码添加的“测试崩溃”按钮。
在您的应用程序崩溃后,从 Xcode 再次运行它,以便您的应用程序可以将崩溃报告发送到 Firebase。
转到 Firebase 控制台的Crashlytics 仪表板以查看您的测试崩溃。
如果您刷新了控制台,但五分钟后仍未看到测试崩溃,请启用调试日志记录以查看您的应用程序是否正在发送崩溃报告。
就是这样! Crashlytics 现在正在监控您的应用程序是否发生崩溃。访问Crashlytics 仪表板以查看和调查您的所有报告和统计信息。
下一步
- 通过添加选择加入报告、日志、密钥和非致命错误跟踪来自定义您的崩溃报告设置。