3

我有一个 iOS 应用程序作为外围设备和一个 OS X 应用程序作为中心,使用 CoreBluetooth 框架。OS X 应用程序连接到 iOS 应用程序,它们通过读取加密特征并输入随机代码来结合。一切正常,直到 iOS 应用程序重新启动。从那时起,每次我连接到 iOS 设备并尝试读取其任何特征时,它都会返回“句柄无效”-错误。解决此问题的唯一方法是从 OS X 的蓝牙首选项中删除设备并重新启动绑定过程。

我怀疑这个问题是由 OS X 对我设备的服务和特性的缓存引起的,看到当我使用两台 iOS 设备在重新启动后相互连接时,这个问题没有出现。

我正在寻找的是一种清除我的服务和特征的 OS X 缓存的方法。我熟悉删除com.apple.Bluetooth.plist并重新启动blued进程/打开/关闭蓝牙的方法。( blued 是否缓存 ATT 值,如何清除缓存?如何在 MacOS 上清除 CoreBluetooth 缓存?

但是,删除 com.apple.Bluetooth.plist 需要我再次绑定 iOS 设备并输入代码。有没有办法清除缓存,但只能使用与我的应用程序相关的服务/特征?

4

1 回答 1

8

事实证明这比我想象的要容易。在 com.apple.Bluetooth.plist 中有一个 CoreBluetoothCache 键,其中包含一个包含一些缓存服务和内容的字典。棘手的部分是编辑缓存而不用蓝写。无论如何,这是要走的路(在终端):

sudo defaults write /Library/Preferences/com.apple.Bluetooth CoreBluetoothCache -dict
sudo launchctl unload /System/Library/LaunchDaemons/com.apple.blued.plist
sudo launchctl load /System/Library/LaunchDaemons/com.apple.blued.plist

在此之后,CoreBluetooth 实际上重新发现服务并以正确的方式读取特征。

于 2014-05-09T20:21:16.483 回答