我一直在收到Firebase崩溃报告,而且我不确定导致崩溃的原因。我已经无法通过在Xcode中测试错误来复制错误,但崩溃影响了几个不同的用户,因此我知道它不是单个设备特定的崩溃。以下是我所知道的崩溃期间发生的一切。但是,很明显,因为这是通过Firebase的崩溃报告报告的,所以我只有很多信息。
所有崩溃都来自某种iPad设备,这可能是也可能不是巧合。
我可以从事件日志中看出,不同用户在不同的屏幕上出现同样的崩溃,所以崩溃可能在AppDelegate类的某个地方,但我不确定只会发生什么样的问题偶尔喜欢这次崩溃。
崩溃跟踪中唯一一点我认为是我编码的东西是main (AppDelegate.swift:15)
,但我的AppDelegate文件中的第五行只是AppDelegate类声明,如下所示:
class AppDelegate: UIResponder, UIApplicationDelegate {
所以我不确定本节有什么问题。
如果您认为可能与崩溃有关的任何具体信息,请告诉我,我会尽力提供。
崩溃追踪:
Exception name: EXC_SOFTWARE / UNCAUGHT_NS_EXCEPTION
1
CoreFoundation
__exceptionPreprocess + 1224112
2
libobjc.A.dylib
objc_exception_throw + 32636
3
UIKit
-[UIPopoverPresentationController presentationTransitionWillBegin] + 9835108
4
UIKit
__71-[UIPresentationController _initViewHierarchyForPresentationSuperview:]_block_invoke + 3628972
5
UIKit
__56-[UIPresentationController runTransitionForCurrentState]_block_invoke + 3621060
6
UIKit
_runAfterCACommitDeferredBlocks + 2912452
7
UIKit
_cleanUpAfterCAFlushAndRunDeferredBlocks + 2968188
8
UIKit
_afterCACommitHandler + 26016
9
CoreFoundation
__CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 919332
10
CoreFoundation
__CFRunLoopDoObservers + 910536
11
CoreFoundation
__CFRunLoopRun + 911608
12
CoreFoundation
CFRunLoopRunSpecific + 35916
13
GraphicsServices
GSEventRunModal + 49284
14
UIKit
UIApplicationMain + 516228
15
Poker
main (AppDelegate.swift:15)
16
libdyld.dylib
start + 10420
答案 0 :(得分:0)
我有类似的问题,这只是部分答案。
正如有人在评论中所建议的那样,AppDelegate只是接近引起问题的调用链的根。当系统尝试执行_initViewHierarchyForPresentationSuperview
时,问题会在该链中一直发生。
当然,您对导致问题的您的代码行感兴趣。这些可能介于报告的UIKit
相关的呼叫线之间。我不知道如何直接使用给定的堆栈跟踪来找到导致问题的代码(或我的代码)的根。
然而,我确实知道如何更接近这些界限。我有一个意外的NSException出现在Firebase Crash reporting中,有一个与你的类似的神秘的调用堆栈,并且如上所示的消息:
通过跟随instructions from Firebase并进行相当多的研究或研究如何获取与发生问题的应用版本相关的dSYMS符号文件(我正在使用Bitcode,这使事情变得复杂;我最终进入iTunes Connect并在应用程序的活动部分中执行下载dSYMS ),我设法上传了正确的符号文件。 (在本地计算机上执行mdfind "com_apple_xcode_dsym_uuids == *"
以查看您是否已获得所需的UUID标识符号文件。)
下次问题发生时(我刚从Firebase收到了相应的电子邮件),我看到了这个:
我现在唯一的问题是:似乎导致问题的代码相当简单,并且不会在本地测试中引起任何问题。它只显示了一些静态行数的文本视图,我可以手动点击并验证。
我正在尝试将代码包装在do { ... } catch let error { ... }
中以查看 - 在未来的应用版本中是否尚未上传 - 我可以通过它捕获内部错误并通过Firebase报告错误消息和其他一些细节错误报告。