#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 я не смог найти способ заставить средство выбора внешних аксессуаров когда-либо отображаться.