🖥 Автор делится практическими наблюдениями по использованию
BGTaskScheduler в iOS 26 на примере своего приложения для синхронизации календарей. Ключевая мысль: фоновые задачи на iOS нельзя воспринимать как cron - система даёт только возможности, а не гарантии. Тем не менее при аккуратной настройке - регистрация обоих типов задач (BGAppRefreshTask и BGProcessingTask), ограничение времени выполнения, защита от гонок при завершении и агрессивная, но осмысленная перезапись задач - можно получить достаточную надёжность для большинства сценариев.❗️ Пару важных моментов:
➡️ ставьте короткие таймауты (примерно 3 с для обновлений и ~25 с для тяжёлой обработки)
➡️ используйте
token/lock, чтобы вызывать setTaskCompleted(success:) ровно один раз➡️ не переотправляйте задачу при каждом срабатывании (сравнивайте
existingEarliest и desiredEarliest и привязывайтесь к lastRun)➡️ учитывайте требования
requiresExternalPower/Network➡️ форсируйте ресабмит после перезагрузки или обновления ОС.
✏️ Ещё важнее - поведение зависит от действий пользователя: свайп для принудительной остановки убирает фоновые запуски до следующего ручного открытия, длительное неоткрывание приложения приводит к постепенному снижению запусков, а перезагрузка требует первого разблокирования устройства.


