能否在通知服务扩展等应用扩展中使用Crashlytics?
Crashlytics 通知服务扩展集成说明
可行性结论
可以在通知服务扩展中正常运行最新版Firebase Crashlytics,旧版独立Crashlytics SDK确实不支持扩展场景,但2021年之后的Firebase Crashlytics版本已经原生支持各类iOS应用扩展集成。
最新分步集成步骤
- 确保项目集成的Firebase Crashlytics版本 >= 8.0.0,低于该版本的SDK需要先升级
- 打开Xcode项目,选中通知服务扩展对应的Target,进入「General」面板,在「Frameworks and Libraries」列表中添加
FirebaseCrashlytics依赖,配置为「Embed & Sign」 - 在扩展的入口方法中添加SDK初始化代码,放在所有业务逻辑之前:
Objective-C 代码示例
Swift 代码示例#import <Firebase/Firebase.h> - (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler { if ([FIRApp defaultApp] == nil) { [FIRApp configure]; } [FIRCrashlytics crashlytics].crashlyticsCollectionEnabled = YES; // 原有业务逻辑 }import Firebase override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { if FirebaseApp.app() == nil { FirebaseApp.configure() } Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(true) // 原有业务逻辑 } - 给扩展Target配置编译上传脚本:进入扩展Target的「Build Phases」面板,新建「Run Script」阶段,填入脚本内容
"${PODS_ROOT}/FirebaseCrashlytics/run",并在输入文件栏添加以下两行配置:${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Resources/DWARF/${TARGET_NAME} $(SRCROOT)/$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH) - 功能验证:在扩展的业务逻辑中主动加入测试崩溃代码,触发远程通知唤起扩展执行崩溃,随后打开主应用,崩溃日志会在数分钟内同步到Firebase控制台,可通过Bundle ID筛选区分主应用和扩展的崩溃记录
崩溃数据上报逻辑说明
不需要开发者手动配置App Group共享组来同步崩溃数据。Crashlytics SDK会自动将扩展产生的崩溃日志存储在系统级公共缓存目录,主应用启动后,内置的Crashlytics SDK会自动扫描所有关联扩展生成的未上报崩溃日志,统一上传到项目对应的后台控制台。
内容的提问来源于stack exchange,提问作者Piepants
相关产品推荐
相关产品推荐

