架构迁移后 Firebase Crashlytics 未报告崩溃

问题描述

最近,我们将应用从 Fabric 迁移到 Firebase Crashlytics 和 Firebase Analytics。在 android 中,遵循 Google 文档后,一切都像魅力一样。问题是在 iOS 中,我们在遵循相同的文档后没有得到关于 Firebase Crashlytics(在 Firebase Analytics 上完美运行)的报告。

路径:

Google 开发服务信息列表: Supporting Files > Firebase > Dev > GoogleService-Info-Dev.plist

Prod Google 服务信息列表: Supporting Files > Firebase > Prod > GoogleService-Info-Prod.plist

空列表: Supporting Files > GoogleService-Info.plist

构建阶段:

运行脚本(GoogleService-Info.plist 分配)

if [ "${CONFIGURATION}" = "Release" ]; then
    GOOGLE_SERVICE_INFO_PLIST_FROM="${PROJECT_DIR}/Supporting Files/Firebase/Prod/GoogleService-Info-Prod.plist"
else
    GOOGLE_SERVICE_INFO_PLIST_FROM="${PROJECT_DIR}/Supporting Files/Firebase/Dev/GoogleService-Info-Dev.plist"
fi

GOOGLE_SERVICE_INFO_PLIST_TO="${PROJECT_DIR}/Supporting Files/GoogleService-Info.plist" 
cp "${GOOGLE_SERVICE_INFO_PLIST_FROM}" "${GOOGLE_SERVICE_INFO_PLIST_TO}" 

运行脚本(Firebase Crashlytics 运行)

# Run Firebase Crashlytics

"${PODS_ROOT}/FirebaseCrashlytics/run" -gsp "${PROJECT_DIR}/Supporting\ Files/GoogleService-Info.plist" 

AppDelegate:

func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
       
   // Set Google -Info.plist for enviroment
       let filePath = Bundle.main.path(forResource: ULima.getInfoPlist(buildType: ULima.buildType),ofType: "plist")
   if let fileopts = FirebaseOptions(contentsOfFile: filePath!) {
       // Use Firebase library to configure APIs and Crashlytics
       FirebaseApp.configure(options: fileopts)
   }
  [...]
}
       

Crashlytics 控制台:

Crashlytics Console

我已经尝试过的:

  • 检查项目和 Firebase 控制台中的包 ID 是否匹配
  • 检查 bundle id 是否有空
  • 运行项目,按停止,在模拟器中打开应用程序(因此调试器不会干扰 crashlytics)并强制崩溃
  • 等了 2 天以上才出现崩溃
  • 使用 dSYM 文件将调试信息格式设置为 DWARF。
  • 仅运行 "${PODS_ROOT}/FirebaseCrashlytics/run"
  • Crashlytics.crashlytics().didCrashDuringPreviousExecution()确认
  • 将此添加到 AppDelegate
        Crashlytics.crashlytics().setCrashlyticsCollectionEnabled(false)

        Crashlytics.crashlytics().checkForUnsentReports { _ in
            Crashlytics.crashlytics().sendUnsentReports()
        }

解决方法

运行脚本对我来说不太好。应该有一两个单独的命令:

  1. 运行(启动)Firebase Crashlytics: "${PODS_ROOT}/FirebaseCrashlytics/run"(见docs
  2. 如果 Firebase Crashlytics 本身无法处理 dSYM 文件,您应该将 dSYM 文件上传到 Firebase 以获取反混淆的崩溃报告(请参阅docs

所以我建议您编辑 Firebase Crashlytics Run Script 以运行 Crashlytics(无需上传任何 dSYM 文件)。如果它有帮助并且您可以在控制台中看到崩溃,那么您可以检查 dSYM 文件是否丢失(因此需要另一个用于上传 dSYM 的脚本)。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...