EA showBluetoothAccessoryPicker 未在 SwiftUI 中显示
Posted
技术标签:
【中文标题】EA showBluetoothAccessoryPicker 未在 SwiftUI 中显示【英文标题】:EA showBluetoothAccessoryPicker not showing in SwiftUI 【发布时间】:2021-09-20 18:48:19 【问题描述】:我创建了一个需要连接到外部附件的小程序。我已经能够使用 UIKit 和 EA 框架成功地做到这一点。
我遇到的问题是我有一个基于 SwiftUI 的应用程序需要使用外部附件,但是当我调用 showBluetoothAccessoryPicker 函数时,选择器窗口不显示。
到目前为止我所尝试的:
我已读到您需要使用应用委托
var window: UIWin
正确设置以查看选择器窗口。所以我创建了一个类
class AppDelegate: UIApplicationDelegate
var window: UIWindow?
然后,我将应用委托与我的 swiftui“App”结构相关联,如下所示:
@main
struct POC: App
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene
WindowGroup
TabSelectionView()
不过,当我调用 showBluetoothAccessoryPicker
时,选择器窗口没有显示。
我在输出日志中看到以下内容:
2021-09-20 13:16:31.804796-0500 POC[2150:1514447] IAPDHasLaunched: kIAPAvailableNotification iapdAvailableState 0 -> 0
2021-09-20 13:16:31.805791-0500 POC[2150:1514447] IAP2DHasLaunched: kIAP2AvailableNotification iap2dAvailableState 0 -> 0
2021-09-20 13:16:31.807219-0500 POC[2150:1514447] -[EAAccessoryManager _initFromSingletonCreationMethod] isRunningOnMac
此日志显示正确,并且与使用 UIKit 的工作演示应用程序的输出相匹配。只是选择器窗口没有显示。
有人知道需要做什么才能让 SwiftUI 应用程序的选择器窗口正确显示吗?是否有任何 SwiftUI 连接到外部附件的示例,任何人都可以指点我?
提前感谢您的帮助。
【问题讨论】:
在这里遇到同样的问题...您找到解决方法了吗?您是否通过反馈报告器报告了问题? 我没有找到基于 SwiftUI 的应用程序的解决方案。我最终放弃并切换到 UIKit 应用程序。这不是直接开箱即用的,还需要一些修改才能开始工作。当我再次访问时,我会更新该信息。 那太酷了!我现在可以看到选择器,但它是空的……尽管我的所有信息都是正确的,并且我可以与 EA 交谈。所以肯定还少了点什么。 如果你能看到选择器,那么它正在工作。您可能需要验证您的协议是否包含在 Info.plist 的 Supported External Accessory Protocols 中。 我知道,但一切都是正确的。如果它不在 plist 中,我一开始就无法连接并与 EA 对话。恐怕这是选择器中的错误。 【参考方案1】:更新:它在 UIKit 中也被破坏了!
显然,基于UIScene
的新机制将其杀死(而且由于 SwiftUI 是基于新的基于场景的机制,它看起来只是 SwiftUI 的问题)。
如果您回滚到基于 UIApplicationDelegate
的生命周期,它会再次起作用。
旧答案:
它现在在 SwiftUI 中被破坏了。
进一步的实验表明EAExternalAccessory
选择器似乎在查询UIApplicationDelegate
的window
属性以找出将其显示在何处。
唉,这是一个optional
属性,它没有在SwiftUI 的AppDelegate
版本中实现,它只会得到nil
并且不会显示出来。
在这种情况下,@UIApplicationDelegateAdaptor
方法似乎也不起作用,因为它并没有真正充当 real 应用程序委托的替代品,而是将方法转发。
解决此问题的一种方法是使用 UIKit
应用程序生命周期并通过 UIHostingController
展示您的 SwiftUI 应用程序。
可能也可以通过方法调配来破解它,但如果是这样,我不知道如何。
请打开错误报告。
【讨论】:
以上是关于EA showBluetoothAccessoryPicker 未在 SwiftUI 中显示的主要内容,如果未能解决你的问题,请参考以下文章