gRPC в фоне на iOS: эксперимент с LocationManager
Хочу поделится кейсом, где нужно было продолжать длительную сетевую операцию после сворачивания приложения, но стандартный background URLSession не подходил.
Часть взаимодействия построена через gRPC, а сам процесс состоит из нескольких этапов и должен уметь переживать сетевые ошибки, паузы и восстановление. Обычный Task или async/await здесь не спасают — после ухода приложения в background iOS всё равно может приостановить выполнение.
Один из вариантов, который я попробовал, — CLLocationManager с background location updates. Пока location-сессия активна, приложение получает дополнительное время выполнения, и вместе с этим продолжает работать сетевой pipeline.
Технически подход работает, но как production-решение он спорный: background location предназначен для реальных location-сценариев, плюс появляются вопросы к battery, permissions, privacy и App Store Review.
Для меня этот эксперимент был полезен скорее как способ понять границы background execution на iOS. Более устойчивый путь — проектировать операции как resumable: сохранять состояние, разбивать процесс на этапы и уметь продолжать его при следующем доступном окне выполнения.
Если у кого-то есть production-опыт с gRPC, WebSocket или другим custom networking в фоне на iOS — с интересом почитаю ваши кейсы.