2016-09-29 63 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存儲中,因此我不必再次請求數據。鑑於極限內存限制,我現在在推送主體中提供這些內容,而不是鏈接到任何框架。 –