Сегодня я сделал расширение, которое загружает статьи из ленты и отображает последние из них. Все это отлично работало на iOS 8, по-прежнему работало на iOS 8.1, затем вышла iOS 8.1.2, и мы начали жаловаться на то, что сегодняшнее расширение больше не работает. Я пытался выполнить отладку на устройствах iOS 8.1.2, и еще до запуска расширения оно вылетало с этой ошибкой:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** setObjectForKey: object cannot be nil (key: <__NSConcreteUUID 0x174027280> 5AFB07AB-5DCD-46FE-8D07-44DE0F3789F2)'
Я прочитал этот пост о частых ошибках, возникающих при разработке сегодняшнего расширения: http://www.atomicbird.com/blog/ios-app-extension-tip
В своем посте Том Харрингтон говорит:
В iOS 8 (и других последних версиях) включение модулей в настройках сборки Xcode означает, что вам не нужно явно перечислять все платформы, которые вы хотите использовать. Они будут найдены автоматически.
Но это не относится к NotificationCenter.framework, который используют расширения Today. Если вы удалите это из настроек сборки, вы не получите никаких предупреждений или ошибок сборки. Но когда вы попытаетесь загрузить расширение, вы получите исключение из libextension.dylib, и ваше расширение не загрузится. Сообщение об исключении не информативно:
2014-08-16 12:06:53.793 TodayTestExtension[41313:6111763] * Завершение приложения из-за необработанного исключения «NSInvalidArgumentException», причина: «* setObjectForKey: объект не может быть нулевым (ключ: ‹__NSConcreteUUID 0x7fd729422390 > ED3B42F8-66CD-4CB0-BCD5-F3DBA6F34DB5)' Если вы делаете сегодняшнее расширение, просто оставьте эту структуру в настройках сборки. Он не должен быть там, но он есть.
Мое расширение включает NotificationCenter.framework в свои настройки сборки, но я подозреваю, что моя проблема может быть чем-то похожа.
Кто-нибудь сталкивался с подобной проблемой? Есть идеи, как это решить?