我有一个iOS应用程序充当外围设备,OS X应用程序充当核心,使用CoreBluetooth框架。 OS X应用程序连接到iOS应用程序,它们通过读取加密特征并输入随机代码进行绑定。一切正常,直到iOS应用程序重新启动。从那时起,每次我连接到iOS设备并尝试读取其任何特征时,它都会返回"句柄无效" -error。解决这个问题的唯一方法是从OS X中移除设备'蓝牙首选项并重新启动绑定过程。
我怀疑这个问题是由OS X'缓存我的设备的服务和特性,看到当我重新启动设备后使用两个iOS设备相互连接时,问题不会出现。
我正在寻找的是一种清除OS X'缓存我的服务和特征。我熟悉删除com.apple.Bluetooth.plist并重新启动蓝色进程/打开/关闭蓝牙的方法。 (Does blued cache ATT values, and how to clear the cache?和How can I clear the CoreBluetooth cache on MacOS?)
但是,删除com.apple.Bluetooth.plist需要我再次与iOS设备绑定并输入代码。有没有办法清除缓存,但只能使用与我的应用相关的服务/特性?
答案 0 :(得分: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实际上重新发现了服务,并以正确的方式读取特征。