CoreBluetooth между двумя приложениями iOS - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь начать работу с Bluetooth на iOS, чтобы два соседних устройства обменивались данными с помощью CoreBluetooth.На одном устройстве выполняется приложение, играющее роль периферийного устройства, а на другом устройстве - другое приложение, играющее роль центрального.

Вот соответствующий код для двух приложений.

периферийное приложение:

import UIKit
import CoreBluetooth

class ViewController: UIViewController,CBPeripheralManagerDelegate {
    let serviceOne_UUID = CBUUID(string:"FB694B90-F49E-4597-8306-171BBA78F846"),
    svcOneChrcOne_UUID = CBUUID(string:"EB6727C4-F184-497A-A656-76B0CDAC633A")
    var cbPerifMngr:CBPeripheralManager!, mutaSRVC:CBMutableService!,
    svcOneCharacOne:CBMutableCharacteristic!

    override func viewDidLoad() {
        super.viewDidLoad()

        cbPerifMngr = CBPeripheralManager(delegate: self, queue: nil)
    }


    // CBPeripheralManagerDelegate protocol implementation.

    func peripheralManagerDidUpdateState(_ peripheral: CBPeripheralManager) {
        if peripheral.state == .poweredOn {
            mutaSRVC = CBMutableService(type: serviceOne_UUID, primary: true)
            svcOneCharacOne = CBMutableCharacteristic(type: svcOneChrcOne_UUID,
                                                      properties:  [.read, .notify], 
                                                      value: nil, permissions: .readable)
            mutaSRVC.characteristics = [svcOneCharacOne]
            cbPerifMngr?.add(mutaSRVC)
        }
    }


    func peripheralManager(_ peripheral: CBPeripheralManager, didAdd service: CBService, error: Error?) {
        if error != nil {
            print("Error in \(#function) :\n\(error!)")
        } else {
            cbPerifMngr.startAdvertising([CBAdvertisementDataServiceUUIDsKey:service.uuid])
        }
    }


    func peripheralManagerDidStartAdvertising(_ peripheral: CBPeripheralManager, error: Error?) {
        if error != nil {
            print("Error in \(#function) :\n\(error!)")
        }
    }
}

центральное приложение:

import UIKit
import CoreBluetooth

class ViewController: UIViewController,CBCentralManagerDelegate {
    var cbCenterMngr:CBCentralManager!

    override func viewDidLoad() {
        super.viewDidLoad()

        cbCenterMngr = CBCentralManager(delegate: self, queue: nil)
    }


    // CBCentralManagerDelegate protocol implementation.

    func centralManagerDidUpdateState(_ central: CBCentralManager) {
        print(#function)
        if central.state == .poweredOn {
            print("\(#function) poweredOn")
            central.scanForPeripherals(withServices: [CBUUID(string:"FB694B90-F49E-4597-8306-171BBA78F846")],
                                       options: nil)
        }
    }


    func centralManager(_ central: CBCentralManager, 
                        didDiscover peripheral: CBPeripheral, 
                        advertisementData: [String : Any], rssi RSSI: NSNumber) {
        print(#function)
    }


    func centralManager(_ central: CBCentralManager, didConnect peripheral: CBPeripheral) {
        print(#function)
    }
}

В этот момент, когда я запускаю оба приложения одновременно, я не вижу ничего, что бы показывало, что какое-тосоединение происходит.Кто-нибудь может сказать мне, нужно ли мне искать в определенном месте или приведенный выше код просто неверен и ничего не произойдет?В этом случае некоторые советы или подсказки будут высоко оценены.

PS После повторной попытки я заметил эту ошибку в консоли ведения журнала периферийного приложения:

peripheralManager(_:didAdd:error:)
peripheralManagerDidStartAdvertising(_:error:)
Error in peripheralManagerDidStartAdvertising(_:error:) :
Error Domain=CBErrorDomain Code=1 "One or more parameters were invalid." UserInfo={NSLocalizedDescription=One or more parameters were invalid.}
...