Использование iPhone в качестве передатчика iBeacon

Я пытаюсь настроить свой iPhone для передачи сигнала iBeacon для другого iPhone. iPhone, который должен принимать сигнал, работает, но я не могу заставить другой iPhone транслировать сигнал.

Я следую этому руководству: https://www.hackingwithswift.com/example-code/location/how-to-make-an-iphone-transmit-an-ibeacon

И вот мой код:

import CoreBluetooth
import CoreLocation

class iBeaconTransmission: NSObject, CBPeripheralManagerDelegate {

    var localBeacon: CLBeaconRegion!
    var beaconPeripheralData: NSDictionary!
    var peripheralManager: CBPeripheralManager!

    func initLocalBeacon() {
        if localBeacon != nil {
            stopLocalBeacon()
        }

        let localBeaconUUID = "placeholder"
        let localBeaconMajor: CLBeaconMajorValue = 123
        let localBeaconMinor: CLBeaconMinorValue = 456

        let uuid = NSUUID(UUIDString: localBeaconUUID)!
        localBeacon = CLBeaconRegion(proximityUUID: uuid, major: localBeaconMajor, minor: localBeaconMinor, identifier: "placeholder")

        self.beaconPeripheralData = self.localBeacon.peripheralDataWithMeasuredPower(nil)
        self.peripheralManager = CBPeripheralManager(delegate: self, queue: nil, options: nil)
    }

    func stopLocalBeacon() {
        peripheralManager.stopAdvertising()
        peripheralManager = nil
        beaconPeripheralData = nil
        localBeacon = nil
    }

    func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager) {
        print("Peripheral Manager")
        if peripheral.state == .PoweredOn {
            print("Transmitting")
            peripheralManager.startAdvertising(beaconPeripheralData as! [String: AnyObject]!)
        } else if peripheral.state == .PoweredOff {
            peripheralManager.stopAdvertising()
        }
    }
}

Еще одно замечание: службы определения местоположения уже настроены на постоянную авторизацию.

«Диспетчер периферийных устройств» также никогда не печатается, поэтому функция, которая находится внутри, по какой-то причине не вызывается.

Спасибо!


person Nick    schedule 28.02.2016    source источник
comment
Вы действительно используете placeholder в качестве uuid? И какую отладку вы сделали.   -  person Wain    schedule 28.02.2016
comment
Нет, я использую настоящий UUID. Я помещаю заполнитель для публикации в переполнении стека. Я поставил точки останова в начале каждой функции и прошел через нее, и единственное, что я заметил, это то, что функция func peripheralManagerDidUpdateState(peripheral: CBPeripheralManager) не вызывается. Я не уверен, почему.   -  person Nick    schedule 28.02.2016
comment
Вы запрашивали разрешение на определение местоположения?   -  person Wain    schedule 28.02.2016
comment
Да. Я вслух, чтобы всегда отслеживать мое местоположение на моем устройстве.   -  person Nick    schedule 28.02.2016
comment
Позвоните, чтобы начать рекламу немедленно, это не должно работать, но ошибка может дать некоторое освещение.   -  person Wain    schedule 28.02.2016
comment
Вот что я получил: фатальная ошибка: неожиданно найдено nil при развертывании необязательного значения.   -  person Nick    schedule 28.02.2016
comment
По какой-то причине перемещение кода в контроллер представления сработало.   -  person Nick    schedule 28.02.2016


Ответы (1)


Исправлено. Я переместил код в контроллер представления и вызвал initLocalBeacon() в функции viewDidLoad.

person Nick    schedule 28.02.2016