Код Swift2.3 для обнаружения маяка

Мы находимся на продвинутой стадии разработки приложения Swift2.2 и поэтому решили перейти на 2.3 в промежуточный период и выполнить полную миграцию Swift 3 позже. Однако мы не можем заставить работать маяк по обнаружению маяков Swift 2.3. Метод didRangeBeacons продолжает возвращать пустой массив. Тот же код работал в Swift 2.2, поэтому мы знаем, что у нас есть все разрешения и т.д.

Также, если мы откроем приложение «Найти» на том же ipad, то наше приложение также начнет возвращать данные в «didRangeBeacons». Пробовал разные версии приложений, и все приложения Swift2.3 ведут себя одинаково. Не могу понять, что делает приложение Locate ... Кто-нибудь на одной лодке?

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

import UIKit
import CoreLocation

class ViewController: UIViewController, CLLocationManagerDelegate {

let locationManager = CLLocationManager()
let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "9735BF2A-0BD1-4877-9A4E-103127349E1D")!, identifier: "testing")
// Note: make sure you replace the keys here with your own beacons' Minor Values


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    self.locationManager.delegate = self
    self.locationManager.requestAlwaysAuthorization()
    self.locationManager.startMonitoringForRegion(self.region)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}

func locationManager(manager: CLLocationManager, didStartMonitoringForRegion region: CLRegion) {
    print("didStartMonitoringForRegion")
    self.locationManager.requestStateForRegion(region)
}

func locationManager(manager: CLLocationManager, monitoringDidFailForRegion region: CLRegion?, withError error: NSError) {
    print("monitoringDidFailForRegion")
}

func locationManager(manager: CLLocationManager, didDetermineState state: CLRegionState, forRegion region: CLRegion) {
    print("didDetermineState")
    if state == .Inside {
        //Start Ranging
        self.locationManager.startRangingBeaconsInRegion(self.region)
        self.locationManager.startUpdatingLocation()
    }
    else {
        //Stop Ranging here
        self.locationManager.stopUpdatingLocation()
        self.locationManager.stopRangingBeaconsInRegion(self.region)
    }
}

func locationManager(manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], inRegion region: CLBeaconRegion) {
    print(beacons.count)
}

}

[Обновить сообщение еще несколько попыток, чтобы заставить это работать] Приложение работает в режиме переднего плана, если мы удаляем self.locationManager.startMonitoringForRegion (self.region) и вызываем self.locationManager.startRangingBeaconsInRegion (self.region) непосредственно после self.locationManager.requestAlwaysAuthorization ()

Это неоптимально, потому что мы не получаем события входа или выхода или состояние, но по крайней мере мы получаем количество маяков.

Ответы на вопрос(1)

Ваш ответ на вопрос