iOS 12 закрывает приложения в фоновом режиме без причины - PullRequest
0 голосов
/ 26 октября 2018

Начиная с iOS 12, CLLocationManager больше не работает бесконечно в фоновом режиме.Приложение получает без аварийного завершения в случайное время.Это работало нормально до iOS 12.

Чтобы продемонстрировать эту проблему, я создал пример приложения здесь

Демонстрационное приложение просто запускает CLLocationManager и поддерживает его работу вфон.Работая в фоновом режиме, мы отслеживаем его, регистрируя его.Проблема в том, что приложение закрывается iOS.Демонстрационное приложение создано для демонстрации этой проблемы.

Шаги для воспроизведения

  1. Запустите приложение на устройстве
  2. Большой доступ к Locationmanager
  3. Поместить приложение в фоновый режим
  4. Подождите 1-48 часов

Результат:

Завершение работы приложения

Завершение работы приложения без каких-либо причин по истечении произвольного времени.

Ожидаемый результат:

Приложение все еще работает.

Как это должно работать

Это подтверждается инженером Apple:

Как только обновления CLLocationManager запущены на переднем плане, и вы выполнили всю работу, чтобы он работал в фоновом режиме, обновления местоположения должны выполняться бесконечно в фоновом режиме до тех пор, пока:

  • приложение не станет принудительнымquit
  • устройство перезагружено
  • приложение останавливает обновление местоположения
  • приложение выпускает объект CLLocationManager
  • сбой приложения
  • iOS завершает работу приложения из-заиз-за нехватки памяти
  • объект locationManager освобождается, перевыпускается или перезаписывается.Вы должны убедиться, что ваш контроллер представления не создается, что затем сбрасывает класс locationController.Если это произойдет, когда приложение находится в фоновом режиме, вы перезапустите обновления, что в конечном итоге приведет к приостановке приложения.Вы должны убедиться, что locationController является одноэлементным приложением.
  • сбой приложения.Проверьте, есть ли журналы сбоев на тестируемом устройстве
  • iOS завершает работу приложения из-за нехватки памяти.В этом случае вы найдете журналы JetsamEvent на устройстве, которое показывает, что ваше приложение завершено.Вы можете проверить временные метки и найти ту, которая находится примерно в то время, когда ваше приложение перестало работать.

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я пытался очистить каталоги / tmp и / Library / Caches, когда приложение работает в фоновом режиме без каких-либо изменений в поведении.Я также периодически делал то же самое, когда приложение обрабатывало фоновые местоположения без каких-либо изменений.

0 голосов
/ 26 октября 2018

Обновленный ответ:

Apple исправила эту ошибку в iOS 12.2 beta 2 (16E5191d)

Исходный анализ и обнаружение ошибок:

Вместе с технической поддержкой Apple Developer мы проанализировали эту проблему с помощью файлов Sysdiagnose.Следуя этим рекомендациям , вы можете установить профили для дополнительной регистрации на вашем устройстве.Я не знаю точно, как эти журналы работают и где найти эту проблему, но Apple сделала это для меня и пришла с первым анализом:

О событии приостановки, которое вы наблюдали в 2018/10/10 /22 01: 01: 12: 587 это то, что я вижу (примерно через минуту после регистрации вашего последнего действия)

[CllocationManag: 2725] Завершается описанием: {owner =;target = rw.sp.flitsmeister.frameworks.CllocationManagerBackgroundTest;}

Это в основном говорит о том, что ваше приложение было остановлено, потому что системе требовалось место на диске, и она убила кучу приложений, чтобы она могла удалить свои каталоги / tmp и / Library / Caches.Я видел, что этот процесс немного более агрессивен в iOS 12, но, увидев, что вы работаете на устройстве объемом 256 ГБ и у вас после очистки осталось ~ 179 ГБ, мне трудно поверить, что это оправдано.

После отправки еще нескольких случаев системной диагностики и воспроизведения Apple приложил все усилия, чтобы проанализировать их, и закончил со следующим выводом:

К сожалению, я не принес хороших новостей.

ЭтоОказалось, что в настоящее время в iOS 12 появился новый механизм, который будет периодически прерывать длительно работающие фоновые приложения, так как система нуждается в освобождении ресурсов.В настоящее время этот процесс слишком агрессивен, и я работаю с соответствующими командами, чтобы заставить его вести себя лучше.

Итак, на данный момент я хотел бы, чтобы вы подали отчет об ошибке.Объясните симптомы.И убедитесь, что вы загружаете файлы sysdiagnose вместе с отчетом об ошибке.(Я уже отправил ваши, но новые тоже не помешают).И дайте мне знать номер ошибки, пожалуйста.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...