我对下面列出的 IOBluetooth 框架有一些疑问。
我目前有一台运行 Big Sur v11.1 的 MacBook Pro(13 英寸,2018 年),当我打电话询问并尝试查找附近的设备时,它经常失败并且无法持续工作。另一方面,我有第二台运行 Mojave v10.14.6 的 MacBook Pro(13 英寸,2015 年),它具有完全相同的功能并且每次都能正常工作。我也一直在使用 blueutil 命令行工具进行测试:https ://github.com/toy/blueutil以及 PyBluez:https ://github.com/pybluez/pybluez并发现我的第二台运行 Mojave 的 MacBook 总是能找到附近的设备而运行 Big Sur 的 MacBook 则遇到了麻烦。你知道这是因为框架的潜在更新还是我运行 Big Sur 的笔记本电脑有问题?
我试图从我的第一台笔记本电脑打开 L2CAPChannel 到第二台笔记本电脑,反之亦然,但在 IOBluetoothDevice 对象(我已正确实例化)上调用 openL2CAPChannelSync 似乎永远不会返回 kIOReturnSuccess。我在这里也做错了吗?我附上了我在下面使用的代码片段(在其中我删除了我的其他设备的地址字符串)。
import IOBluetooth
import PlaygroundSupport
class ChannelDelegate : IOBluetoothL2CAPChannelDelegate {
func l2capChannelOpenComplete(_ l2capChannel: IOBluetoothL2CAPChannel!, status error: IOReturn) {
print("Channel Opened!")
}
}
var remoteDevice = IOBluetoothDevice(addressString: ***deviceString***)
print((remoteDevice?.name ?? "nil") as String)
remoteDevice?.openConnection()
var connection = remoteDevice?.isConnected()
print(connection!)
var channelPtr: AutoreleasingUnsafeMutablePointer<IOBluetoothL2CAPChannel?>?
var success = remoteDevice?.openL2CAPChannelSync(channelPtr, withPSM: 0x0000, delegate: ChannelDelegate())
print(success == kIOReturnSuccess)
PlaygroundPage.current.needsIndefiniteExecution = true