Нет EAAccessoryDidConnectNotification и EAAccessoryDidDisconnectNotification после подключения Lightning kBD или Smart KBD

Я не смог получить эти два уведомления EAAccessoryDidConnectNotification и EAAccessoryDidDisconnectNotification после подключения Lightning kBD или Smart KBD с моим APP. Но он работал на iOS9.3 с моим кодом, как показано ниже,

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidConnect:) name:EAAccessoryDidConnectNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(_accessoryDidDisconnect:) name:EAAccessoryDidDisconnectNotification object:nil];
[[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];

В чем причина?

P.S.: Я получил следующее сообщение в журналах.     Не удалось найти имя com.apple.private.externalaccessory.showallaccessories

Ответы

Ответ 1

Я удалил "профиль подготовки команды iOS: *" в Xcode- > preferences- > accounts → - > Подробнее.

Как только вы удалите этот профиль, загрузится новая копия. С тех пор я не вижу этого "Больше не могу найти com.apple.private.externalaccessory.showallaccessories". Я предполагаю, что это право теперь находится в "профиле подготовки команды iOS: *". Если ваш идентификатор пакета присутствует в другом "профиле подготовки команды iOS", я бы рекомендовал также удалить этот профиль подготовки.

Ответ 2

Кажется, проблема известна в версиях iOS 10 (бета), так как у нас нет стабильной версии. Это, похоже, разрешено в стабильной версии iOS 10. Его также повысили на Apple Developer Forum, но нет конкретного решения.

Хотя я испробовал несколько разных вещей, чтобы исправить это, но в итоге сделал это, что сработало:

  • Clean
  • Очистить папку сборки
  • Удалить и перенастроить ExternalAccessory.framework
  • Удалить приложение на устройстве iOS
  • Сборка и запуск

Если это не сработает, попробуйте удалить и создать новый профиль подготовки для своего приложения.

Ответ 3

Вот мой опыт. На Xcode 8.1 я могу успешно создать старый проект Apple на базе NIB (EADemo) и запустить его на устройстве iOS 10.1.1. Он отлично работает с моим аксессуаром Bluetooth. Затем я переименовал папку проекта и завершил портирование в проект на основе раскадровки. Запуск приложения на одном и том же iPhone завершается сбой в сеансе EA, и я получаю журнал ошибок:

2016-11-29 17: 04: 00.804421 K5Demo [430: 69578] Не удалось найти доступ к "com.apple.private.externalaccessory.showallaccessories" 2016-11-29 17: 04: 04.736780 K5Demo [430: 69578] ERROR - сеанс открытия завершился неудачно, поскольку протокол (null) не объявлен в Info.plist

В обоих случаях файл Info.plist одинаков, а также версия iOS.

Ответ 4

Вы можете попробовать удалить и создать новый профиль подготовки для своего приложения.

В iOS 10 у Apple есть два новых требования, чтобы ваше приложение могло получать уведомления EAAccessoryDidConnectNotification и EAAccessoryDidDisconnectNotification и может отображать устройства через [[EAAccessoryManager sharedAccessoryManager] connectedAccessories].

Include a protocolString of the external accessory in your app UISupportedExternalAccessoryProtocols property list.

Have the external accessory manufacturer submit to Apple a request for MFi whitelisting of your app.

Для отладки требуется только (1). Но ваше приложение не будет одобрено Apple (возможно, даже не для TestFlight) без (2).

Ответ 5

В iOS 10 Apple имеет два новых требования, чтобы ваше приложение могло получать уведомления EAAccessoryDidConnectNotification и EAAccessoryDidDisconnectNotification и может перечислить устройства через [[EAAccessoryManager sharedAccessoryManager] connectedAccessories].

  • Включите в свой список приложений UISupportedExternalAccessoryProtocols файл протоколаString внешнего аксессуара.

  • Попросите производителя внешних аксессуаров представить Apple запрос на использование белого списка вашего приложения.

Для отладки требуется только (1). Но ваше приложение не будет одобрено Apple (возможно, даже не для TestFlight) без (2).