【问题标题】:App Crashes But No TestFlight Crash Report应用程序崩溃但没有 TestFlight 崩溃报告
【发布时间】:2013-03-20 23:00:42
【问题描述】:

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

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

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

【问题讨论】:

  • 就像你说的,这听起来确实像是看门狗正在扼杀你的应用程序,因为你花费了太多时间启动。

标签: iphone ios objective-c


【解决方案1】:

您的假设是正确的,看门狗杀死了该应用程序。这是因为应用程序无法正常启动,或者主线程被阻塞,或者因为没有加载 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 不使用它。但一般陈述是相同的)

【讨论】:

  • 谢谢,TestFlight 在进程被终止时无法发送数据是有道理的。该应用程序在启动时使用 Core Graphics 和 UIKit 绘制一些简单的形状。我会集中精力在那里。我将更新问题以表明相关设备是 iPhone 5。
  • iPhone 5 应该是目前最快的。所以我建议询问用户是否可以从 iOS 生成的实际设备中提供崩溃报告。通过将设备同步到 Mac/PC 或从诊断设置部分复制粘贴。有很多关于如何做到这一点的描述。然后你会看到杀死的真正原因。
  • 谢谢。用户没有要同步的机器,但我会让他将崩溃报告粘贴到电子邮件中。我不知道这是可能的。非常感谢。
  • 我让用户通过电子邮件向我发送崩溃报告。我还没有用符号表示它,但这里有一个 sn-p:Exception Type: EXC_BAD_ACCESS (SIGSEGV) Exception Codes: KERN_INVALID_ADDRESS at 0x1cffffe0 Crashed Thread: 0 我怀疑我的一个或多个弱 IBOutlets 应该很强大。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-12
  • 1970-01-01
  • 1970-01-01
  • 2021-06-19
  • 1970-01-01
相关资源
最近更新 更多