Как я могу отладить возможность фоновой выборки в iOS? - PullRequest
0 голосов
/ 12 марта 2020

У меня есть приложение с возможностью фоновой выборки. Это была одна из первых реализованных функций, и она работала как чудо - вызывая performFetchWithCompletionHandler каждый указанный интервал времени (10 минут).

Позже в процессе разработки я заметил, что это приложение вообще не выполняет функцию выборки - он был запущен на выходные и не получал ни разу, в то время как предпочтительный интервал был установлен как 10 минут. Не было никаких изменений в каком-либо связанном коде, и я проверил, что он настроен правильно:

  • Фоновый режим «Выборка фона» - проверка
  • вызов setMinimumBackgroundFetchInterval - проверка (прямо в appDidFinishLaunching, 10 * 60)
  • внедрить performFetchWithCompletionHandler - проверка

Я могу инициировать выборку с помощью инструментов отладки Xcode, но нет единого вызова приложения, когда он остается один , Я проверил, что для параметра iOS для фона refre sh установлено значение «ВКЛ» - как глобальная настройка (Wi-Fi и сотовая связь), так и настройка для каждого приложения. Я попытался переустановить приложение, изменив appID, даже полностью очистив iPhone - ничего не помогло.

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

  • iPhone 11 Pro, iOS 13.2.3, TestFlight - работает
  • iPhone 11, iOS 13.3.1, TF - не работает
  • iPhone 8+, iOS 13.2, TF - работает
  • iPhone SE, iOS 13.3.1, Local - не работает
  • iPhone 6, iOS 12.4.5, TF - не работает

My Следующим шагом была попытка отменить изменения с момента последней сборки с успешной выборкой фона. Наиболее заметным изменением, произошедшим за это время, стала реализация прилагаемого приложения-компаньона WatchOS - но как это может нарушить выборку фона? В любом случае, возврат исходного кода также не помог. Более того - я пытался создать пример приложения с простой выборкой в ​​фоновом режиме, чистый шаблон XCode только с тремя изменениями для фоновой выборки (упомянутый ранее) - это тоже не сработало.

Я знаю, что есть BackgroundTasks API теперь в iOS - но, к сожалению, я должен поддерживать старые устройства с iOS 12 в лучшем случае. Тем не менее, я тоже попробовал этот API, используя BGAppRefreshTask - он тоже не работал, но я полагаю, он имеет те же базовые логики c, что и старая фоновая выборка.

Приложение не потребляет много ресурсов - он занимает в среднем около 15 МБ оперативной памяти, а время выполнения - не более 5 секунд - на всякий случай - только один запрос на загрузку файла с тайм-аутом в 10 секунд. Приложение не закрывается из-за нехватки ресурсов или из-за принудительного выхода пользователя. Кроме того, я убедился, что обработчик завершения вызывается вовремя, сразу после окончания загрузки .

Вопрос: Я действительно пропустил какой-то шаг из реализации фоновой выборки? Можно ли нарушить окружающую среду до такой степени? Если так, как я могу узнать, что вызывает все эти проблемы? Или: это нормально, чтобы не иметь ни одного bgFetch в течение нескольких недель? (на данный момент некоторые устройства не делали bgFetch в течение нескольких недель)

...