【问题标题】:CoreBluetooth XPC connection invalidCoreBluetooth XPC 连接无效
【发布时间】:2018-09-29 18:06:42
【问题描述】:
public class BLE: NSObject, CBCentralManagerDelegate {

    var centralManager:CBCentralManager!

    public override init() {
        super.init()
        self.centralManager = CBCentralManager.init(delegate: self, queue: nil)
    }

    public func centralManagerDidUpdateState(_ central: CBCentralManager) {

        switch central.state {
        case .unknown:
            print("unknown")
        case .resetting:
            print("resetting")
        case .unsupported:
            print("unsupported")
        case .unauthorized:
            print("unauthorized")
        case .poweredOff:
            print("powered off")
        case .poweredOn:
            print("powered on")
            self.centralManager.scanForPeripherals(withServices: nil, options: nil)
        }
    }
}

这是我的代码,每当我运行它时,它都会给我消息

“[CoreBlueooth] XPC 连接无效”

我确实尝试将 NSBluetoothPeripheralUsageDescription 添加到我的 info.plist 文件中,但没有奏效。

但奇怪的是,如果我直接初始化 CBCentralManager 而不是使用类,那么一切正常。

仅当我尝试通过创建类 BLE 或任何其他类的对象来初始化 CBCentralManager 时才会出现此问题。

【问题讨论】:

  • 你检查过这个网址吗? stackoverflow.com/questions/43880346/…
  • 你必须在你的 info.plist 中添加一些键来解决这个问题
  • 尝试在您的 appDelegate 中定义 CBCentralManager,在您的 BLE 类中使用相同的 CBCentralManager
  • 在我问我的问题之前我已经遇到了那个 url,这就是为什么我首先尝试编辑我的 info.plist。也许您可以更具体地说明我应该添加哪些键?
  • 我也尝试在我的 appDelegate 中定义 CBCentralManager,不幸的是没有运气

标签: swift core-bluetooth xpc


【解决方案1】:

我遇到了同样的问题:沙盒默认为“开启”并禁用对蓝牙的访问。

确保您的目标功能允许蓝牙硬件访问(参见随附的屏幕截图)。

【讨论】:

  • 我也没有看到应用沙箱部分
  • 查看背景模式
  • 这在 XCode 中不再有效。
  • 谢谢!在 Xcode 11 中为我工作 - 现在在“签名和功能”下
【解决方案2】:

CBCentralManager 引用应该是作为成员变量的类的强引用。它不能作为本地参考。

尝试下一个:

class ViewController: UIViewController {
   var ble: BLE!
   override func viewDidLoad() {
      super.viewDidLoad()

      ble = BLE()
  }
}

class BLE: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
   private var manager: CBCentralManager!

   required override init() {
      super.init()
      manager = CBCentralManager.init(delegate: self, queue: nil)
   }

   func centralManagerDidUpdateState(_ central: CBCentralManager) {
      var consoleLog = ""

      switch central.state {
      case .poweredOff:
          consoleLog = "BLE is powered off"
      case .poweredOn:
          consoleLog = "BLE is poweredOn"
      case .resetting:
          consoleLog = "BLE is resetting"
      case .unauthorized:
          consoleLog = "BLE is unauthorized"
      case .unknown:
          consoleLog = "BLE is unknown"
      case .unsupported:
          consoleLog = "BLE is unsupported"
      default:
          consoleLog = "default"
      }
      print(consoleLog)
   }
}

【讨论】:

    【解决方案3】:

    对于运行 iOS 模拟器的人,蓝牙在其中不起作用。因此,如果您尝试使用蓝牙模拟应用程序,则会引发“[CoreBlueooth] XPC Connection Invalid”错误。

    更多信息:https://www.browserstack.com/test-on-ios-simulator

    您需要在真实设备上测试您的应用。

    【讨论】:

      【解决方案4】:

      在我的情况下,事实证明我调用 Scan 太早了。我正在从 ViewDidLoad 方法进行调用。如果我通过按下按钮启动扫描,扫描将正常工作。

      我使用的解决方法是在从 ViewDidLoad 方法调用扫描时延迟使用 performSelector。

      【讨论】:

        【解决方案5】:

        我解决了在我的管理器类中将 NSObject 更改为 UIViewController

        【讨论】:

          猜你喜欢
          • 2017-10-08
          • 2020-11-02
          • 2017-08-10
          • 2013-02-15
          • 1970-01-01
          • 1970-01-01
          • 2021-07-29
          • 2018-02-13
          • 1970-01-01
          相关资源
          最近更新 更多