2017-12-27 14 views
0

Ich versuche, auf MacOS (2017 iMac) auf Bluetooth-Peripheriegeräte zugreifen, aber die CBCentralManager scheint nie in den .poweredOn Zustand einzutreten. DiesemacOS CBCentralManager Zustand nicht unterstützt

import Cocoa 
import CoreBluetooth 

class BluetoothManager: NSObject { 
    var centralManager: CBCentralManager! 
    override init() { 
    super.init() 
    self.centralManager = CBCentralManager(delegate: self, queue:nil) 
    self.checkState() 
    } 

    func checkState() { 
    print("central state: \(self.centralManager?.state.rawValue ?? -1)") 
    DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + .seconds(2), execute: { 
     self.checkState() 
    }) 
    } 
} 


extension BluetoothManager: CBCentralManagerDelegate { 
    func centralManagerDidUpdateState(_ central: CBCentralManager) { 
    switch central.state { 
    case .poweredOn: 
     print("Power on") 
    case .unsupported: 
     print("Unsupported") 
    default:break 
    } 
    } 
} 


@NSApplicationMain 
class AppDelegate: NSObject, NSApplicationDelegate { 

    var bluetoothManager: BluetoothManager? 

    func applicationDidFinishLaunching(_ aNotification: Notification) { 
    self.bluetoothManager = BluetoothManager() 

    } 

    ... 

} 

konsequent Ausgang Unsupported, mit einer Konsole Warnung

[CoreBluetooth] XPC connection invalid 

Ich bin mir der Info.plist Schlüssel NSBluetoothPeripheralUsageDescription, die ich versuchte, obwohl ich glaube, das ist nur für iOS-Geräte.

Sehe ich in die falsche Richtung für die Verwaltung von Bluetooth auf einem iMac? Oder fehlt bei meiner Implementierung etwas? Ich habe das Gefühl, dass ich alles abgedeckt habe, was in der Core Bluetooth documentation erforderlich ist.

Antwort

0

Ich glaube, das war wegen der App Sandbox aktiviert (im Projekt Capabilities gefunden).

Aktivieren Bluetooth (unter Hardware) und akzeptieren die automatische Änderungen an Berechtigungen Datei die Probleme behoben.

Auch das Deaktivieren der App Sandbox scheint zu funktionieren, aber ich bin nicht weiß genug, um zu wissen, ob dies sicher ist.

Als Referenz meine Ansprüche Datei sieht nun wie folgt aus:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> 
<plist version="1.0"> 
<dict> 
    <key>com.apple.security.app-sandbox</key> 
    <true/> 
    <key>com.apple.security.device.bluetooth</key> 
    <true/> 
    <key>com.apple.security.files.user-selected.read-only</key> 
    <true/> 
</dict> 
</plist>  
Verwandte Themen