没有名字和地址。CBCentralManager不再在MacOS 12上工作 [英] No name or address. CBCentralManager no longer working on macOS 12

查看:0
本文介绍了没有名字和地址。CBCentralManager不再在MacOS 12上工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

自从我将MacOS更新到MacOS12之后,我在使用CoreBluetooth时就遇到了问题。 在我的一个应用程序中,我将列出使用CGCentralManager类的所有BLE设备。

这已经奏效多年了。但现在,当我启动我的应用程序时,Xcode中会出现以下输出:

[CoreBluetooth] No name or address
[CoreBluetooth] No name or address
[CoreBluetooth] No name or address
[CoreBluetooth] No name or address
[CoreBluetooth] No name or address

MacOS控制台应用程序有很多这样的消息(我不知道这是否相关,进程是BluToothd,而不是我的应用程序):

Destroying pairing agent for session <appname>
Erasing session 0x7f795824af00 from SessionMap for "appname-2890-84"
Received 'stop scan' request from session "com.apple.bluetoothd-central-143-2" updateScanParams:YES shouldUpdateState:YES
Stopping scan as there are no remaining scan agents permitted to scan

如果我的应用程序没有运行,那么BluToototd进程似乎相当安静。一旦启动,蓝天进程似乎就出现了某种问题。问题是:哪一个?

禁用沙盒不会更改任何内容,因此我不认为这与缺少权限有关。

我还在一个新的应用程序中构建了一个非常基本的示例。我实例化了一个新的CBCentralManager并开始扫描。这些设备被发现了。 在我的主应用程序中,没有触发任何委托函数。完全没有。

是否有人遇到过同样的问题?

推荐答案

更新:苹果似乎已经修复了MacOS12.3中的错误。


以下原始答案适用于12.0、12.1和12.2。

苹果似乎已经更新了MacOS,使其表现得更像iOS。docs for scanForPeripheralsWithServices:options:说:

您的应用程序可以通过指定蓝牙中心后台模式在后台扫描蓝牙设备。为此,您的应用程序必须通过在serviceUUIDs参数中指定服务来显式扫描一个或多个服务。CBCentralManager扫描选项在后台扫描时不起作用。

不能将命令行程序视为前台应用程序,因为它们不是.app,因此适用后台扫描规则。(这是猜测,但我怀疑NSWorkspace.frontmostApplication可能用于确定前景应用程序)。

如果可以接受后台扫描,并且正在使用的蓝牙设备在广告数据中包含服务UUID,则可以将服务UUID列表提供给scanForPeripheralsWithServices:options:

如果不是,则必须创建签名的.app才能使用前台扫描。

https://github.com/hbldh/bleak/issues/720中可以找到一些额外的细节和一个难看的解决方法,用于在没有图形用户界面的情况下将命令行工具作为.app运行(在XCode调试器之外)。此链接是特定于Python的,但您应该能够将其推断到其他环境。

这篇关于没有名字和地址。CBCentralManager不再在MacOS 12上工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆