没有名字和地址。CBCentralManager不再在MacOS 12上工作

编程入门 行业动态 更新时间:2024-10-23 05:45:24
本文介绍了没有名字和地址。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才能使用前台扫描。

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

更多推荐

没有名字和地址。CBCentralManager不再在MacOS 12上工作

本文发布于:2023-11-14 13:45:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1587378.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:名字   地址   工作   CBCentralManager   MacOS

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!