Firebase crashlytics 没有告诉我 swift 的确切崩溃问题
Posted
技术标签:
【中文标题】Firebase crashlytics 没有告诉我 swift 的确切崩溃问题【英文标题】:Firebase crashlytics does not telling me the exact crash problem with swift 【发布时间】:2019-12-26 15:42:46 【问题描述】:我已经在堆栈上阅读了很多关于此的问题,但有没有解决方案来解决此问题以获取崩溃报告的缺失部分?
我知道这些崩溃是由 nil 或未包装的选项或其他原因引起的,但 objc 的崩溃要好得多:
我的项目基于 objetive-c(几年前开始),但新的主要部分是用 swift 编写的。来自 objc 部分的所有崩溃都非常详细,但来自 swift 部分的崩溃则没有。
所以问题是,我将如何获得可读的崩溃报告而不是 EXC_BREAKPOINT 0x00000001028817ac
【问题讨论】:
我理解这个问题,但您正在比较两种完全不同类型的崩溃。在一种情况下,您尝试使用 nil 值,而第二种情况是访问超出范围的特定数组元素。第二种情况更容易管理和报告。在第一个示例中,您在寻找崩溃报告的具体内容是什么?您需要什么“缺失部分”? @Jay 首先,新年快乐!因此,就我个人而言,我对此错误消息只有一件事不明白,为什么它的可读性不高。有没有办法得到一个错误消息,比如:“在展开可选值时发现 nil”而不是 exc_breakpoint。因为 ofc 我发现了这个问题,并且已经修复了它,但是如果有这样的详细消息会更好。还是这种类型的消息总是意味着这个? 这是一个常见错误,通常在强制展开选项时生成。你可能正在做类似forUser: user!
的事情。
好的,谢谢。这个错误发生在 obj-c 和 swift 代码的边缘。在这种情况下(objc 端)有一个数组,并且强制转换为!在 for in 中的 swift 侧,但是当数组为空时它崩溃了
【参考方案1】:
对于这种情况,我建议在应用中添加用户行为的高级分析,然后尝试重复与用户相同的步骤。这将有助于找到此类崩溃的根源。我可以分享代码,您可以在此基础上在应用的屏幕上添加必要的功能:
import Foundation
import Crashlytics
class EventLogger
/// Log a handled non-fatal exception
class func logException(_ exception: NSException)
print("Catched exception: \(exception.debugDescription)")
let frames = exception.callStackSymbols.map symbol in CLSStackFrame(symbol: symbol)
Crashlytics.sharedInstance().recordCustomExceptionName(exception.name.rawValue, reason: exception.reason, frameArray: frames)
private class func log(_ string: String)
CLSLogv(string, getVaList([]))
class func log(screen: String)
log("User is located at \(screen) Screen")
/// Log a status of feature
class func log(feature: String, status: String)
log("Feature \(feature) was \(status)")
/// Log an event
class func log(event: String)
log("Event: \(event)")
并像这里一样实施它:
EventLogger.log(event: "Pressed login button")
崩溃后,您可以准确地看到这次崩溃的操作日志
【讨论】:
文档声明“此 API 不适用于记录 NSException 对象”,用于方法 recordCustomExceptionName()以上是关于Firebase crashlytics 没有告诉我 swift 的确切崩溃问题的主要内容,如果未能解决你的问题,请参考以下文章
Crashlytics-Firebase 崩溃报告没有意义[重复]
Firebase Crashlytics 为 UUID 上传丢失的 dSYMs 文件
Firebase、Fabric 和 Crashlytics,带有 -ObjC 链接器标志,没有 Cocoapods iOS
如何在 iOS 上使用 Firebase 以编程方式获取 Crashlytics 版本