Background Modes w iOS — co to jest, jakie są tryby i konfiguracja

Autor: IT Sectr Opublikowano: 2026-03-27 Czas czytania: 9 min

Background Modes — to zestaw deklarowanych możliwości iOS, które pozwalają aplikacji kontynuować wykonywanie kodu po przejściu w tło. Każdy tryb odpowiada określonemu typowi zadań: audio, geolokalizacja, VoIP, Bluetooth, fetch i processing. Według Apple, 2026, nieprawidłowe użycie Background Modes jest jedną z częstych przyczyn odrzucania aplikacji podczas recenzji w App Store.

Najważniejsze

  • Background Modes — zestaw iOS capability do legalnego wykonywania kodu w tle.
  • Tryb audio — odtwarzanie muzyki, podcastów, audiobooków w tle z kontrolą przez Control Center.
  • Geolokalizacja — śledzenie lokalizacji w tle dla nawigacji i trackerów fitness.
  • Bluetooth — praca z urządzeniami BLE w tle: opaski fitness, czujniki, peryferia.
  • Kontrola Apple — nieuzasadnione użycie trybów prowadzi do odrzucenia aplikacji z App Store.

Czym są Background Modes w iOS?

Background Modes — to capability projektu Xcode, które deklarują zamiar aplikacji do wykonywania określonych typów operacji w tle. W przeciwieństwie do Androida, gdzie aplikacja może uruchomić dowolny Service w tle, iOS wymaga jawnego wskazania trybu w Info.plist. Każdy tryb ma ścisłe zasady użycia i jest sprawdzany przez Apple podczas recenzji.

Jak działają Background Modes

Gdy aplikacja przechodzi w tło, iOS wstrzymuje ją po 3–5 sekundach. Jeśli aplikacja deklaruje Background Mode i aktywnie używa odpowiedniego API (np. AVAudioSession dla audio), system przenosi ją w specjalny tryb wykonania. Aplikacja pozostaje w pamięci RAM i może wykonywać kod ograniczony typem trybu.

Pełna lista dostępnych trybów

iOS obsługuje następujące Background Modes: Audio (audio), Location (geolokalizacja), VoIP (połączenia głosowe), Bluetooth LE (akcesoria BLE), Background Fetch (okresowe aktualizacje), Background Processing (długotrwałe zadania), External Accessory Communication (akcesoria zewnętrzne), Push to Talk (PTT) i HealthKit. Każdy tryb wymaga uzasadnienia w opisie aplikacji.

TrybKlucz Info.plistPrzeznaczenieWersja iOS
AudioaudioDźwięk w tle, AirPlay4.0+
LocationlocationŚledzenie lokalizacji4.0+
VoIPvoipPowiadomienia Push VoIP4.0+
BLEbluetooth-centralPraca z urządzeniami BLE7.0+
FetchfetchOkresowe pobieranie danych7.0+
ProcessingprocessingDługotrwałe zadania w tle13.0+
Push to Talkpush-to-talkGłosowe push-to-talk16.0+

Tryb audio (Audio, AirPlay i Picture in Picture)

Audio Background Mode — najczęściej używany tryb, stosowany przez odtwarzacze muzyki, aplikacje podcastowe i serwisy audio. Aplikacja może kontynuować odtwarzanie dźwięku, być sterowana przez Control Center i wyświetlana na Lock Screen. Do aktywacji wystarczy skonfigurować AVAudioSession z kategorią .playback.

Konfiguracja sesji audio

Do pracy audio w tle należy skonfigurować AVAudioSession i ją aktywować. Kategoria .playback informuje system, że aplikacja odtwarza dźwięk i powinna pozostać aktywna w tle. Bez tej konfiguracji dźwięk zatrzyma się po zminimalizowaniu aplikacji w ciągu 5–10 sekund.

swift
import AVFoundation

func configureAudioSession() {
    let session = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(
            .playback,
            mode: .default,
            options: []
        )
        try session.setActive(true)
    } catch {
        print("Błąd sesji audio: \(error)")
    }
}

Sterowanie odtwarzaniem z Control Center

Do integracji z Control Center i Lock Screen należy skonfigurować MPRemoteCommandCenter. Obsługuje on komendy Play, Pause, Next i Previous Track. Należy również aktualizować MPNowPlayingInfoProperty w celu wyświetlania metadanych: tytuł utworu, wykonawca, okładka i postęp odtwarzania.

Picture in Picture dla wideo

Począwszy od iOS 14, Background Mode audio obsługuje również Picture in Picture dla wideo. Aplikacja może kontynuować wyświetlanie wideo w pływającym oknie po zminimalizowaniu. Do aktywacji użyj AVPictureInPictureController z AVPlayerLayer. Tryb działa tylko jeśli aplikacja odtwarza ścieżkę dźwiękową.

Geolokalizacja (Location updates)

Location Background Mode pozwala aplikacji otrzymywać aktualizacje geolokalizacji w tle. Używany w nawigatorach, trackerach fitness, aplikacjach dostawy i sieciach społecznościowych. Bez tego trybu aplikacja otrzymuje lokalizację tylko raz przy przejściu w tło, po czym aktualizacje ustają.

Typy śledzenia lokalizacji

CLLocationManager obsługuje kilka strategii śledzenia: znaczące zmiany (significant-change location), standardowe śledzenie (standard location) i śledzenie regionów (region monitoring). Do pracy w tle z maksymalną dokładnością użyj allowsBackgroundLocationUpdates = true oraz pausesLocationUpdatesAutomatically = false.

Energooszczędność i dokładność

Ciągłe śledzenie lokalizacji w tle jest jednym z najbardziej energochłonnych scenariuszy. iOS automatycznie dostosowuje częstotliwość aktualizacji w zależności od prędkości ruchu: podczas chodzenia aktualizacje co 10–30 sekund, podczas jazdy samochodem — co 1–5 sekund. Do nawigacji użyj desiredAccuracy = kCLLocationAccuracyBestForNavigation.

swift
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()

Znaczące zmiany lokalizacji

Tryb significant-change location działa bez Location Background Mode — system budzi aplikację tylko przy znaczącej zmianie współrzędnych (zwykle 500 m i więcej). Nie wymaga ciągłego włączenia GPS, co oszczędza baterię. Nadaje się do aplikacji pogodowych, które aktualizują dane przy przemieszczaniu się użytkownika.

Tryb Bluetooth (LE accessories)

Bluetooth LE Background Mode pozwala aplikacji na interakcję z urządzeniami BLE w tle. Używany przez opaski fitness, czujniki medyczne, urządzenia Smart Home i nawigację Beacon. Tryb dzieli się na dwa podtypy: bluetooth-central (aplikacja łączy się z urządzeniami) i bluetooth-peripheral (aplikacja pełni rolę urządzenia).

Praca w trybie Central

Aplikacja w roli Central może skanować i łączyć się z urządzeniami BLE w tle. W tym celu należy wskazać bluetooth-central w Background Modes i wywołać CBCentralManager.scanForPeripherals z opcją CBCentralManagerScanOptionAllowDuplicatesKey. W tle skanowanie działa ze zmniejszoną częstotliwością — system może opóźniać wykrywanie w celu oszczędzania energii.

Praca w trybie Peripheral

Aplikacja w roli Peripheral może reklamować usługi i odpowiadać na zapytania innych urządzeń. Tryb bluetooth-peripheral umożliwia aplikacji pozostawanie widoczną dla innych urządzeń BLE nawet w tle. Używane w aplikacjach HealthKit i rozwiązaniach IoT.

Beacon i Region Monitoring

Monitorowanie iBeacon działa w tle bez dodatkowych uprawnień — system sam śledzi wejście i wyjście z regionu Beacon. Jednak do skanowania zawartości Beacon (proximity UUID, major, minor) potrzebne jest zezwolenie na Bluetooth i bluetooth-central Background Mode. Użyj CLLocationManager z CLBeaconRegion do monitorowania.

VoIP i PushKit dla aplikacji komunikacyjnych

VoIP Background Mode jest przeznaczony dla aplikacji komunikacji głosowej (Skype, Zoom, WhatsApp). Tryb umożliwia aplikacji pozostawanie połączoną z serwerem w celu odbierania połączeń przychodzących. Począwszy od iOS 8, dla VoIP używa się PushKit — frameworku, który przetwarza powiadomienia Push z serwera VoIP bez udziału APNs.

PushKit dla połączeń przychodzących

PushKit to jedyny mechanizm gwarantujący dostarczenie powiadomienia VoIP na urządzenie. Po otrzymaniu powiadomienia PushKit system budzi aplikację, nawet jeśli została zakończona. Aplikacja ma 30 sekund na nawiązanie połączenia z serwerem i wyświetlenie lokalnego powiadomienia o połączeniu przychodzącym.

swift
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()
    }
}

Zasady używania PushKit

PushKit nie może być używany do zwykłych powiadomień — tylko do VoIP, komunikacji watchOS i dostawców plików. Apple sprawdza to podczas recenzji. Przy nieuzasadnionym użyciu aplikacja jest odrzucana. Od iOS 13, PushKit tylko dostarcza powiadomienie — wywołanie CXProvider (CallKit) do wyświetlania ekranu połączenia jest obowiązkowe.

Tryby Fetch i Processing

Background Fetch i Background Processing — tryby do aktualizacji treści w tle i wykonywania długotrwałych zadań. Fetch — krótkie okresowe aktualizacje (do 30 s), Processing — długotrwałe zadania (do 10 min) z warunkami (Wi-Fi, ładowanie). Processing dostępny tylko od iOS 13+.

Background Fetch — szybka aktualizacja

Tryb Fetch pozwala systemowi okresowo budzić aplikację w celu pobrania świeżej treści. System analizuje zachowanie użytkownika i wybiera optymalny czas. Aplikacja musi wywołać completion handler w ciągu 30 sekund. Fetch nadaje się do aplikacji informacyjnych, kanałów społecznościowych i pogody.

Background Processing — długotrwałe zadania

BGProcessingTask jest przeznaczona do zadań, które mogą być wykonywane bez udziału użytkownika: czyszczenie pamięci podręcznej, synchronizacja dużej bazy danych, przetwarzanie plików multimedialnych. System uruchamia zadanie tylko przy sprzyjających warunkach — urządzenie na ładowarce, podłączone do Wi-Fi, nie w trybie Low Power. Dostępne do 10 minut.

Planowanie i wymagania

Dla BGProcessingTask należy wskazać requiresExternalPower i requiresNetworkConnectivity. System może opóźnić wykonanie na nieokreślony czas, jeśli warunki nie są spełnione. W przeciwieństwie do BGAppRefreshTask, który musi wykonać się przynajmniej raz dziennie, Processing może nie wykonać się tygodniami, jeśli urządzenie rzadko jest na ładowarce.

App Store Review Guidelines dla Background Modes

Apple ściśle sprawdza użycie Background Modes podczas recenzji aplikacji. Główna zasada: każdy włączony tryb musi być uzasadniony funkcjonalnością aplikacji. Jeśli aplikacja deklaruje Location Mode, ale nie używa geolokalizacji, zostanie odrzucona z żądaniem usunięcia capability.

Najczęstsze przyczyny odrzucenia

Najczęstsze naruszenia: Location Mode bez wyraźnej potrzeby (aplikacja żąda dostępu „Always" do wyświetlania reklam), Audio Mode bez odtwarzania dźwięku w tle, VoIP bez PushKit, BLE Mode bez urządzeń Bluetooth. Apple może odrzucić aplikację nawet na etapie aktualizacji, jeśli tryb nie jest już używany.

Opis w recenzji

Przy wysyłaniu do recenzji podaj w Notes konkretne uzasadnienie każdego trybu. Na przykład „Location Background Mode jest używany do śledzenia trasy użytkownika w funkcji fitness". Bez wyjaśnienia recenzent może odrzucić aplikację. Dla poufnych funkcji (VoIP) Apple może poprosić o testowe konto.

Zalecenia dotyczące minimalizacji trybów

Używaj minimalnego niezbędnego zestawu trybów. Jeśli aplikacja potrzebuje pobierania danych w tle raz na godzinę — nie włączaj Location Mode, użyj Fetch lub BGAppRefreshTask. Zbędne tryby nie tylko prowadzą do odrzucenia, ale także stwarzają negatywne wrażenie: użytkownik widzi w ustawieniach, że aplikacja używa geolokalizacji w tle.

Często zadawane pytania

Ile Background Modes można włączyć w jednej aplikacji?

Nie ma ograniczeń co do liczby, ale każdy tryb musi być uzasadniony funkcjonalnością aplikacji. Włączenie wszystkich trybów bez potrzeby to gwarantowana przyczyna odrzucenia podczas recenzji. Praktyczne ograniczenie to 2–3 tryby na aplikację, w przeciwnym razie użytkownik zobaczy wiele zapytań o uprawnienia.

Jak sprawdzić, czy Background Mode jest aktywny?

Użyj UIApplication.shared.applicationState — aplikacja może sprawdzać, czy znajduje się w tle (state == .background). Można również śledzić powiadomienia UIApplication.didEnterBackgroundNotification i willEnterForegroundNotification w celu przełączania zachowania.

Jaka jest różnica między Audio a AirPlay Background Modes?

Audio — odtwarzanie dźwięku przez głośnik lub słuchawki. AirPlay — przesyłanie audio i wideo na Apple TV i inne urządzenia AirPlay. W praktyce Audio Mode pokrywa oba scenariusze, ponieważ AirPlay używa sesji audio. Oddzielny tryb AirPlay nie jest wymagany od iOS 7+.

Czy można używać Background Location tylko przy otwartej aplikacji?

Tak, w tym celu użyj requestWhenInUseAuthorization() zamiast requestAlwaysAuthorization(). Aplikacja będzie otrzymywać lokalizację tylko na pierwszym planie. Jeśli potrzebne jest krótkotrwałe śledzenie w tle — wywołaj startUpdatingLocation() i zatrzymaj w willResignActive.

Jak Background Modes wpływają na baterię?

Każdy tryb zwiększa zużycie energii. Location Mode — najbardziej kosztowny, może skrócić czas pracy o 30–50% przy ciągłym śledzeniu. Audio Mode — umiarkowany (15–20%). Fetch i Processing — minimalny (2–5%). BLE Mode — niski (5–10%) dzięki energooszczędności Bluetooth LE.

Podsumowanie

  • Background Modes — deklarowane capabilities iOS, umożliwiające aplikacji legalne wykonywanie kodu w tle.
  • Audio Mode — najczęściej używany, do odtwarzania muzyki, podcastów i wideo przez AVAudioSession z kategorią .playback.
  • Location Mode — do nawigacji i fitnessu, najbardziej energochłonny, wymaga requestAlwaysAuthorization i allowsBackgroundLocationUpdates.
  • BLE Mode — praca z urządzeniami Bluetooth w tle przez CBCentralManager ze skanowaniem w tle.
  • VoIP i PushKit — dla aplikacji komunikacyjnych, gwarantuje dostarczenie połączeń przychodzących przez PKPushRegistry.
  • Fetch i Processing — krótkie i długotrwałe zadania w tle z różnymi warunkami wykonania i limitami czasowymi.
  • Apple ściśle sprawdza uzasadnienie każdego trybu — nieuzasadnione użycie prowadzi do odrzucenia aplikacji z App Store.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również