Подтвердить что ты не робот

Сегодня Extension Crashes перед запуском на iOS 8.1.2

Я делаю сегодня расширение, которое загружает статьи из фида и отображает последние. Все это отлично работало на 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, которые используются сегодня. Если вы удалите это из настроек сборки, вы не получите никаких предупреждений или ошибок сборки. Но когда вы пытаетесь загрузить расширение, вы получите исключение из libextension.dylib, и ваше расширение не будет загружено. Сообщение об исключении не просвещает:

2014-08-16 12: 06: 53.793 TodayTestExtension [41313: 6111763] * Прекращение приложение из-за неперехваченного исключения "NSInvalidArgumentException", причина: "*setObjectForKey: объект не может быть nil (ключ: < __ NSConcreteUUID 0x7fd729422390 > ED3B42F8-66CD-4CB0-BCD5-F3DBA6F34DB5) ' Если вы используете сегодняшнее расширение, просто оставьте эту структуру в настройках сборки. Он не должен быть там, но он это делает.

Мое расширение включает NotificationCenter.framework в его настройках сборки, но я подозреваю, что моя проблема может быть схожей.

Кто-нибудь сталкивался с подобной проблемой? Любая идея, как его решить?

4b9b3361

Ответ 1

В конце концов я попытался удалить NotificationCenter.framework из своей цели и вернуть ее, очистить проект и теперь снова работать. Я предполагаю, что структура не была должным образом связана, хотя я мог видеть ее на моей цели с помощью xcode. Кроме того, я не могу понять, почему он работает, а затем прекратил работу с прибытием 8.1.2.

Ответ 2

Эта ошибка также возникает, если вы используете NSExtensionPrincipalClass внутри "Info.plist", чтобы определить базовый класс (вместо использования раскадровки) с именем ViewController, который не существует.

При использовании Swift убедитесь, что префикс класса с именем модуля (обычно это имя цели), например, "Module.MyViewController".

Ответ 3

Просто испытал ту же проблему. Для меня это было свойство "Основной интерфейс" в "Общие настройки" цели клавиатуры. Он был пустым, и я установил его в свой файл раскадровки, и теперь он работает как шарм. Screenshot

Ответ 4

Я исправил эту проблему, добавив атрибут @objc в класс Swift.

@objc(NotificationViewController)
class NotificationViewController: UIViewController, UNNotificationContentExtension {
...
}