IOS 8 Today Extension не работает на устройстве

Когда я запускаю свой Today Extension на симуляторе, все работает нормально, и он отображает следующее, как ожидалось:

enter image description here

Однако, когда я запускаю его на своих устройствах (iPod touch и iPhone 5s), тело не будет отображаться (не обращайте внимания на название и значок, который был изменен)

enter image description here

Я подключил отладчик к моему расширению, и я получил следующее:

enter image description here

Я понятия не имею, что все это значит...

Я удалил весь код для Today Extension, чтобы проверить, была ли проблема с моим кодом, и ничего не изменилось, поэтому я сомневаюсь, что проблема с моим кодом. Любые предложения о том, как исправить это, будут очень признательны.

(У меня есть группы приложений, если они имеют какое-либо значение)

Ответ 1

Я узнал, что я обращаюсь к своей группе приложений с неправильным именем. Просто убедитесь, что вы получаете доступ к группе приложений с "group.something.something", а не просто "something.something"

Ответ 2

Убедитесь, что целевая версия расширения

Убедитесь, что ваша целевая версия расширения верна. Xcode'd дает вам самую высокую версию по умолчанию, такую ​​как 8.3, и если ваша версия iOS ниже ее, Xcode'd даст вам сбой.

Ответ 3

Я нашел решение для своего дела. Мне просто нужно было указать arm64 как допустимую архитектуру для цели виджетов.

В Target Widget

Настройки сборки > Действительные архитектуры

У меня были только armv7 и armv7s. Я добавил arm64, и он работал как прелесть в моем 5s устройстве

Ответ 4

Несколько точек, которые нужно запомнить при использовании расширений приложений

  • Идентификатор пакета для целевого расширения должен быть com.companyName.AppName.ExtensionName

  • У вас должен быть отдельный AppID для целевого расширения, с идентификатором, указанным как com.companyName.AppName.ExtensionName, и создайте профиль обеспечения с помощью этого AppID.

  • Кроме того, созданный appGroupID должен быть встроен как в AppID (для приложения, так и для расширения).

Ответ 5

Поскольку вы не делились какой-либо частью кода, я не могу помочь вам с конкретным ответом. Попробуйте отладить ваш виджет, выполнив следующие действия: Debug- > Attach to Process → (выберите ваш виджет из меню) и отлаживайте viewdidload viewwillappear и - (void) widgetPerformUpdateWithCompletionHandler: (void (^) (NCUpdateResult)) методы завершенияHandler. Надеюсь, что это поможет.

Ответ 6

Источники моих проблем:

  • в представлении симулятора каждый раз вызывалсяDidLoad, на устройстве просмотр загружается один раз и вызывается только viewWillAppear.
  • виджет не получает уведомления об изменениях основных данных
  • Не вызывайте NCWidgetController.widgetController(). setHasContent из widgetPerformUpdateWithCompletionHandler. Лучшее место для его использования (в основном) - это ваше приложение, а не сам виджет.

надеюсь, что это поможет кому-то

Ответ 7

В моем случае я устанавливаю предпочтительный размер контента и начинаю работать с устройством

self.preferredContentSize = CGSizeMake(UIScreen.mainScreen().nativeBounds.width, 100.0)

Ответ 8

У меня возникла проблема с использованием пользовательского ViewController в расширении общего ресурса. Оказывается, что ресурсы в мини-приложениях расширения ограничены, поэтому, когда мое расширение генерировало миниатюры, оно вызывало сбой расширения, поскольку использовалось слишком много фоновых потоков. Сокращение генерации миниатюр до одного за раз решило проблему.

Смущает то, что это ограничение не было видно в симуляторе, только на реальном устройстве.