Background Modes are a set of declarable iOS capabilities that allow an app to continue executing code after transitioning to the background. Each mode corresponds to a specific type of task: audio, geolocation, VoIP, Bluetooth, fetch, and processing. According to Apple, 2026, improper use of Background Modes is one of the common reasons for app rejection during App Store review.
Key Takeaways
Background Modes are Xcode project capabilities that declare the app’s intention to perform specific types of background operations. Unlike Android, where an app can launch any Service in the background, iOS requires explicit declaration of the mode in Info.plist. Each mode has strict usage rules and is verified by Apple during review.
When an app transitions to the background, iOS suspends it within 3–5 seconds. If the app declares a Background Mode and actively uses the corresponding API (e.g., AVAudioSession for audio), the system puts it into a special execution mode. The app remains in memory and can execute code limited by the mode type.
iOS supports the following Background Modes: Audio, Location, VoIP, Bluetooth LE (BLE accessories), Background Fetch (periodic updates), Background Processing (long-running tasks), External Accessory Communication, Push to Talk (PTT), and HealthKit. Each mode requires justification in the app description.
| Mode | Info.plist Key | Purpose | iOS Version |
|---|---|---|---|
| Audio | audio | Background audio, AirPlay | 4.0+ |
| Location | location | Location tracking | 4.0+ |
| VoIP | voip | VoIP push notifications | 4.0+ |
| BLE | bluetooth-central | Working with BLE devices | 7.0+ |
| Fetch | fetch | Periodic data download | 7.0+ |
| Processing | processing | Long-running background tasks | 13.0+ |
| Push to Talk | push-to-talk | Push-to-talk voice | 16.0+ |
Audio Background Mode is the most common mode, used by music players, podcast apps, and audio services. The app can continue audio playback, be controlled via Control Center, and appear on the Lock Screen. To activate it, simply configure AVAudioSession with the .playback category.
For background audio to work, you need to configure AVAudioSession and activate it. The .playback category tells the system that the app is playing audio and should remain active in the background. Without this configuration, audio will stop 5–10 seconds after the app is minimized.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Audio session error: \(error)")
}
}
To integrate with Control Center and Lock Screen, you need to configure MPRemoteCommandCenter. It handles Play, Pause, Next, and Previous Track commands. You also need to update MPNowPlayingInfoProperty to display metadata: track name, artist, artwork, and playback progress.
Starting with iOS 14, the Audio Background Mode also supports Picture in Picture for video. The app can continue showing video in a floating window when minimized. To activate it, use AVPictureInPictureController with AVPlayerLayer. This mode only works if the app is playing an audio track.
Location Background Mode allows the app to receive location updates in the background. It is used in navigation apps, fitness trackers, delivery apps, and social networks. Without this mode, the app receives location only once when transitioning to the background, after which updates stop.
CLLocationManager supports several tracking strategies: significant-change location, standard location tracking, and region monitoring. For background work with maximum accuracy, use allowsBackgroundLocationUpdates = true and pausesLocationUpdatesAutomatically = false.
Continuous location tracking in the background is one of the most energy-intensive scenarios. iOS automatically adapts the update frequency based on movement speed: when walking, updates every 10–30 seconds; when driving, every 1–5 seconds. For navigation, use desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
The significant-change location mode works without Location Background Mode — the system wakes the app only when coordinates change significantly (typically 500 m or more). It does not require constant GPS, saving battery. Suitable for weather apps that update data when the user moves.
Bluetooth LE Background Mode allows the app to interact with BLE devices in the background. It is used by fitness bands, medical sensors, Smart Home devices, and Beacon navigation. The mode is divided into two subtypes: bluetooth-central (the app connects to devices) and bluetooth-peripheral (the app acts as a device).
An app acting as a Central can scan and connect to BLE devices in the background. To do this, specify bluetooth-central in Background Modes and call CBCentralManager.scanForPeripherals with the CBCentralManagerScanOptionAllowDuplicatesKey option. In the background, scanning runs at a reduced frequency — the system may delay discovery to save energy.
An app acting as a Peripheral can advertise services and respond to requests from other devices. The bluetooth-peripheral mode allows the app to remain visible to other BLE devices even in the background. It is used in HealthKit apps and IoT solutions.
iBeacon monitoring works in the background without additional permissions — the system itself tracks entry and exit from Beacon regions. However, scanning Beacon content (proximity UUID, major, minor) requires Bluetooth permission and bluetooth-central Background Mode. Use CLLocationManager with CLBeaconRegion for monitoring.
VoIP Background Mode is designed for voice communication apps (Skype, Zoom, WhatsApp). This mode allows the app to stay connected to the server to receive incoming calls. Starting with iOS 8, PushKit is used for VoIP — a framework that handles push notifications from the VoIP server without involving APNs.
PushKit is the only mechanism that guarantees delivery of VoIP notifications to the device. When a PushKit notification is received, the system wakes the app, even if it was terminated. The app must establish a connection with the server within 30 seconds and display a local notification for the incoming call.
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 cannot be used for regular notifications — only for VoIP, watchOS communications, and file providers. Apple verifies this during review. Improper use leads to app rejection. Starting with iOS 13, PushKit only delivers the notification — calling CXProvider (CallKit) to display the call screen is mandatory.
Background Fetch and Background Processing are modes for background content updates and long-running tasks. Fetch is for short periodic updates (up to 30 s), Processing is for long-running tasks (up to 10 min) with conditions (Wi-Fi, charging). Processing is only available on iOS 13+.
The Fetch mode allows the system to periodically wake the app to download fresh content. The system analyzes user behavior and selects the optimal time. The app must call the completion handler within 30 seconds. Fetch is suitable for news apps, social media feeds, and weather.
BGProcessingTask is designed for tasks that can run without user interaction: cache cleanup, large database synchronization, media file processing. The system launches the task only under favorable conditions — device charging, connected to Wi-Fi, not in Low Power Mode. Available for up to 10 minutes.
For BGProcessingTask, you need to specify requiresExternalPower and requiresNetworkConnectivity. The system may defer execution indefinitely if conditions are not met. Unlike BGAppRefreshTask, which must run at least once a day, Processing may not run for weeks if the device is rarely charging.
Apple strictly reviews the use of Background Modes during app review. The main rule: each enabled mode must be justified by the app’s functionality. If an app declares Location Mode but does not use geolocation, it will be rejected with a requirement to remove the capability.
The most common violations: Location Mode without explicit need (the app requests “Always” access for showing ads), Audio Mode without background audio playback, VoIP without PushKit, BLE Mode without Bluetooth devices. Apple may reject the app even at the update stage if the mode is no longer used.
When submitting for review, provide specific justification for each mode in the Notes section. For example, “Location Background Mode is used to track the user’s route in the fitness feature.” Without explanation, the reviewer may reject the app. For confidential features (VoIP), Apple may request a test account.
Use the minimum necessary set of modes. If your app needs background data download once an hour — do not enable Location Mode, use Fetch or BGAppRefreshTask. Extra modes not only lead to rejection but also create a negative impression: the user sees in Settings that the app uses geolocation in the background.
Frequently Asked Questions
There is no limit on the number, but each mode must be justified by the app’s functionality. Enabling all modes without necessity is a guaranteed reason for rejection during review. A practical limit is 2–3 modes per app, otherwise the user will see many permission requests.
Use UIApplication.shared.applicationState — the app can check whether it is in the background (state == .background). You can also observe UIApplication.didEnterBackgroundNotification and willEnterForegroundNotification to switch behavior.
Audio — playing sound through the speaker or headphones. AirPlay — streaming audio and video to Apple TV and other AirPlay devices. In practice, Audio Mode covers both scenarios since AirPlay uses the audio session. A separate AirPlay mode is not required since iOS 7+.
Yes, for this use requestWhenInUseAuthorization() instead of requestAlwaysAuthorization(). The app will receive location only in the foreground. If short-term background tracking is needed, call startUpdatingLocation() and stop it in willResignActive.
Each mode increases power consumption. Location Mode is the most demanding, potentially reducing battery life by 30–50% with continuous tracking. Audio Mode is moderate (15–20%). Fetch and Processing are minimal (2–5%). BLE Mode is low (5–10%) thanks to Bluetooth LE energy efficiency.
Summary
We will develop a mobile application turnkey
IT Sectr creates iOS and Android applications for startups and businesses since 2017. We will advise you and propose the best solution.
Read also