为什么需要重启才能在iOS上发送崩溃日志?

cat*_*ore 3 restart crash-reports ios

使用自定义崩溃报告系统(如专门针对要求用户在iPhone崩溃后发送崩溃日志的系统)发送日志,应用程序需要重新启动.为什么?是否有可能在自定义异常处理期间发送它?或者是否有崩溃报告系统,不需要重新启动应用程序?

Ker*_*rni 5

发生崩溃时,应用程序处于高度不稳定状态.因此,崩溃报告库无法执行任何操作,因为即使在崩溃时分配内存也可能导致更多损坏.因此,崩溃报告SDK只能使用所谓的异步安全 C方法来收集所有崩溃数据.任何Objective-C代码也无法处理,也无法使用iOS网络堆栈.

还请注意,异常只是Objective-C中应用程序崩溃的一个例子,也有低级别BSD信号触发的崩溃.这两种类型都意味着应用程序处于高度不安全和不稳定的状态,并且应该在崩溃时调用尽可能少的代码.

因此,这需要重写大多数网络框架才能在崩溃时发送数据,甚至可能无法以安全的方式进行.这就是为什么所有适当的崩溃报告SDK都不会做这样的事情.

此外,在iOS上,无法创建另一个可以在后台发送数据的进程,因此唯一安全可行的解决方案是在下次应用程序启动时发送数据.

现在有另一个结论,即应用程序启动早期发生的崩溃可能永远不会发送,因为应用程序在发送之前或发送时崩溃.一些SDK提供了处理该场景的机制,这很可能需要更改您的应用启动代码.