allowDeferredLocationsUpdates работает на симуляторе, но не на моем iPhone 6s

Я пытаюсь понять функцию deferredLocations. Согласно документам Apple, следующее должно работать, и оно работает, когда я запускаю его на симуляторе, но как только я устанавливаю приложение на свой iPhone 6s, отключаю iPhone и запускаю приложение, обновления местоположений не откладываются. Я использую XCode 8 и Swift 3.

Вот код:

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    locationManager=CLLocationManager()
    locationManager!.delegate=self

    locationManager!.desiredAccuracy=kCLLocationAccuracyBest
    locationManager!.requestAlwaysAuthorization()
    locationManager!.distanceFilter=kCLDistanceFilterNone
    locationManager!.allowsBackgroundLocationUpdates=true
    locationManager!.pausesLocationUpdatesAutomatically=false
    locationManager!.startUpdatingLocation()

}

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

func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    if (!self.deferringUpdates)
    {
        locationManager!.allowDeferredLocationUpdates(untilTraveled: CLLocationDistanceMax, timeout: 60)
        self.deferringUpdates=true
    }
}

func locationManager(_ manager: CLLocationManager, didFinishDeferredUpdatesWithError error: Error?) {
    i=i+1
    label.text="\(i)"
    print("didFinishDeferredUpdatesWithError")
    locationManager!.disallowDeferredLocationUpdates()
    self.deferringUpdates=false
}

Я получаю код ошибки = 11, что означает, что GPS недоступен или что-то в этом роде, согласно документам Apple.


person the_ccalderon    schedule 08.10.2016    source источник
comment
Ну, возможно, GPS недоступен. Вы проверяли настройки своего устройства? Вы запрашиваете авторизацию, но я не вижу, чтобы вы проверяли, действительно ли она у вас есть, или даже включены ли службы определения местоположения.   -  person matt    schedule 08.10.2016
comment
Как я могу проверить это? Я думал, что запрашивая авторизацию, я на самом деле получаю доступ к GPS и службам определения местоположения.   -  person the_ccalderon    schedule 08.10.2016
comment
Ладно, беру все обратно. Я думаю, вы нашли ошибку. См. этот отчет: github.com/lionheart/openradar-mirror/issues/15939 Это то же самое, что происходит с вами. Я тоже это вижу; CLLocationManager.deferredLocationUpdatesAvailable всегда возвращает false.   -  person matt    schedule 08.10.2016
comment
Ладно, беру обратно. Это не ошибка. Это потому, что вы все еще привязаны к компьютеру. stackoverflow.com/a/26345001/341994   -  person matt    schedule 08.10.2016
comment
Нет, я это уже читал, и я всегда запускаю приложение с отключенным устройством.   -  person the_ccalderon    schedule 08.10.2016
comment
Ага, я беру назад взятие назад. Я написал тестовое приложение, которое работает без подключения к компьютеру, и я никогда не могу заставить CLLocationManager.deferredLocationUpdatesAvailable быть true.   -  person matt    schedule 08.10.2016
comment
Так это баг! Большое спасибо, Мэтт. Посмотрим, когда исправят.   -  person the_ccalderon    schedule 08.10.2016
comment
Я могу определенно подтвердить, что это работает иначе на iOS 10, чем на iOS 9. В iOS 9 CLLocationManager.deferredLocationUpdatesAvailable имеет значение true. В iOS 10 этого нет. Здесь есть и другие проблемы, но это явный признак того, что что-то не так.   -  person matt    schedule 08.10.2016