如何让 Crashlytics 接收日志而不让我的应用程序崩溃? 我有以下代码:
if(!context.managedObjectContext save:&error) {
CLS_LOG(@"%@",error.description)
}
发生错误时,我希望 Crashlytics 服务器接收错误,但应用程序应继续运行。
我不需要立即使用日志。我很高兴在下次重新启动时获得日志。我只是不想在我的应用程序中触发崩溃才能接收日志。
这可能吗?
通过 crashlytics 的新更新,您现在可以使用:
[[FIRCrashlytics crashlytics] recordError:error];
在 Swift 中:
Crashlytics.crashlytics().record(error: error)
您可以在此处查看文档。
我尝试了以下几行,它很有魅力。在 try-catch 块中,在 catch 块中使用以下行
@try {
// line of code here
}
@catch (NSException *exception) {
NSUncaughtExceptionHandler *handler = NSGetUncaughtExceptionHandler();
handler(exception);
}
如http://support.crashlytics.com/knowledgebase/articles/222764-can-i-use-a-custom-exception-handler
所解释[更新]
现在在 Fabric 的 crashlytics 中,我们可以使用简单的函数
[Crashlytics recordCustomExceptionName:reason:frameArray:]
来发送已处理的异常
@try {
// line of code here
}
@catch (NSException *exception) {
NSArray *stack = [exception callStackReturnAddresses];
[[Crashlytics sharedInstance] recordCustomExceptionName: exception.name
reason: exception.reason
frameArray: stack];
}
对我来说,方法
.recordError()
没有帮助,因为它不记录用户信息。或者我只是没有找到在哪里可以观看它。使用 recordCustomExceptionName
适合我。有一个实现这两种方式的例子:
func logMessage(_ message: String) {
let userInfo = ["message" : message]
let error = NSError(domain: "AppErrorDomain", code: 1, userInfo: userInfo)
Crashlytics.sharedInstance().recordCustomExceptionName("API Error", reason: message, frameArray: [])
Crashlytics.sharedInstance().recordError(error, withAdditionalUserInfo: userInfo)
}
Swift 5、Crashlytics SDK 4.0.0-beta.6:
let exceptionModel = ExceptionModel(name: "exception title", reason: "details")
Crashlytics.crashlytics().record(exceptionModel: exceptionModel)
...与 NSError 类似,包含您想在 Crashlytics 仪表板中看到的任何内容。
let error = NSError(domain: "error title", code: 0, userInfo: ["message":"some details"])
Crashlytics.crashlytics().record(error: error)
iOS 日志非致命异常
Crashlytics.crashlytics().record(error: error)
另请查看测试阶段。实际上 Firebase 推荐:
-FIRDebugEnabled
[关于]并在日志中找到Completed report submission
以确保其已发送
-FIRDebugEnabled
,您在禁用或删除此参数后仍然可以看到日志。要修复它,请使用
-FIRDebugDisabled
参数
@try{
....
}
@catch(NSException ex){...}
在关键部分,但是如果您担心您的应用程序会崩溃或者您发现潜在的错误可能导致您的应用程序出现不良行为并发生故障,那么您应该始终这样做。您始终可以强制在异常中发送或跟踪此错误。
希望有帮助