Background Modes — je sada deklarovatelných schopností iOS, které umožňují aplikaci pokračovat v provádění kódu po přechodu do režimu pozadí. Každý režim odpovídá určitému typu úloh: audio, geolokace, VoIP, Bluetooth, fetch a processing. Podle Apple, 2026 je nesprávné použití Background Modes jedním z častých důvodů zamítnutí aplikací při revizi v App Store.
Hlavní body
Background Modes — jsou capability projektu Xcode, které deklarují záměr aplikace provádět určité typy operací na pozadí. Na rozdíl od Androidu, kde aplikace může spustit jakýkoli Service na pozadí, iOS vyžaduje explicitní uvedení režimu v Info.plist. Každý režim má přísná pravidla použití a je kontrolován Apple při revizi.
Když aplikace přejde na pozadí, iOS ji pozastaví po 3–5 sekundách. Pokud aplikace deklaruje Background Mode a aktivně používá odpovídající API (např. AVAudioSession pro audio), systém ji převede do speciálního režimu provádění. Aplikace zůstává v paměti RAM a může provádět kód omezený typem režimu.
iOS podporuje následující Background Modes: Audio, Location, VoIP, Bluetooth LE, Background Fetch, Background Processing, External Accessory Communication, Push to Talk (PTT) a HealthKit. Každý režim vyžaduje odůvodnění v popisu aplikace.
| Režim | Klíč Info.plist | Účel | Verze iOS |
|---|---|---|---|
| Audio | audio | Audio na pozadí, AirPlay | 4.0+ |
| Location | location | Sledování polohy | 4.0+ |
| VoIP | voip | VoIP push oznámení | 4.0+ |
| BLE | bluetooth-central | Práce s BLE zařízeními | 7.0+ |
| Fetch | fetch | Periodické stahování dat | 7.0+ |
| Processing | processing | Dlouhodobé úlohy na pozadí | 13.0+ |
| Push to Talk | push-to-talk | Hlasové push-to-talk | 16.0+ |
Audio Background Mode — nejrozšířenější režim, používaný hudebními přehrávači, podcastovými aplikacemi a audio službami. Aplikace může pokračovat v přehrávání zvuku, být ovládána přes Control Center a zobrazovat se na Lock Screen. Pro aktivaci stačí nakonfigurovat AVAudioSession s kategorií .playback.
Pro práci zvuku na pozadí je třeba nakonfigurovat AVAudioSession a aktivovat ji. Kategorie .playback informuje systém, že aplikace přehrává zvuk a musí zůstat aktivní na pozadí. Bez této konfigurace se zvuk zastaví do 5–10 sekund po minimalizaci aplikace.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Chyba audio relace: \(error)")
}
}
Pro integraci s Control Center a Lock Screen je třeba nakonfigurovat MPRemoteCommandCenter. Ten zpracovává příkazy Play, Pause, Next a Previous Track. Také je třeba aktualizovat MPNowPlayingInfoProperty pro zobrazení metadat: název skladby, interpret, obal a průběh přehrávání.
Od iOS 14 podporuje Background Mode audio také Picture in Picture pro video. Aplikace může pokračovat v zobrazování videa v plovoucím okně při minimalizaci. Pro aktivaci použijte AVPictureInPictureController s AVPlayerLayer. Režim funguje pouze pokud aplikace přehrává zvukovou stopu.
Location Background Mode umožňuje aplikaci přijímat aktualizace geolokace na pozadí. Používá se v navigacích, fitness trackerech, doručovacích aplikacích a sociálních sítích. Bez tohoto režimu aplikace obdrží polohu pouze jednou při přechodu na pozadí, poté aktualizace ustanou.
CLLocationManager podporuje několik strategií sledování: významné změny (significant-change location), standardní sledování (standard location) a sledování regionů (region monitoring). Pro práci na pozadí s maximální přesností použijte allowsBackgroundLocationUpdates = true a pausesLocationUpdatesAutomatically = false.
Kontinuální sledování polohy na pozadí je jeden z nejnáročnějších scénářů na energii. iOS automaticky přizpůsobuje frekvenci aktualizací podle rychlosti pohybu: při chůzi každých 10–30 sekund, při jízdě autem každých 1–5 sekund. Pro navigaci použijte desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
Režim significant-change location funguje bez Location Background Mode — systém probouzí aplikaci pouze při významné změně souřadnic (obvykle 500 m a více). Nevyžaduje nepřetržité zapnutí GPS, což šetří baterii. Vhodný pro počasové aplikace, které aktualizují data při pohybu uživatele.
Bluetooth LE Background Mode umožňuje aplikaci interagovat s BLE zařízeními na pozadí. Používají jej fitness náramky, lékařské senzory, zařízení Smart Home a navigace Beacon. Režim se dělí na dva podtypy: bluetooth-central (aplikace se připojuje k zařízením) a bluetooth-peripheral (aplikace vystupuje jako zařízení).
Aplikace v roli Central může skenovat a připojovat BLE zařízení na pozadí. K tomu je třeba uvést bluetooth-central v Background Modes a zavolat CBCentralManager.scanForPeripherals s volbou CBCentralManagerScanOptionAllowDuplicatesKey. Na pozadí skenování pracuje se sníženou frekvencí — systém může zpozdit detekci kvůli úspoře energie.
Aplikace v roli Peripheral může inzerovat služby a odpovídat na požadavky jiných zařízení. Režim bluetooth-peripheral umožňuje aplikaci zůstat viditelnou pro jiná BLE zařízení i na pozadí. Používá se v aplikacích HealthKit a IoT řešeních.
Sledování iBeacon funguje na pozadí bez dalších oprávnění — systém sám sleduje vstup a výstup z regionu Beacon. Ale pro skenování obsahu Beacon (proximity UUID, major, minor) je potřeba oprávnění Bluetooth a bluetooth-central Background Mode. Pro sledování použijte CLLocationManager s CLBeaconRegion.
VoIP Background Mode je určen pro aplikace hlasové komunikace (Skype, Zoom, WhatsApp). Režim umožňuje aplikaci zůstat připojenou k serveru pro příjem příchozích hovorů. Od iOS 8 se pro VoIP používá PushKit — framework, který zpracovává Push oznámení z VoIP serveru bez účasti APNs.
PushKit je jediný mechanismus, který zaručuje doručení VoIP oznámení na zařízení. Při přijetí PushKit oznámení systém probudí aplikaci, i když byla ukončena. Aplikace se musí do 30 sekund připojit k serveru a zobrazit místní oznámení o příchozím hovoru.
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 nelze použít pro běžná oznámení — pouze pro VoIP, watchOS komunikaci a poskytovatele souborů. Apple to kontroluje při revizi. Při neoprávněném použití je aplikace zamítnuta. Od iOS 13 PushKit pouze doručuje oznámení — volání CXProvider (CallKit) pro zobrazení obrazovky hovoru je povinné.
Background Fetch a Background Processing — režimy pro aktualizaci obsahu na pozadí a provádění dlouhodobých úloh. Fetch — krátké periodické aktualizace (do 30 s), Processing — dlouhodobé úlohy (do 10 min) s podmínkami (Wi-Fi, nabíjení). Processing je dostupný pouze od iOS 13+.
Režim Fetch umožňuje systému periodicky probouzet aplikaci pro stažení čerstvého obsahu. Systém analyzuje chování uživatele a vybírá optimální čas. Aplikace musí zavolat completion handler do 30 sekund. Fetch je vhodný pro zpravodajské aplikace, feedy sociálních sítí a počasí.
BGProcessingTask je určena pro úlohy, které lze provádět bez účasti uživatele: čištění mezipaměti, synchronizace velké databáze, zpracování mediálních souborů. Systém spouští úlohu pouze za příznivých podmínek — zařízení na nabíječce, připojeno k Wi-Fi, není v režimu Low Power. K dispozici až 10 minut.
Pro BGProcessingTask je třeba uvést requiresExternalPower a requiresNetworkConnectivity. Systém může odložit provedení na neurčito, pokud nejsou splněny podmínky. Na rozdíl od BGAppRefreshTask, který se musí provést alespoň jednou denně, Processing nemusí být proveden týdny, pokud je zařízení nabíjeno zřídka.
Apple přísně kontroluje použití Background Modes při revizi aplikací. Hlavní pravidlo: každý zapnutý režim musí být odůvodněn funkcionalitou aplikace. Pokud aplikace deklaruje Location Mode, ale nepoužívá geolokaci, bude zamítnuta s požadavkem na odstranění capability.
Nejčastější porušení: Location Mode bez zjevné potřeby (aplikace žádá o přístup pro zobrazování reklam), Audio Mode bez přehrávání zvuku na pozadí, VoIP bez PushKit, BLE Mode bez Bluetooth zařízení. Apple může zamítnout aplikaci i ve fázi aktualizace, pokud režim již není používán.
Při odesílání k revizi uveďte v Notes konkrétní odůvodnění každého režimu. Například: „Location Background Mode se používá pro sledování trasy uživatele ve fitness funkci”. Bez vysvětlení může recenzent aplikaci zamítnout. Pro důvěrné funkce (VoIP) může Apple požádat o testovací účet.
Používejte minimálně nezbytnou sadu režimů. Pokud aplikace potřebuje stahovat data na pozadí jednou za hodinu — nezapínejte Location Mode, použijte Fetch nebo BGAppRefreshTask. Nadbytečné režimy nejen vedou k zamítnutí, ale také vytvářejí negativní dojem: uživatel v nastavení vidí, že aplikace používá geolokaci na pozadí.
Často kladené otázky
Neexistuje omezení počtu, ale každý režim musí být odůvodněn funkcionalitou aplikace. Zapnutí všech režimů bez potřeby je garantovaný důvod zamítnutí při revizi. Praktické omezení je 2–3 režimy na aplikaci, jinak uživatel uvidí mnoho žádostí o oprávnění.
Použijte UIApplication.shared.applicationState — aplikace může zkontrolovat, zda je na pozadí (state == .background). Můžete také sledovat oznámení UIApplication.didEnterBackgroundNotification a willEnterForegroundNotification pro změnu chování.
Audio — přehrávání zvuku přes reproduktor nebo sluchátka. AirPlay — přenos zvuku a videa na Apple TV a další AirPlay zařízení. V praxi Audio Mode pokrývá oba scénáře, protože AirPlay používá audio relaci. Samostatný režim AirPlay není vyžadován od iOS 7+.
Ano, k tomu použijte requestWhenInUseAuthorization() místo requestAlwaysAuthorization(). Aplikace bude dostávat polohu pouze na popředí. Pokud je potřeba krátkodobé sledování na pozadí — zavolejte startUpdatingLocation() a zastavte v willResignActive.
Každý režim zvyšuje spotřebu energie. Location Mode — nejnáročnější, může zkrátit dobu provozu o 30–50% při nepřetržitém sledování. Audio Mode — mírný (15–20%). Fetch a Processing — minimální (2–5%). BLE Mode — nízký (5–10%) díky energetické účinnosti Bluetooth LE.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také