2016-09-29 65 views
1

我的NotificationService应用程序扩展中出现常量和看似随机的崩溃。这是我的第一个应用程序扩展,所以我不确定调试通常如何工作,但我的异常断点没有被触发。该分机刚刚退出,并且默认通知会通过。我已经能够使用行断点跟踪特定的点,其中扩展程序崩溃,并简单地逐步完成,直到它崩溃。奇怪的是,它每次都会在同一条确切的线上一致地崩溃(所以它似乎不是内存压力问题)。我找不到任何这种背后的原因或理由。这里有几个崩溃的例子:“由于内存问题而终止”

  • for key in dict.keys {}但不是for (key, _) in dict {}
  • dateFormatter.date(from:)但不仅仅是dateFormatter
  • attributes.count其中属性是一个自定义结构。
  • existingObjects.insert(newObject, at: 0)但不existingObjects.append(newObject)

我还没有看到我的iPhone 6的碰撞,但我的iPad空气2,iPhone 6S Plus和iPhone 7始终都在同一行崩溃,直到我做出改变,这会将崩溃转移到代码中的新点。

+0

如果您收到崩溃日志,这将有所帮助。你也可以安装'console.app'来查看崩溃的全部内容。在设备上运行时,请检查Xcode设备。它也会保存崩溃日志。 –

回答

3

退出一点研究后,我终于偶然发现了答案:https://forums.developer.apple.com/thread/60632

这确实是一个内存不足的错误。我在Xcode仪器中看到的只有5MB,并认为它不可能杀死内存过少的内存,但NotificationService扩展的内存限制非常低,我所链接的框架以4mb左右的速度启动了该进程。在某些事情发生之前,这只是一个时间问题。

+0

我的iPhone 6很好,但是当我测试一个iPhone 7时,它开始在4.9mb并立即崩溃。你最终是否抛弃了整个服务扩展,或者你找到了出路? – iantheparker

+0

我最终大大简化了扩展。我的第一个方法是链接到我的非UI框架,并执行网络请求以获取通知详细信息,并将该信息保存到我的Core Data存储中,因此我不必再次请求数据。鉴于极限内存限制,我现在在推送主体中提供这些内容,而不是链接到任何框架。 –