ios12 остановка фоновой службы определения местоположения

У меня есть приложение, которое постоянно отслеживает местоположение устройства в фоновом режиме. Это хорошо работало в ios 11.4, где я мог несколько дней запускать приложение в фоновом режиме, продолжая делать другие вещи на переднем плане.

Теперь с ios 12 приложение перестает работать через некоторое время, когда устройство не используется.

LocationManager инициализируется следующим образом:

locationManager.delegate = self
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.requestWhenInUseAuthorization()
locationManager.startUpdatingLocation()
locationManager.startUpdatingHeading()
locationManager.allowsBackgroundLocationUpdates = false
locationManager.pausesLocationUpdatesAutomatically = false
if #available(iOS 11.0, *)
{
    locationManager.showsBackgroundLocationIndicator = true
} 
locationManager.distanceFilter = prefs.getDoubleFromString(Prefs.PREF_DISTANCE_FILTER, defaultVal: 2.5)

Когда пользователь решает начать отслеживание

locationManager.allowsBackgroundLocationUpdates = true

установлен.

Приложение имеет привилегию «Всегда» для службы определения местоположения.

Есть идеи, что изменилось в iOS 12?


person Michael Konz    schedule 27.09.2018    source источник
comment
У вас установлены фоновые обновления false   -  person Paulw11    schedule 27.09.2018
comment
Да, изначально. Но, как я уже отмечал, пользователь в какой-то момент решает активировать полную функцию отслеживания, а затем этот параметр устанавливается на true   -  person Michael Konz    schedule 27.09.2018
comment
Вы сказали, что для приложения установлены права доступа "Всегда" для службы определения местоположения, но ваш код запускает только requestWhenInUseAuthorization. Вы уверены, что пользователь предоставил always права?   -  person Swapnil Luktuke    schedule 27.09.2018
comment
Чтобы мы могли вам помочь, вам необходимо показать весь соответствующий код.   -  person Paulw11    schedule 27.09.2018
comment
Да, всегда устанавливается в настройках приложения. @ Paulw11: Я уже показал в своем фрагменте кода, что параметр устанавливается позже. Не уверен, какие другие части будут уместны. Имейте в виду, что этот код отлично работал под ios 11.4.x.   -  person Michael Konz    schedule 27.09.2018
comment
Привет, @MichaelKonz. Я создал демонстрационное приложение, чтобы продемонстрировать проблему. Сейчас он находится в режиме тестирования: github.com/flitsmeister/ios-cllocationmanager-background   -  person Sjoerd Perfors    schedule 15.10.2018


Ответы (2)


Похоже, что это ошибка с iOS 12, из-за которой приложения прекращают работу в фоновом режиме без уважительной причины. Я заполнил отчет об ошибке.

См. Дополнительную информацию и демонстрационный проект, чтобы продемонстрировать проблему здесь: iOS 12 без причины завершает работу приложений в фоновом режиме

Ошибка исправлена ​​в iOS 12.2 beta 2 (16E5191d)

person Sjoerd Perfors    schedule 26.10.2018
comment
Вы можете помочь нам отследить эту ошибку? - person Naresh; 31.10.2018
comment
Чем я могу помочь? - person Sjoerd Perfors; 31.10.2018

У меня тоже есть этот вопрос, и вчера вечером я пытаюсь отключить "Не беспокоить", служба определения местоположения в фоновом режиме работает нормально.

Значит, режим «Не беспокоить» может останавливать службу определения местоположения?

Есть ли другой способ избежать остановки службы определения местоположения, кроме отключения «Не беспокоить»?

person AntScript    schedule 29.09.2018
comment
Никогда не включала режим «Не беспокоить» на iPad, который я использую для тестирования. Я реализовал ведение журнала, чтобы узнать, когда и почему приложение завершает работу. Но, конечно, с тех пор этого не произошло ... Я также изменил его на locationManager.requestAlwaysAuthorization() и locationManager.allowsBackgroundLocationUpdates = true при запуске приложения. - person Michael Konz; 01.10.2018