Significant Location Change (SLC) är en iOS-tjänst för övervakning av stora förflyttningar av enheten, som meddelar appen endast vid betydande förändringar av geografiska koordinater. Till skillnad från GPS-spårning i realtid använder SLC mobiltorn för platsbestämning, vilket säkerställer minimal energiförbrukning. Enligt dokumentation Apple Developer, 2025 gör Significant Location Change det möjligt för appen att ta emot geopositionsuppdateringar utan kontinuerlig GPS-drift, vilket sparar upp till 90% batteri jämfört med kontinuerlig spårning.
Huvudpunkter
Significant Location Change (SLC) är en energieffektiv iOS-geolokaliseringstjänst inbyggd i Core Location-ramverket. Den är avsedd för appar som behöver övervaka stora förflyttningar av användaren utan kontinuerlig användning av GPS-modulen. SLC aktiveras automatiskt vid övergång mellan mobiltorn och meddelar appen via delegaten CLLocationManagerDelegate med metoden didUpdateLocations.
Till skillnad från GPS-nivåspårning (standard startUpdatingLocation) kräver SLC inte kontinuerlig aktivitet av processorn och GPS-chippet. iOS använder signaler från mobiltorn för att bestämma ungefärlig plats och startar appen endast vid upptäckt av en betydande koordinatskillnad. Detta gör att appen kan “sova” mellan uppdateringar, med minimal energiförbrukning.
SLC är tillgängligt på alla enheter med mobilmodul från och med iOS 5. På iPod Touch och iPad Wi-Fi Only är tjänsten inte tillgänglig eftersom mobiltorn används för koordinatbestämning. Core Location bestämmer automatiskt vilka händelser som anses betydande — utvecklaren kan inte konfigurera SLC-känsligheten eller ange minsta avstånd för utlösare.
SLC är idealiskt för appar som inte behöver hög noggrannhet på geoposition: väder-trackers, leveranstjänster, appar för att hitta närliggande objekt, analys av besökta platser. SLC används även av iOS-systemet för att aktivera geozoner (Geofencing) i energisparläge. Navigationsappar kräver mer exakt GPS-spårning.
Significant Location Change fungerar baserat på analys av identifierare för mobiltorn (Cell ID) som enheten tar emot vid anslutning till nätverket. iOS upprätthåller en databas med tornkoordinater och kan bestämma ungefärlig plats utan att aktivera GPS. När enheten går över till ett nytt torn, jämför systemet den nya och tidigare platsen och startar appen för bearbetning om skillnaden är betydande.
Systemet använder en klusteransats: det geografiska utrymmet delas in i kluster med en viss radie. SLC genererar en händelse endast vid överskridande av klustergränsen, inte vid varje mikroförflyttning inom det. Detta förhindrar lavinartade app-anrop vid rörelse inom samma täckningszon (t.ex. i en byggnad eller stadsdel). Noggrannhet för SLC varierar från 500 meter till flera kilometer beroende på tätheten av mobiltorn.
När iOS upptäcker en betydande förändring, väcker den appen från bakgrundsstatus (om den inte är startad) och överför händelsen till Core Location-delegaten. Appen får kort tid för bearbetning (cirka 10–30 sekunder bakgrundstid) — under denna tid måste koordinaterna bearbetas och vid behov en mer exakt uppdatering via GPS planeras.
SLC har privilegiet att väcka appen från status Suspended eller Background. Om appen har dödats av systemet på grund av minnesbrist kommer SLC att starta om den (relaunch) i bakgrunden. För detta måste appen vara prenumererad på UIApplication.LaunchOptionsKey.location i metoden didFinishLaunchingWithOptions. Efter bearbetning av händelsen kan systemet återigen överföra appen till status Suspended.
Utlösare för SLC bestäms uteslutande av iOS-systemet — utvecklaren kan inte programmatiskt påverka vilken koordinatförändring som anses ”betydande”. Det finns dock dokumenterade scenarier där SLC garanterat genererar en händelse. Att förstå dessa utlösare hjälper utvecklaren att designa korrekt appbeteende.
Cell tower change — den huvudsakliga utlösaren för SLC. När enheten växlar mellan mobiltorn (vid rörelse genom staden, på vägen), kontrollerar systemet om koordinaterna mellan gammalt och nytt torn har ändrats tillräckligt. Om så är fallet genereras en händelse. I stadsmiljöer med tätt tornnätverk kan SLC aktiveras varje 1–3 kilometer.
Om någon annan app eller systemtjänst (t.ex. ”Hitta iPhone”, navigering) aktiverar GPS-modulen, kan SLC även få en uppdatering av exakta koordinater. Detta är en bieffekt: GPS bestämmer exakt plats och iOS överför den till alla appar som prenumererar på SLC. Man kan dock inte lita på denna utlösare — den är inte garanterad.
Även om SLC inte använder Wi-Fi direkt, kan byte av Wi-Fi-nätverk indirekt orsaka en händelse om enheten får nya koordinater via Apple Location Service (platsbestämning baserat på Wi-Fi-databaser). iOS hash-koordinaterna för Wi-Fi-åtkomstpunkter och använder dem för att förfina positionen mellan tornbyten.
| Utlösare | Garanti | Fördröjning | Noggrannhet |
|---|---|---|---|
| Byte av mobiltorn | Hög | 1–30 s | 500 m – 3 km |
| GPS från andra appar | Låg | Omedelbart | Upp till 10 m |
| Byte av Wi-Fi | Medel | Upp till 5 min | 100–500 m |
iOS tillhandahåller flera mekanismer för att få geolokalisering, var och en med sin egen noggrannhet, energiförbrukning och användningsscenarier. Significant Location Change ligger mellan grov approximation via torn och exakt GPS-spårning, och erbjuder en optimal balans för appar som inte behöver hög realtidsnoggrannhet.
Standard Location Service (startUpdatingLocation()) använder GPS, Wi-Fi och mobiltorn för maximalt exakt koordinatbestämning. Noggrannhet upp till 10 meter, men energiförbrukningen är hög — GPS-modulen är ständigt aktiv. Lämplig för navigering, fitness-trackers, AR-appar. SLC använder däremot inte GPS kontinuerligt och har en noggrannhet på 500 meter eller lägre.
Region Monitoring övervakar in- och utträde ur definierade geografiska zoner. Till skillnad från SLC bestämmer utvecklaren själv regiongränserna (radie från 100 meter). Geofencing använder SLC som en hjälpmekanism — systemet bestämmer först ungefärlig plats via SLC och aktiverar sedan GPS för exakt bestämning av in-/utträde. Maximalt antal övervakade regioner — 20.
Visit Monitoring — en specialiserad iOS 8+-tjänst som övervakar besök av platser (ankomst och avresa). Den använder en kombination av SLC och andra signaler för att bestämma när användaren har stannat på en plats och när den har lämnat den. Visit Monitoring är mer energieffektivt än SLC eftersom det genererar färre händelser och använder maskininlärning på enheten.
| Tjänst | Noggrannhet | Energiförbrukning | Bakgrund |
|---|---|---|---|
| SLC | 500 m – 3 km | Mycket låg | Ja |
| Standard GPS | Upp till 10 m | Hög | Kräver tillstånd |
| Geofencing | Från 100 m | Låg | Ja |
| Visit Monitoring | Upp till 100 m | Mycket låg | Ja |
SLC är det mest energieffektiva sättet att få geolokalisering på iOS, bortsett från Visit Monitoring. Enligt Apple förbrukar SLC cirka 0,1–0,5% batteri per timme i ett typiskt användningsscenario, medan kontinuerlig GPS-spårning kan förbruka 5–10% per timme. Besparingen uppnås genom att GPS-modulen endast aktiveras under kort tid för koordinatverifiering vid varje händelse.
iOS hanterar SLC:s energiförbrukning genom batterioptimering. Om systemet märker att appen bearbetar SLC-händelser för ofta (t.ex. enheten rör sig med tåg och frekventa tornbyten genererar många händelser), kan iOS tillfälligt minska notifieringsfrekvensen. Detta är en automatisk mekanism — utvecklaren kan inte stänga av den.
Med varje större iOS-version skärper Apple policyn för bakgrundsåtkomst till geolokalisering. Från och med iOS 13 har dialogrutan för tillståndsförfrågan för bakgrundsanvändning av plats ändrats: användaren måste uttryckligen välja ”Always” (Alltid), inte bara ”While Using” (Medan den används). Utan Always-tillstånd fungerar inte SLC när appen är i bakgrunden eller dödad av systemet.
Låt oss titta på den fullständiga implementeringen av Significant Location Change i Swift. Exemplet omfattar konfiguration av CLLocationManager, Always-tillståndsförfrågan, start av övervakning, händelsehantering och stöd för omstart av appen efter att den dödats av systemet. Koden använder modern Swift med async/await för koordinatbearbetning och bakgrundsuppgifter 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)")
}
}
Om appen har dödats av systemet kommer SLC automatiskt att starta om den vid en ny händelse. I AppDelegate måste en kontroll av start via platshändelse med UIApplication.LaunchOptionsKey.location läggas till. Efter omstart måste appen initiera CLLocationManager och anropa startMonitoringSignificantLocationChanges() för att fortsätta övervakningen.
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
}
}
Korrekt användning av Significant Location Change kräver en balans mellan funktionalitet och energieffektivitet. Apple kontrollerar strikt bakgrundsåtkomst till geolokalisering och appar som missbrukar SLC eller använder det utan tydligt behov riskerar avslag vid publicering i App Store.
I Info.plist måste motiveringstext läggas till: NSLocationAlwaysAndWhenInUseUsageDescription och NSLocationWhenInUseUsageDescription. Beskrivningen måste tydligt förklara varför appen behöver bakgrundsåtkomst till geolokalisering. App Review läser dessa texter och kan avvisa appen om motiveringen är otillräcklig eller formuleringarna är otydliga. Exempel: ”Den här appen använder SLC för att uppdatera väderprognosen under din förflyttning.”
Starta inte dyra operationer (GPS-plats, nätverksförfrågningar) vid varje SLC-händelse. SLC kan generera dussintals händelser per timme vid förflyttning med transport. Använd debounding: spara tiden för senaste fullständiga uppdateringen och hoppa över bearbetning om mindre än 5–10 minuter har gått sedan föregående uppdatering. Detta sparar batteri och nätverkstrafik.
För långvarig bearbetning efter en SLC-händelse, använd BGTaskScheduler. När appen tar emot en SLC-händelse kan den schemalägga en bakgrundsuppgift via BGProcessingTaskRequest eller BGAppRefreshTaskRequest. Detta gör det möjligt att skjuta upp resurskrävande operationer (synkronisering med server, ruttanalys) till närmaste bakgrundsexekveringsfönster, utan att blockera huvudflödet för SLC-svar.
Vanliga frågor
Significant Location Change (SLC) är en energieffektiv iOS-tjänst för övervakning av stora förflyttningar av enheten baserat på mobiltorn. Den förbrukar upp till 90% mindre energi än kontinuerlig GPS-spårning och är lämplig för appar som inte behöver hög noggrannhet på geoposition.
Noggrannheten för SLC varierar från 500 meter till 3 kilometer beroende på tätheten av mobiltorn. I stadsmiljöer är noggrannheten högre (närmare 500 m), på landsbygden — lägre (upp till flera kilometer). SLC är inte avsett för exakt koordinatbestämning — det är en resurs för grov övervakning av förflyttningar.
Anropa CLLocationManager.requestAlwaysAuthorization() efter att ha lagt till texten NSLocationAlwaysAndWhenInUseUsageDescription i Info.plist. Från och med iOS 13 måste användaren uttryckligen välja ”Always” (Alltid) i systemdialogrutan. Utan detta tillstånd fungerar inte SLC i bakgrunden.
Ja, SLC kan starta om appen om den har dödats av systemet på grund av minnesbrist. Vid start, kontrollera UIApplication.LaunchOptionsKey.location i metoden didFinishLaunchingWithOptions och anropa startMonitoringSignificantLocationChanges() för att fortsätta övervakningen.
SLC använder endast mobiltorn och aktiverar inte GPS kontinuerligt, vilket ger upp till 90% batteribesparing. Noggrannhet — från 500 m till 3 km. Standard Location Service använder GPS, Wi-Fi och torn, noggrannhet upp till 10 m, men förbrukar betydligt mer energi. SLC är lämpligt för bakgrundsövervakning, GPS — för navigering.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också