一尘不染

Mac命令行应用程序上的CoreBluetooth

swift

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

我已将我的CoreBluetooth代码(实现CBCentralManagerDelegate协议的类-
称为此类myBLEManager)从命令行应用程序项目移至另一个Mac OS GUI应用程序。

我在ViewDidLoad()--supersample中运行了一些测试,我只是初始化了一个myBLEManager创建CBCentralManageron
实例的实例,然后调用scanForPeripherals

这是我在CLI和GUI项目中所做的事情。centralManagerDidUpdateState从未在CLI项目中调用差异。但它在GUI
Mac应用程序中可以。


阅读 248

收藏
2020-07-07

共1个答案

一尘不染

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

如果没有runloop,则框架调用回调的唯一方法是在另一个线程上运行它,这可能会导致意外的应用程序异常行为。

添加以下内容就足够了:

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

}
2020-07-07