Código Swift2.3 para detecção de Beacon

Estamos em estágios avançados de desenvolvimento de um aplicativo Swift2.2 e, portanto, decidimos migrar para o 2.3 nesse meio tempo e fazer a migração completa do Swift 3 posteriormente. No entanto, não conseguimos obter a detecção de beacon funcionando após a conversão para o Swift 2.3. O método "didRangeBeacons" continua retornando uma matriz vazia. O mesmo código estava funcionando no Swift 2.2, então sabemos que temos todas as permissões, etc.

Além disso, se abrirmos o aplicativo "Locate" no mesmo ipad, nosso aplicativo também começará a retornar dados em "didRangeBeacons". Tentei várias versões dos aplicativos por aí e todos os aplicativos Swift2.3 estão se comportando da mesma maneira. Não consegue entender o que o aplicativo Locate está fazendo ... Alguém no mesmo barco ??

Aqui está o código que estamos usando. Não tenho certeza se isso deve ser escrito aqui ou nos comentários, mas não foi possível colocar o código nos comentários de alguma forma ...

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

}

[Atualização postar mais algumas tentativas para fazer isso funcionar] O aplicativo funciona no modo de primeiro plano se removermos self.locationManager.startMonitoringForRegion (self.region) e chamar self.locationManager.startRangingBeaconsInRegion (self.region) diretamente após self.locationManager.requestAlwaysAuthorization ()

Isso é subótimo, porque não obtemos eventos ou estados de entrada e saída, mas pelo menos estamos recebendo contagens de beacon.

questionAnswers(3)

yourAnswerToTheQuestion