Background Modes — är en uppsättning deklarerbara iOS-funktioner som gör att appen kan fortsätta köra kod efter övergången till bakgrundsläget. Varje läge motsvarar en specifik typ av uppgift: ljud, geolokalisering, VoIP, Bluetooth, fetch och processing. Enligt Apple, 2026 är felaktig användning av Background Modes en av de vanligaste orsakerna till att appar avvisas vid granskning i App Store.
Huvudpunkter
Background Modes — är capability i ett Xcode-projekt som deklarerar appens avsikt att utföra vissa typer av bakgrundsoperationer. Till skillnad från Android, där appen kan starta vilken Service som helst i bakgrunden, kräver iOS explicit angivelse av läget i Info.plist. Varje läge har strikta användningsregler och kontrolleras av Apple vid granskning.
När appen går till bakgrunden pausar iOS den efter 3–5 sekunder. Om appen deklarerar ett Background Mode och aktivt använder motsvarande API (t.ex. AVAudioSession för ljud), flyttar systemet den till ett särskilt körningsläge. Appen finns kvar i RAM-minnet och kan köra kod som begränsas av lägestypen.
iOS stöder följande Background Modes: Audio, Location, VoIP, Bluetooth LE, Background Fetch, Background Processing, External Accessory Communication, Push to Talk (PTT) och HealthKit. Varje läge kräver motivering i appbeskrivningen.
| Läge | Info.plist-nyckel | Syfte | iOS-version |
|---|---|---|---|
| Audio | audio | Bakgrundsljud, AirPlay | 4.0+ |
| Location | location | Positionsspårning | 4.0+ |
| VoIP | voip | VoIP push-meddelanden | 4.0+ |
| BLE | bluetooth-central | Arbete med BLE-enheter | 7.0+ |
| Fetch | fetch | Periodisk datahämtning | 7.0+ |
| Processing | processing | Långa bakgrundsuppgifter | 13.0+ |
| Push to Talk | push-to-talk | Röst-push-to-talk | 16.0+ |
Audio Background Mode — det vanligaste läget, som används av musikspelare, podcastappar och ljudtjänster. Appen kan fortsätta spela upp ljud, styras via Control Center och visas på Lock Screen. För aktivering räcker det att konfigurera AVAudioSession med kategorin .playback.
För ljud i bakgrunden måste du konfigurera AVAudioSession och aktivera den. Kategorin .playback informerar systemet om att appen spelar upp ljud och måste förbli aktiv i bakgrunden. Utan denna konfiguration stoppas ljudet inom 5–10 sekunder efter att appen minimeras.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Ljudsessionfel: \(error)")
}
}
För integration med Control Center och Lock Screen måste du konfigurera MPRemoteCommandCenter. Detta bearbetar kommandona Play, Pause, Next och Previous Track. Du måste också uppdatera MPNowPlayingInfoProperty för att visa metadata: låttitel, artist, omslag och uppspelningsförlopp.
Från och med iOS 14 stöder Background Mode ljud även Picture in Picture för video. Appen kan fortsätta visa video i ett flytande fönster vid minimering. För aktivering använder du AVPictureInPictureController med AVPlayerLayer. Läget fungerar bara om appen spelar upp ett ljudspår.
Location Background Mode gör att appen kan ta emot geolokaliseringsuppdateringar i bakgrunden. Används i navigatorer, fitnesstrackers, leveransappar och sociala nätverk. Utan detta läge får appen bara position en gång vid övergången till bakgrunden, varefter uppdateringarna upphör.
CLLocationManager stöder flera spårningsstrategier: betydande förändringar (significant-change location), standardspårning (standard location) och regionövervakning (region monitoring). För bakgrundsarbete med maximal precision använder du allowsBackgroundLocationUpdates = true och pausesLocationUpdatesAutomatically = false.
Kontinuerlig positionsspårning i bakgrunden är ett av de mest energikrävande scenarierna. iOS justerar automatiskt uppdateringsfrekvensen baserat på rörelsehastigheten: vid promenad var 10–30:e sekund, vid bilkörning var 1–5:e sekund. För navigering använder du desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
Läget significant-change location fungerar utan Location Background Mode — systemet väcker appen endast vid betydande koordinatförändring (vanligtvis 500 m eller mer). Kräver inte kontinuerlig GPS, vilket sparar batteri. Lämpligt för väderappar som uppdaterar data när användaren rör sig.
Bluetooth LE Background Mode gör att appen kan interagera med BLE-enheter i bakgrunden. Används av fitnessarmband, medicinska sensorer, Smart Home-enheter och Beacon-navigering. Läget är uppdelat i två undertyper: bluetooth-central (appen ansluter till enheter) och bluetooth-peripheral (appen fungerar som enhet).
Appen i rollen som Central kan skanna och ansluta BLE-enheter i bakgrunden. För detta måste du ange bluetooth-central i Background Modes och anropa CBCentralManager.scanForPeripherals med alternativet CBCentralManagerScanOptionAllowDuplicatesKey. I bakgrunden fungerar skanning med reducerad frekvens — systemet kan fördröja detektering för att spara energi.
Appen i rollen som Peripheral kan annonsera tjänster och svara på förfrågningar från andra enheter. Bluetooth-peripheral-läget gör att appen kan förbli synlig för andra BLE-enheter även i bakgrunden. Används i HealthKit-appar och IoT-lösningar.
iBeacon-övervakning fungerar i bakgrunden utan extra tillstånd — systemet spårar själv in- och utträde från Beacon-regionen. Men för att skanna Beacon-innehåll (proximity UUID, major, minor) krävs Bluetooth-tillstånd och bluetooth-central Background Mode. Använd CLLocationManager med CLBeaconRegion för övervakning.
VoIP Background Mode är avsett för röstkommunikationsappar (Skype, Zoom, WhatsApp). Läget gör att appen kan förbli ansluten till servern för att ta emot inkommande samtal. Från och med iOS 8 används PushKit för VoIP — ett ramverk som bearbetar Push-meddelanden från VoIP-servern utan APNs inblandning.
PushKit är den enda mekanismen som garanterar leverans av VoIP-meddelanden till enheten. Vid mottagning av ett PushKit-meddelande väcker systemet appen, även om den har avslutats. Appen måste ansluta till servern inom 30 sekunder och visa ett lokalt meddelande om det inkommande samtalet.
import PushKit
class VoIPHandler: NSObject, PKPushRegistryDelegate {
func pushRegistry(
_ registry: PKPushRegistry,
didReceiveIncomingPushWith payload: PKPushPayload,
for type: PKPushType,
completion: @escaping () -> Void
) {
let caller = payload.dictionaryPayload["caller"] as! String
reportIncomingCall(from: caller)
completion()
}
}
PushKit får inte användas för vanliga meddelanden — endast för VoIP, watchOS-kommunikation och filleverantörer. Apple kontrollerar detta vid granskning. Vid otillåten användning avvisas appen. Från och med iOS 13 levererar PushKit endast meddelandet — anrop av CXProvider (CallKit) för att visa samtalskärmen är obligatoriskt.
Background Fetch och Background Processing — lägen för att uppdatera innehåll i bakgrunden och utföra långa uppgifter. Fetch — korta periodiska uppdateringar (upp till 30 s), Processing — långa uppgifter (upp till 10 min) med villkor (Wi-Fi, laddning). Processing är endast tillgängligt från iOS 13+.
Läget Fetch gör att systemet periodvis kan väcka appen för att hämta nytt innehåll. Systemet analyserar användarbeteende och väljer optimal tid. Appen måste anropa completion handlern inom 30 sekunder. Fetch är lämpligt för nyhetsappar, sociala medieflöden och väder.
BGProcessingTask är avsett för uppgifter som kan utföras utan användarmedverkan: rensa cache, synkronisera en stor databas, bearbeta mediafiler. Systemet kör uppgiften endast under gynnsamma förhållanden — enheten på laddning, ansluten till Wi-Fi, inte i Low Power-läge. Tillgängligt upp till 10 minuter.
För BGProcessingTask måste du ange requiresExternalPower och requiresNetworkConnectivity. Systemet kan skjuta upp körningen på obestämd tid om villkoren inte uppfylls. Till skillnad från BGAppRefreshTask, som måste köras minst en gång om dagen, kan Processing förbli okörd i veckor om enheten sällan laddas.
Apple kontrollerar strikt användningen av Background Modes vid granskning av appar. Huvudregel: varje aktiverat läge måste motiveras av appens funktionalitet. Om en app deklarerar Location Mode men inte använder geolokalisering, avvisas den med begäran om att ta bort capability.
De vanligaste överträdelserna: Location Mode utan tydligt behov (appen begär åtkomst för att visa annonser), Audio Mode utan ljuduppspelning i bakgrunden, VoIP utan PushKit, BLE Mode utan Bluetooth-enheter. Apple kan avvisa appen även i uppdateringsfasen om läget inte längre används.
Vid inlämning för granskning, ange i Notes konkret motivering för varje läge. Till exempel: ”Location Background Mode används för att spåra användarens rutt i fitnessfunktionen”. Utan förklaring kan granskaren avvisa appen. För konfidentiella funktioner (VoIP) kan Apple begära ett testkonto.
Använd minimalt nödvändig uppsättning lägen. Om appen behöver ladda data i bakgrunden en gång i timmen — aktivera inte Location Mode, använd Fetch eller BGAppRefreshTask. Överflödiga lägen leder inte bara till avvisning utan skapar också ett negativt intryck: användaren ser i inställningarna att appen använder geolokalisering i bakgrunden.
Vanliga frågor
Det finns ingen gräns för antalet, men varje läge måste motiveras av appens funktionalitet. Att aktivera alla lägen utan behov är en garanterad orsak till avvisning vid granskning. Praktisk gräns är 2–3 lägen per app, annars kommer användaren att se många behörighetsförfrågningar.
Använd UIApplication.shared.applicationState — appen kan kontrollera om den är i bakgrunden (state == .background). Du kan också övervaka meddelandena UIApplication.didEnterBackgroundNotification och willEnterForegroundNotification för att ändra beteende.
Audio — ljuduppspelning via högtalare eller hörlurar. AirPlay — överföring av ljud och video till Apple TV och andra AirPlay-enheter. I praktiken täcker Audio Mode båda scenarierna eftersom AirPlay använder ljudsessionen. Ett separat AirPlay-läge krävs inte från iOS 7+.
Ja, för detta använder du requestWhenInUseAuthorization() istället för requestAlwaysAuthorization(). Appen kommer endast att ta emot position i förgrunden. Om kortvarig spårning i bakgrunden behövs — anropa startUpdatingLocation() och stoppa i willResignActive.
Varje läge ökar energiförbrukningen. Location Mode — det dyraste, kan minska drifttiden med 30–50% vid kontinuerlig spårning. Audio Mode — måttlig (15–20%). Fetch och Processing — minimal (2–5%). BLE Mode — låg (5–10%) tack vare energieffektiviteten hos Bluetooth LE.
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å