Swift2.3-Code für die Beacon-Erkennung

Wir befinden uns in einem fortgeschrittenen Stadium der Entwicklung einer Swift2.2-App und haben uns daher entschlossen, in der Zwischenzeit auf 2.3 zu migrieren und später die vollständige Swift3-Migration durchzuführen. Es ist uns jedoch nicht möglich, die Beacon-Erkennung nach der Konvertierung auf Swift 2.3 zu erhalten. Die Methode "didRangeBeacons" gibt weiterhin ein leeres Array zurück. In Swift 2.2 funktionierte derselbe Code, daher wissen wir, dass alle Berechtigungen usw. vorhanden sind.

Auch wenn wir die "Locate" App auf demselben iPad öffnen, beginnt unsere App auch, Daten in "didRangeBeacons" zurückzugeben. Habe verschiedene Versionen der Apps ausprobiert und alle Swift2.3-Apps verhalten sich gleich. Kann nicht erkennen, was die Locate-App macht ... Wer im selben Boot ist ??

Hier ist der Code, den wir verwenden. Ich bin mir nicht sicher, ob dies hier oder in Kommentaren geschrieben werden soll, aber ich konnte den Code nicht irgendwie in die Kommentare einfügen ...

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

}

[Update post einige weitere Versuche, um dies zum Laufen zu bringen] App funktioniert im Vordergrundmodus, wenn self.locationManager.startMonitoringForRegion (self.region) entfernt und self.locationManager.startRangingBeaconsInRegion (self.region) direkt nach self.locationManager.requestAlwaysAuthorization () aufgerufen wird.

Dies ist nicht optimal, da wir keine Eintritts- und Austrittsereignisse oder -zustände erhalten, aber zumindest die Anzahl der Leuchtfeuer.

Antworten auf die Frage(6)

Ihre Antwort auf die Frage