deferredLocationUpdatesAvailable возвращает NO в iOS 10
Я пытаюсь использовать некоторые функции CoreLocation, и у меня возникают проблемы с отложенными обновлениями местоположения.
По какой-то причине, когда приложение было обновлено для iOS 10, deferredLocationUpdatesAvailable всегда возвращает NO. Я тестирую на iPhone 6s, поэтому я знаю, что устройство способно использовать функции GPS.
Я попытался использовать это для отладки:
[CLLocationManager deferredLocationUpdatesAvailable]
Я не могу понять, если это проблема с iOS 10 или у меня что-то установлено неправильно.
В этом методе:
- (void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error {
self.deferringUpdates = NO;
NSLog(@"DEFERRING Error: [%@]", error);
if (error) {
[[LocationManagerClient alertWithMessage:error.localizedDescription andTitle:error.domain] show];
}
}
Я заканчиваю тем, что регистрировал эту ошибку:
DEFERRING Error: [Error Domain=kCLErrorDomain Code=11 "(null)"]
Кто-нибудь еще сталкивался с этой проблемой с iOS 10 или есть идеи, что происходит?
Изменить: это, как я устанавливаю фильтр расстояния
- (void)configureForApplicationWillResignActive {
[_locationManager setAllowsBackgroundLocationUpdates:YES];
[_locationManager setPausesLocationUpdatesAutomatically:NO];
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[_locationManager setDistanceFilter:kCLDistanceFilterNone]; // use distance filter
[_locationManager requestAlwaysAuthorization];
}
- (void)configureForApplicationDidBecomeActive {
[_locationManager setAllowsBackgroundLocationUpdates:YES];
[_locationManager setPausesLocationUpdatesAutomatically:NO];
[_locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
[_locationManager setDistanceFilter:kCLDistanceFilterNone]; // use distance filter
[_locationManager requestAlwaysAuthorization];
}
2 ответа
Я уже подал Радар (28303779) с примером кода для концепции - также содержит формулировку с радара. Я также открыл сообщение на форуме разработчиков, и многие инженеры сталкиваются с той же проблемой. deferredLocationUpdatesAvailable()
также возвращает false в iOS 10. Похоже, что Apple намеренно отключил эту функцию.
Обновить
Мой отчет об ошибках был закрыт со словами "все работает как задумано". Я полагаю, что Apple не намерена это исправить, и она была по ошибке вывезена без амортизации.
Отложенные обновления теперь официально не рекомендуются (в iOS 13). По сути, это признание того, что их не поддерживали в течение нескольких лет.
Похоже, это ошибка в iOS 10
Мы должны все файлы радаров, чтобы исправить это, пожалуйста, дупе мой: http://openradar.appspot.com/radar?id=4927958787555328
Кажется, это "ошибка". (воспроизводится на iOS11 и iOS12, iPhone 7, iPad mini 4, сотовая связь)
CLLocationManager.deferredLocationUpdatesAvailable () всегда возвращает false, поэтому код для отложенных обновлений никогда не запускается. Однако, когда приложение работает в фоновом режиме, а менеджер местоположений доставляет позиции через locationManager(_ manager: CLLocationManager, didUpdateLocations location: [CLLocation]), эти позиции задерживаются, как если бы был включен режим отложенного доступа.
Я думаю, что отложенный API существует только по причинам совместимости со старыми приложениями, и новым приложениям вообще не нужно об этом беспокоиться.