Использование showBluetoothAccessoryPicker приводит к ошибкам представления SceneDelegate

#ios #swiftui #appdelegate #external-accessory #uiscenedelegate

#iOS #swiftui #appdelegate #внешний аксессуар #uiscenedelegate

Вопрос:

В настоящее время у меня есть приложение, которое попытается автоматически обнаружить устройство MFi Bluetooth.

Единственный способ — использовать ExternalAccessory фреймворк, поскольку CoreBluetooth только файлы доступны для устройств.

Прямо сейчас у меня есть кнопка, которая выполняет:

 EAAccessoryManager.shared().showBluetoothAccessoryPicker(withNameFilter: nil) { error in }
  

Для того, чтобы средство выбора появилось, мне нужно добавить var window: UIWindow? в свой AppDelegate

Пока это работает. Отобразится средство выбора и отобразит устройство, к которому я хочу подключиться. Однако, когда я пытаюсь щелкнуть устройство для его сопряжения, я получаю это сообщение:

 2020-11-11 14:07:16.694761-0700 BT[500:48034] [Presentation] Attempt to present <UIAlertController: 0x105013a00> on <_TtGC7SwiftUI19UIHostingControllerV2BT11ContentView_: 0x104a0a510> (from <_TtGC7SwiftUI19UIHostingControllerV2BT11ContentView_: 0x104a0a510>) which is already presenting <UIAlertController: 0x105052800>.
  

Что имеет смысл. В настоящее время средство выбора представляет, а затем пытается отобразить другое предупреждение для проверки pin-кода и пары.

Но если я удалю манифест сцены приложения в info.plist , удалю SceneDelegate и удалю все UISceneSession Lifecycle функции в AppDelegate , это сработает..

Проблема в том, что мне нужен SceneDelegate, поскольку это приложение SwiftUI, и в противном случае оно не будет запущено.

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

Комментарии:

1. Вы когда-нибудь находили исправление? С SwiftUI 3 я не смог найти способ заставить средство выбора внешних аксессуаров когда-либо отображаться.