Mac上的CoreBluetooth命令行应用程序

时间:2017-03-06 20:05:18

标签: swift cocoa core-bluetooth

我正在尝试构建一个使用CoreBluetooth的命令行应用。问题是,它不适用于命令行应用程序。

我已将我的CoreBluetooth代码(实现CBCentralManagerDelegate协议的类 - 让我们将此类myBLEManager调用)从命令行应用项目移动到另一台Mac OS GUI App。

我在ViewDidLoad()中运行了一些测试 - 超级样本,我只是初始化myBLEManager,在初始化时创建CBCentralManager的实例,然后调用scanForPeripherals

这是我在CLI和GUI项目中所做的。差异是centralManagerDidUpdateState永远不会在CLI项目中调用。但它确实在GUI Mac应用程序中。

1 个答案:

答案 0 :(得分:3)

大多数Apple框架中的回调都是通过应用程序的主要运行循环提供的。如果您的命令行工具没有运行循环,则它无法接收以这种方式发送的回调。

如果没有runloop,框架调用你的回调的唯一方法就是在另一个线程上运行它,这可能会导致在一个没有预料到的应用程序中出现奇怪的行为。

足以添加:

let runLoop = RunLoop.current
let distantFuture = Date.distantFuture
while running == true && runLoop.run(mode: RunLoopMode.defaultRunLoopMode, before: distantFuture) {

}