Código Swift2.3 para detección de baliza

Estamos en etapas avanzadas de desarrollo de una aplicación Swift2.2 y, por lo tanto, hemos decidido migrar a 2.3 mientras tanto y realizar la migración completa de Swift 3 más adelante. Sin embargo, no podemos lograr que la detección de balizas funcione después de la conversión a Swift 2.3. El método "didRangeBeacons" sigue devolviendo una matriz vacía. El mismo código funcionaba en Swift 2.2, por lo que sabemos que tenemos todos los permisos, etc.

Además, si abrimos la aplicación "Localizar" en el mismo iPad, nuestra aplicación también comenzará a devolver datos en "didRangeBeacons". He probado varias versiones de las aplicaciones y todas las aplicaciones de Swift2.3 se comportan de la misma manera. No puedo entender qué está haciendo la aplicación de localización ... ¿Alguien en el mismo barco?

Aquí está el código que estamos usando. No estoy seguro de que se suponga que esto esté escrito aquí o en los comentarios, pero de alguna manera no pude poner el código dentro de los comentarios ...

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)
}

}

[Actualiza la publicación algunos intentos más para que esto funcione] La aplicación funciona en modo de primer plano si eliminamos self.locationManager.startMonitoringForRegion (self.region) y llamamos a self.locationManager.startRangingBeaconsInRegion (self.region) directamente después de self.locationManager.requestAlwaysAuthorization ()

Esto es subóptimo porque no obtenemos eventos o estados de entrada y salida, pero al menos estamos recibiendo conteos de balizas.

Respuestas a la pregunta(3)

Su respuesta a la pregunta