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 — с интересом почитаю ваши кейсы.