3

我有一位用户(使用 iPhone 5)报告说我的应用程序在屏幕变黑后大约 15 秒在启动时崩溃(启动屏幕为黑色)。用户下载了一个 TestFlight 构建,其中我在 App 委托中包含了检查点,但我没有得到这些检查点被越过的证据,而且我从来没有收到过崩溃报告。

我将故事板上的入口点更改为空白视图控制器,现在我可以看到检查点正在被越过。我突然想到,由于故事板资源加载时间过长,Watchdog 正在暂停应用程序,但所有图像都是根据需要实时构建的,除了四个小标签栏图标。有几个音频文件,但它们是按需加载的。我想不出任何其他可能导致延迟的资源。没有其他人报告过这个问题,我很困惑。

任何见解都值得赞赏,特别是关于为什么我没有看到来自 TestFlight 的崩溃报告或检查点。

4

1 回答 1

8

您的假设是正确的,看门狗杀死了该应用程序。这是因为应用程序无法正常启动,或者主线程被阻塞,或者由于没有加载 UI,因此无法进行用户交互。

据我了解您的描述,您是在加载时创建资源吗?并且可能在主线程上这样做?您应该尝试将资源匮乏的代码卸载到后台线程,而不是在较旧/较慢的设备可能需要比预期更长的时间的主线程上执行此操作。UI 应该始终响应,主线程永远不应该处理可能接近一秒处理的任务。

另一个原因可能是情节提要和视图控制器之间的链接断开了,它实际上从未加载到该设备类型上。

但如果没有更多细节,就不可能说出到底发生了什么。

一般来说:如果应用程序被iOS系统杀死,例如由于启动时间超过或由于分配过多的内存而被看门狗杀死,那么只有iOS可以生成崩溃报告。

问题是应用程序被杀死,在这种情况下进程被杀死。并且该进程内运行的任何代码都无法检测到这一点。而且由于 iOS 上的崩溃报告,除了基于 iOS 系统的崩溃报告器之外,确实在被杀死的同一应用程序进程中运行,因此它们无法报告或编写任何崩溃报告。

以下页面提供了更多详细信息:http: //support.hockeyapp.net/kb/how-tos-faq/which-types-of-crashes-can-be-collected-on-ios-and-os- x(尽管有 PLCrashReporter 的上下文,Testflight 不使用它。但一般陈述是相同的)

于 2013-03-20T14:50:22.413 回答