Crashlytics 不显示崩溃

Posted

技术标签:

【中文标题】Crashlytics 不显示崩溃【英文标题】:Crashlytics does not show crashes 【发布时间】:2017-02-12 20:41:59 【问题描述】:

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

我已经为 Debug 和 Release 设置了 Debug Information Format 为“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/设备屏幕启动)

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

几分钟后,您应该会在 Fabric 上看到崩溃 仪表板。

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

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

这可能是原因吗?我还发现了类似的未答复的question。

【问题讨论】:

来自 Fabric 的 Mike。您是否在连接 Xcode 的调试器进行测试? @MikeBonnell 我在没有连接 XCode 调试器的情况下进行测试。我也更新了这个问题。请检查一下好吗? 如果您在 Xcode 中点击运行,则调试器将自动连接。您需要在 Xcode 中显式点击 Stop,然后从模拟器启动应用程序而不点击 Run。 @MikeBonnell 当然。这就是我的做法 - “从 sumulator/device screen 启动”。 鉴于目前的信息,SO 可能不再是讨论这个问题的最佳场所,因为它正在成为一种对话。您能否在 TwitterCommunity.com/c/fabric 上发帖或发送电子邮件至 support(at)fabric(dot)io? 【参考方案1】:

检查了以下条款,

    确保 Crashlytics SDK 行位于所有其他 3rd-party SDK 行之后。 (它必须是您的 appDidFinishLaunching 方法中调用的最后一个。)

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

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

这些在支持部分已经提到,这里是附加的 -

    签入组织 -> 您的应用程序 -> 缺少 dSYM,是否显示任何缺少的 dSYM 文件

如果是,则执行以下步骤

    右键单击您的存档 -> 在 Finder 中显示 -> 右键单击​​文件并单击显示包内容 右击dSYM文件->显示包内容->内容->资源->DWARF(在终端中打开) 运行命令 dwarfdump --uuid "你在 dwarf 文件夹中看到的文件名"

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

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

除了上述内容之外,Build Settings 中的 Bitcode 属性和 Debug Information Format 也会影响崩溃报告。

【讨论】:

完美答案! 即使是非致命错误也需要断开 Xcode 调试器。【参考方案2】:

您需要运行应用程序,而不是从 Xcode 运行。

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

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

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

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

【讨论】:

我已经这样做了。我在“编辑”部分写过它。但是,在设备中进行测试时,我没有拔下 USB(而是从设备启动应用程序,而不是 XCode)。您认为这可能很关键吗?【参考方案3】:

在您的构建设置中仔细检查您的调试信息格式对于调试和发布都是“带有 dSYM 文件的 DWARF”

【讨论】:

欢迎来到 SO。在第二句话中,OP 说“我已经为调试和发布设置了调试信息格式为“带有 dSYM 文件的 DWARF”......”?见***.com/help/how-to-answer。 这是我的问题的答案。我以前没有意识到这一点。非常感谢,你拯救了我的一天【参考方案4】:

另一个导致崩溃未上传的潜在原因是在不调用完成处理程序的情况下实现 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)
    

【讨论】:

【参考方案5】:

在 2019 年仍然有意义。

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

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

执行以下操作:

    将所需的 Crashlytics 信息添加到您的项目中。在 Xcode 中运行一次。然后继续手动转到您的模拟器,打开您的应用,强制崩溃。 您应该会收到一封关于“致命错误”的电子邮件。 大约 5-10 分钟后,它会显示在您的 Firebase 控制台中。

【讨论】:

以上是关于Crashlytics 不显示崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Firebase crashlytics 不显示崩溃

Crashlytics(没有 Fabric)没有显示崩溃 iOS

Crashlytics 显示哪些 Analytics 事件会导致崩溃?

显示flutter firebase crashlytics中发生了哪一行崩溃,并显示dart文件名

iOS - Crashlytics - 缺少几次崩溃

Crashlytics 不报告崩溃