Background Tasks — iOS
background/BackgroundTask
Equivalente Android: BackgroundService + Foreground type=location
Diferente do Android (que mantém um Foreground Service contínuo), no iOS o trabalho em background é dividido entre CLLocationManager com updates contínuos, BGTaskScheduler para tarefas periódicas, e Background Modes para manter sockets vivos.
Arquivos
background/ └── BackgroundTask.swift · agendamento + entrega para o TCPClient
Estratégias usadas
| Estratégia | Para que serve |
|---|---|
CLLocationManager.allowsBackgroundLocationUpdates = true | Manter coleta de GPS com o app em background. |
startMonitoringSignificantLocationChanges() | Wake-up por mudanças significativas quando o app é descartado. |
BGAppRefreshTask / BGProcessingTask | Janelas periódicas para flush de cache LIFO no Socket TCP. |
| Background Modes | location, fetch, remote-notification, processing — definidos em AppMonisatIos.entitlements. |
Filtro de movimento
Mesmo critério do Android: posições são enviadas se houver deslocamento ≥ 10 m ou heartbeat por tempo configurado. O JSON de configuração remoto controla o intervalo dinamicamente.
Limitações iOS vs Android
- iOS não permite Foreground Service contínuo — o app pode ser suspenso a qualquer momento fora dos Background Modes ativos.
BGTaskSchedulernão garante janela fixa: o sistema decide quando executar.- Sockets TCP podem ser fechados pelo SO em background prolongado — reconexão obrigatória ao retorno.