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 существует только по причинам совместимости со старыми приложениями, и новым приложениям вообще не нужно об этом беспокоиться.

Другие вопросы по тегам