Significant Location Change (SLC) é um serviço do iOS para monitorar grandes deslocamentos do dispositivo que notifica o aplicativo apenas quando ocorrem mudanças significativas nas coordenadas geográficas. Ao contrário do rastreamento GPS em tempo real, o SLC utiliza torres de celular para determinar a localização, garantindo consumo mínimo de energia. De acordo com a documentação da Apple Developer, 2025, o Significant Location Change permite que o aplicativo receba atualizações de geolocalização sem o funcionamento constante do GPS, economizando até 90% da carga da bateria em comparação com o rastreamento contínuo.
Principais pontos
Significant Location Change (SLC) é um serviço de geolocalização energeticamente eficiente do iOS integrado ao framework Core Location. Ele foi projetado para aplicativos que precisam rastrear grandes deslocamentos do usuário sem usar constantemente o módulo GPS. O SLC é ativado automaticamente ao alternar entre torres de celular e notifica o aplicativo através do delegate CLLocationManagerDelegate pelo método didUpdateLocations.
Ao contrário do rastreamento em nível GPS (o padrão startUpdatingLocation), o SLC não requer atividade constante do processador ou do chip GPS. O iOS utiliza sinais de torres de celular para determinar a localização aproximada e inicia o aplicativo apenas quando detecta uma diferença significativa de coordenadas. Isso permite que o aplicativo “durma” entre as atualizações, consumindo mínima energia.
O SLC está disponível em todos os dispositivos com módulo celular, a partir do iOS 5. No iPod Touch e iPad apenas Wi-Fi, o serviço não está disponível porque utiliza torres de celular para determinar as coordenadas. O Core Location decide automaticamente quais eventos são considerados significativos — o desenvolvedor não pode configurar a sensibilidade do SLC nem especificar uma distância mínima para o gatilho.
O SLC é ideal para aplicativos que não exigem alta precisão de geolocalização: rastreadores meteorológicos, serviços de entrega, aplicativos para encontrar lugares próximos e análise de locais visitados. O SLC também é usado pelo sistema iOS para ativar o Geofencing no modo de economia de energia. Aplicativos de navegação exigem um rastreamento GPS mais preciso.
O Significant Location Change funciona analisando identificadores de torres de celular (Cell ID) que o dispositivo recebe ao se conectar à rede. O iOS mantém um banco de dados de coordenadas de torres e pode determinar a localização aproximada sem ativar o GPS. Quando o dispositivo muda para uma nova torre, o sistema compara a nova localização com a anterior e, se a diferença for significativa, inicia o aplicativo para processar o evento.
O sistema utiliza uma abordagem de cluster: o espaço geográfico é dividido em clusters de um determinado raio. O SLC gera um evento apenas ao cruzar o limite de um cluster, não a cada microdeslocamento dentro dele. Isso evita chamadas em avalanche ao aplicativo ao se mover dentro de uma mesma área de cobertura (por exemplo, dentro de um edifício ou bairro). A precisão do SLC varia de 500 metros a vários quilômetros, dependendo da densidade de torres de celular.
Quando o iOS detecta uma mudança significativa, ele desperta o aplicativo do estado de segundo plano (se não estiver em execução) e passa o evento para o delegate do Core Location. O aplicativo recebe um tempo curto de processamento (cerca de 10–30 segundos em segundo plano) — suficiente para processar as coordenadas e, se necessário, agendar uma atualização mais precisa via GPS.
O SLC tem o privilégio de despertar o aplicativo do estado Suspenso ou em Segundo Plano. Se o aplicativo foi encerrado pelo sistema devido à falta de memória, o SLC o reiniciará (relançamento) em segundo plano. Para isso, o aplicativo deve se inscrever em UIApplication.LaunchOptionsKey.location no método didFinishLaunchingWithOptions. Após processar o evento, o sistema pode retornar o aplicativo ao estado Suspenso.
Os gatilhos do SLC são determinados exclusivamente pelo sistema iOS — o desenvolvedor não pode influenciar programaticamente quais mudanças de coordenadas são consideradas “significativas”. No entanto, existem cenários documentados nos quais o SLC gera um evento de forma garantida. Compreender esses gatilhos ajuda o desenvolvedor a projetar o comportamento correto do aplicativo.
A mudança de torre de celular é o gatilho principal do SLC. Quando o dispositivo alterna entre torres de celular (ao se mover pela cidade ou estrada), o sistema verifica se as coordenadas mudaram o suficiente entre a torre antiga e a nova. Se sim, um evento é gerado. Em áreas urbanas com uma rede densa de torres, o SLC pode ser acionado a cada 1–3 quilômetros.
Se qualquer outro aplicativo ou serviço do sistema (por exemplo, “Buscar iPhone”, navegação) ativar o módulo GPS, o SLC também pode receber uma atualização precisa de coordenadas. Isso é um efeito colateral: o GPS determina a localização exata e o iOS a transmite para todos os aplicativos inscritos no SLC. No entanto, não é recomendado confiar neste gatilho — ele não é garantido.
Embora o SLC não utilize Wi-Fi diretamente, a troca de rede Wi-Fi pode indiretamente causar um evento se o dispositivo receber novas coordenadas através do Apple Location Service (localização baseada em bancos de dados Wi-Fi). O iOS faz hash das coordenadas dos pontos de acesso Wi-Fi e as utiliza para refinar a posição entre as trocas de torre.
| Gatilho | Garantia | Latência | Precisão |
|---|---|---|---|
| Troca de torre celular | Alta | 1–30 seg | 500 m – 3 km |
| GPS de outros apps | Baixa | Instantâneo | Até 10 m |
| Troca de Wi-Fi | Média | Até 5 min | 100–500 m |
O iOS fornece vários mecanismos para obter geolocalização, cada um com sua própria precisão, consumo de energia e casos de uso. O Significant Location Change ocupa um nicho entre a aproximação grosseira por torres e o rastreamento GPS preciso, oferecendo um equilíbrio ótimo para aplicativos que não precisam de alta precisão em tempo real.
O Standard Location Service (startUpdatingLocation()) utiliza GPS, Wi-Fi e torres de celular para máxima precisão de coordenadas. A precisão é de até 10 metros, mas o consumo de energia é alto — o módulo GPS fica constantemente ativo. Adequado para navegação, rastreadores fitness e aplicativos de RA. O SLC, ao contrário, não usa GPS constantemente e tem precisão de 500 metros ou menos.
O Region Monitoring rastreia a entrada e saída de zonas geográficas definidas. Ao contrário do SLC, o desenvolvedor define os limites das regiões (raio a partir de 100 metros). O Geofencing usa o SLC como mecanismo auxiliar — o sistema primeiro determina a localização aproximada via SLC e depois ativa o GPS para detecção precisa de entrada/saída. O número máximo de regiões monitoradas é 20.
O Visit Monitoring é um serviço especializado do iOS 8+ que rastreia visitas a locais (chegada e partida). Ele usa uma combinação de SLC e outros sinais para determinar quando um usuário parou em um local e quando o deixou. O Visit Monitoring é mais eficiente energeticamente que o SLC, pois gera menos eventos e usa aprendizado de máquina no dispositivo.
| Serviço | Precisão | Consumo de energia | Segundo plano |
|---|---|---|---|
| SLC | 500 m – 3 km | Muito baixo | Sim |
| GPS padrão | Até 10 m | Alto | Requer permissão |
| Geofencing | A partir de 100 m | Baixo | Sim |
| Visit Monitoring | Até 100 m | Muito baixo | Sim |
O SLC é a maneira mais eficiente energeticamente de obter geolocalização no iOS, exceto pelo Visit Monitoring. De acordo com a Apple, o SLC consome aproximadamente 0,1–0,5% da carga da bateria por hora em um cenário típico de uso, enquanto o rastreamento GPS contínuo pode consumir 5–10% por hora. A economia é alcançada porque o módulo GPS é ativado apenas por um curto período para verificar as coordenadas a cada evento.
O iOS gerencia o consumo de energia do SLC através da otimização da bateria. Se o sistema perceber que o aplicativo está processando eventos SLC com muita frequência (por exemplo, o dispositivo está se movendo em um trem e as frequentes trocas de torre geram muitos eventos), o iOS pode reduzir temporariamente a frequência das notificações. Este é um mecanismo automático — o desenvolvedor não pode desativá-lo.
A cada grande versão do iOS, a Apple endurece as políticas de acesso à geolocalização em segundo plano. A partir do iOS 13, o diálogo do sistema para solicitar permissão de localização em segundo plano mudou: o usuário deve selecionar explicitamente “Sempre” em vez de apenas “Ao usar o aplicativo”. Sem a permissão Sempre, o SLC não funcionará quando o aplicativo estiver em segundo plano ou for encerrado pelo sistema.
Vamos ver uma implementação completa do Significant Location Change em Swift. O exemplo inclui configuração do CLLocationManager, solicitação da permissão Sempre, início do monitoramento, manipulação de eventos e suporte para reinicialização do aplicativo após ser encerrado pelo sistema. O código usa Swift moderno com async/await para processamento de coordenadas e tarefas em segundo plano via BGTaskScheduler.
import CoreLocation
import UIKit
class LocationManager: NSObject, CLLocationManagerDelegate {
private let manager = CLLocationManager()
override init() {
super.init()
manager.delegate = self
manager.pausesLocationUpdatesAutomatically = true
manager.desiredAccuracy = kCLLocationAccuracyThreeKilometers
}
func requestAlwaysAuthorization() {
manager.requestAlwaysAuthorization()
}
func startSignificantLocationUpdates() {
manager.startMonitoringSignificantLocationChanges()
}
func locationManager(_ manager: CLLocationManager,
didUpdateLocations locations: [CLLocation]) {
guard let location = locations.last else { return }
Task.detached {
await LocationProcessor.handleLocationUpdate(location)
}
}
func locationManager(_ manager: CLLocationManager,
didFailWithError error: Error) {
Logger.log("SLC error: \(error.localizedDescription)")
}
}
Se o aplicativo foi encerrado pelo sistema, o SLC o reiniciará automaticamente quando um novo evento ocorrer. No AppDelegate, é necessário adicionar uma verificação de inicialização por evento de localização via UIApplication.LaunchOptionsKey.location. Após a reinicialização, o aplicativo deve inicializar o CLLocationManager e chamar startMonitoringSignificantLocationChanges() para continuar o monitoramento.
class AppDelegate: NSObject, UIApplicationDelegate {
private let manager = LocationManager()
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions:
[UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if launchOptions?.keys.contains(.location) == true {
Logger.log("App relaunched by SLC event")
}
manager.requestAlwaysAuthorization()
manager.startSignificantLocationUpdates()
return true
}
}
O uso correto do Significant Location Change requer um equilíbrio entre funcionalidade e eficiência energética. A Apple controla rigorosamente o acesso em segundo plano à geolocalização, e aplicativos que abusam do SLC ou o usam sem necessidade clara correm o risco de rejeição ao publicar na App Store.
No Info.plist, é necessário adicionar strings de justificativa: NSLocationAlwaysAndWhenInUseUsageDescription e NSLocationWhenInUseUsageDescription. A descrição deve explicar claramente por que o aplicativo precisa de acesso à geolocalização em segundo plano. A App Review lê essas strings e pode rejeitar o aplicativo se a justificativa for insuficiente ou a redação for vaga. Exemplo: “Este aplicativo usa SLC para atualizar a previsão do tempo quando você se desloca.”
Não inicie operações caras (localização GPS, requisições de rede) a cada evento SLC. O SLC pode gerar dezenas de eventos por hora ao se mover em transporte. Use debouncing: salve o horário da última atualização completa e pule o processamento se menos de 5–10 minutos se passaram desde a última atualização. Isso economizará bateria e tráfego de rede.
Para processamento prolongado após um evento SLC, use o BGTaskScheduler. Quando o aplicativo recebe um evento SLC, ele pode agendar uma tarefa em segundo plano via BGProcessingTaskRequest ou BGAppRefreshTaskRequest. Isso permite adiar operações intensivas em recursos (sincronização com servidor, análise de rota) para a próxima janela de execução em segundo plano, sem bloquear a thread principal de resposta ao SLC.
Perguntas frequentes
O Significant Location Change (SLC) é um serviço eficiente do iOS para monitorar grandes deslocamentos do dispositivo baseado em torres de celular. Ele consome até 90% menos energia que o rastreamento GPS contínuo e é adequado para aplicativos que não exigem alta precisão de geolocalização.
A precisão do SLC varia de 500 metros a 3 quilômetros, dependendo da densidade de torres de celular. Em áreas urbanas, a precisão é maior (próxima de 500 m), enquanto em áreas rurais é menor (até vários quilômetros). O SLC não foi projetado para determinação precisa de coordenadas — é um recurso para monitoramento aproximado de deslocamentos.
Chame CLLocationManager.requestAlwaysAuthorization() após adicionar a string NSLocationAlwaysAndWhenInUseUsageDescription no Info.plist. A partir do iOS 13, o usuário deve selecionar explicitamente “Sempre” no diálogo do sistema. Sem essa permissão, o SLC não funciona em segundo plano.
Sim, o SLC pode reiniciar um aplicativo se ele foi encerrado pelo sistema devido à falta de memória. Ao iniciar, verifique UIApplication.LaunchOptionsKey.location no método didFinishLaunchingWithOptions e chame startMonitoringSignificantLocationChanges() para continuar o monitoramento.
O SLC usa apenas torres de celular e não ativa o GPS constantemente, proporcionando economia de bateria de até 90%. A precisão varia de 500 m a 3 km. O Standard Location Service usa GPS, Wi-Fi e torres, com precisão de até 10 m, mas consome significativamente mais energia. O SLC é adequado para monitoramento em segundo plano, o GPS para navegação.
Resumo
Vamos desenvolver um aplicativo móvel chave na mão
A IT Sectr cria aplicativos para iOS e Android para startups e empresas desde 2017. Nós vamos aconselhá-lo e propor a melhor solução.
Leia também