2013-03-20 189 views
3

我有一个用户(带有iPhone 5)报告说,我的应用程序在屏幕变黑(闪屏为黑色)后约15秒启动时崩溃。用户下载了一个TestFlight版本,其中我在App代理中包含了检查点,但是我没有证据证明这些检查点是交叉的,我从来没有收到崩溃报告。应用程序崩溃但没有TestFlight崩溃报告

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

任何洞察力的赞赏,特别是为什么我没有看到来自TestFlight的崩溃报告或检查点。

+0

像你说的,它肯定听起来像看门狗杀死你的应用程序花费太多时间启动。 – 2013-03-20 14:32:26

回答

7

你的假设是正确的,监督者杀死了应用程序。这是因为应用程序无法正常启动,并且主线程被阻塞,或者由于没有加载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但一般的语句是相同的)

+0

谢谢,这在TestFlight无法在进程终止时发送数据时很有意义。该应用程序在启动时使用Core Graphics和UIKit绘制一些简单的图形。我将集中精力在那里。我会更新这个问题,以表明有问题的设备是iPhone 5. – 2013-03-20 14:58:14

+1

iPhone 5应该是最快的。所以我建议询问用户他是否可以从iOS生成的实际设备提供崩溃报告。可以将设备同步到Mac/PC,也可以从诊断设置部分复制粘贴。关于如何做到这一点,有很多描述。然后你会看到杀人的真正原因。 – Kerni 2013-03-20 15:05:55

+0

谢谢你。用户没有要同步的机器,但是我会让他将崩溃报告粘贴到电子邮件中。我不知道这是可能的。非常感激。 – 2013-03-20 15:13:23