簡體   English   中英

Mac 上的 CoreBluetooth 命令行應用程序

[英]CoreBluetooth on Mac Command line application

我正在嘗試構建一個使用 CoreBluetooth 的命令行應用程序。 問題是,它不適用於命令行應用程序。

我已將我的CoreBluetooth代碼(一個實現 CBCentralManagerDelegate 協議的類 - 我們稱這個類myBLEManager )從命令行應用程序項目移動到另一個 Mac OS GUI 應用程序。

我在ViewDidLoad()中運行了一些測試——超級樣本,我只是初始化了一個myBLEManager ,它在初始化時創建了一個CBCentralManager的實例,然后調用scanForPeripherals

這就是我在 CLI 和 GUI 項目中所做的。 區別是centralManagerDidUpdateState永遠不會在 CLI 項目中被調用。 但它確實在 GUI Mac 應用程序中。

大多數 Apple 框架中的回調是通過應用程序的主運行循環傳遞的。 如果您的命令行工具沒有運行循環,則它無法接收以這種方式發送的回調。

如果沒有運行循環,框架調用回調的唯一方法是在另一個線程上運行它,這可能會導致應用程序出現意想不到的奇怪行為。

添加以下內容就足夠了:

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

}

在 Swift 5+ 中,這是 Runloop 的語法:

import Foundation

let runLoop = RunLoop.current
let distantFuture = Date.distantFuture
var shouldKeepRunning = true

while shouldKeepRunning == true && runLoop.run(mode: RunLoop.Mode.default, before: distantFuture) {
    
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM