Crashlytics 不显示崩溃

Crashlytics does not show crashes

我刚刚使用 this 官方说明安装了 Crashlitycs。

我已经为调试和发布设置了调试信息格式为“DWARF with dSYM File”并禁用了 Bitcode(有些人写道这可能有帮助):

AppDelegate:

Fabric.sharedSDK().debug = true
Fabric.with([Crashlytics.self])

为了模拟崩溃,我使用

Crashlytics.sharedInstance().crash()

var ggg: Int!
print(ggg)

Crashlitics 收集有关会话的一些信息。例如,它更新包版本信息:

所以与 Crashlitics 的联系有效。但是崩溃信息是空的:

我正在使用 XCode 8 和 iOS 9/10。我做错了什么?

编辑:

我已经在没有 XCode 调试器连接的模拟器和设备上测试了它(即从 sumulator/device 屏幕启动)

在崩溃发生 7-8 小时后,我终于收到了一些 Crashlytics 报告。我早就料到他们了,因为根据 documentation:

Within a few minutes, you should see the crash appear on your Fabric Dashboard.

但是我并没有收到我所等待的所有崩溃。在我的实验中,我尝试了不同的方法来初始化 Crashlytics:

Fabric.with([Crashlytics.self])
and
Fabric.with([Crashlytics.self()])

会不会是这个原因?我也发现了类似的未回答 question.

您需要 运行 该应用,但不需要来自 Xcode。

如果您使用的是设备,只需在未连接 USB 的情况下启动应用程序。 如果您使用的是模拟器,请从 Xcode 停止应用程序的 运行ning。然后通过鼠标点击再次打开它。

接下来,导航到将调用 Crashlytics.sharedInstance().crash()buttonPressfunction

然后重新打开 应用程序在崩溃后再次打开。(如果需要,这可以连接到控制台)这一步很重要,因为 crashlytics 会在应用程序终止之前保存崩溃报告.下次您打开应用程序时,它会 post 向 crashlytics 报告。

文档 here 实际上也解释了故障排除问题。

检查了以下条款,

  1. 确保 Crashlytics SDK 行在所有其他第 3 方 SDK 行之后。 (它必须是您的 appDidFinishLaunching 方法中调用的最后一个。)

  2. 强制崩溃,然后重新启动应用程序。 Xcode 必须断开连接才能阻止它拦截崩溃报告。要断开连接 Xcode,请按照说明 here 进行操作。

  3. 如果您正在使用 [Crashlytics sharedInstance] 崩溃];要测试崩溃,请确保它不在 appDidFinishLaunching 方法中。

这些已经在支持部分提到了,这里是额外的 -

  1. 检查组织 -> 您的应用程序 -> 缺少 dSYM,它是否显示任何缺少的 dSYM 文件

如果是,则执行以下步骤

  1. 右键单击您的存档 -> 在 Finder 中显示 -> 右键单击​​文件并单击显示包内容
  2. 右击dSYM文件->显示包内容->内容->资源->DWARF(在终端打开)
  3. 运行 命令 dwarfdump --uuid "file name you saw there in dwarf folder"

这将显示所有关联的 UUID,如果列出的任何 UUID 与 missing dSYM id 中提到的匹配,则只需压缩 dSYM 文件夹并将其上传到 crashlytics Missing dSYM segment。

这一步很重要,因为有时我们从管理器中提取的 dSYM 文件不包含正确的 UUID。上传错误后,我们等待其更新。所以最好确保您上传的是正确的 dSYM 文件。

除上述内容外,生成设置中的位码 属性 和调试信息格式也会影响崩溃报告。

导致未上传崩溃的另一个潜在原因是在未调用完成处理程序的情况下实施 Crashlytics 委托:

// MARK: CrashlyitcsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    // Last launch we crashed!
    }
}

相反,它应该是这样的:

// MARK: CrashlyitcsDelegate
func crashlyticsDidDetectReport(forLastExecution report: CLSReport, completionHandler: @escaping (Bool) -> Void) {
    // Last launch we crashed!
         completionHandler(true)
    }
}

在您的构建设置中仔细检查调试和发布的调试信息格式是否为“DWARF with dSYM 文件”

2019 年仍然适用。

正如 Zac Kwan 所说,您必须在没有将您的应用程序实例附加到 Xcode 的情况下执行此操作。

如果您正在关注 these 文档,它们会让您理解为,您添加所需的信息,然后进行测试,按下崩溃按钮,然后重新启动,全部通过 Xcode。

执行以下操作:

  1. 将所需的 Crashlytics 信息添加到您的项目中。 运行 它在 Xcode 一次。然后继续并手动转到您的模拟器,打开您的应用程序,强制崩溃。
  2. 您应该会收到一封关于 "Fatal Error" 的电子邮件。
  3. 大约 5-10 分钟后,它将显示在您的 Firebase 控制台中。