Background Modes sont un ensemble de capacités déclarables d’iOS qui permettent à une application de continuer à exécuter du code après être passée en arrière-plan. Chaque mode correspond à un type de tâche spécifique : audio, géolocalisation, VoIP, Bluetooth, fetch et processing. Selon Apple, 2026, une utilisation incorrecte des Background Modes est l’une des causes fréquentes de rejet des applications lors de la révision dans l’App Store.
Points clés
Background Modes sont des capacités du projet Xcode qui déclarent l’intention de l’application d’effectuer des types spécifiques d’opérations en arrière-plan. Contrairement à Android, où une application peut lancer n’importe quel Service en arrière-plan, iOS nécessite une déclaration explicite du mode dans Info.plist. Chaque mode a des règles d’utilisation strictes et est vérifié par Apple lors de la révision.
Lorsqu’une application passe en arrière-plan, iOS la suspend en 3–5 secondes. Si l’application déclare un Background Mode et utilise activement l’API correspondante (par exemple, AVAudioSession pour l’audio), le système la place dans un mode d’exécution spécial. L’application reste en mémoire et peut exécuter du code limité par le type de mode.
iOS prend en charge les Background Modes suivants : Audio, Location, VoIP, Bluetooth LE (accessoires BLE), Background Fetch (mises à jour périodiques), Background Processing (tâches longues), External Accessory Communication, Push to Talk (PTT) et HealthKit. Chaque mode nécessite une justification dans la description de l’application.
| Mode | Clé Info.plist | Objectif | Version iOS |
|---|---|---|---|
| Audio | audio | Audio en arrière-plan, AirPlay | 4.0+ |
| Location | location | Suivi de localisation | 4.0+ |
| VoIP | voip | Notifications push VoIP | 4.0+ |
| BLE | bluetooth-central | Travail avec des périphériques BLE | 7.0+ |
| Fetch | fetch | Téléchargement périodique de données | 7.0+ |
| Processing | processing | Tâches longues en arrière-plan | 13.0+ |
| Push to Talk | push-to-talk | Voix push-to-talk | 16.0+ |
Mode Audio en arrière-plan est le mode le plus courant, utilisé par les lecteurs de musique, les applications de podcast et les services audio. L’application peut continuer la lecture audio, être contrôlée via le Centre de contrôle et apparaître sur l’écran de verrouillage. Pour l’activer, il suffit de configurer AVAudioSession avec la catégorie .playback.
Pour que l’audio fonctionne en arrière-plan, il est nécessaire de configurer AVAudioSession et de l’activer. La catégorie .playback indique au système que l’application lit de l’audio et doit rester active en arrière-plan. Sans cette configuration, l’audio s’arrêtera 5–10 secondes après la réduction de l’application.
import AVFoundation
func configureAudioSession() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(
.playback,
mode: .default,
options: []
)
try session.setActive(true)
} catch {
print("Erreur de session audio : \(error)")
}
}
Pour l’intégration avec le Centre de contrôle et l’écran de verrouillage, il est nécessaire de configurer MPRemoteCommandCenter. Il gère les commandes Lecture, Pause, Suivant et Précédent. Il est également nécessaire de mettre à jour MPNowPlayingInfoProperty pour afficher les métadonnées : nom du morceau, artiste, pochette et progression de la lecture.
À partir d’iOS 14, le Mode Audio en arrière-plan prend également en charge Picture in Picture pour la vidéo. L’application peut continuer à afficher la vidéo dans une fenêtre flottante lorsqu’elle est réduite. Pour l’activer, utilisez AVPictureInPictureController avec AVPlayerLayer. Ce mode fonctionne uniquement si l’application lit une piste audio.
Mode de localisation en arrière-plan permet à l’application de recevoir des mises à jour de localisation en arrière-plan. Il est utilisé dans les applications de navigation, les trackers de fitness, les applications de livraison et les réseaux sociaux. Sans ce mode, l’application reçoit la localisation une seule fois en passant en arrière-plan, après quoi les mises à jour s’arrêtent.
CLLocationManager prend en charge plusieurs stratégies de suivi : changements significatifs de localisation, suivi standard et surveillance de régions. Pour travailler en arrière-plan avec une précision maximale, utilisez allowsBackgroundLocationUpdates = true et pausesLocationUpdatesAutomatically = false.
Le suivi continu de la localisation en arrière-plan est l’un des scénarios les plus énergivores. iOS ajuste automatiquement la fréquence des mises à jour en fonction de la vitesse de déplacement : en marchant, toutes les 10–30 secondes ; en conduisant, toutes les 1–5 secondes. Pour la navigation, utilisez desiredAccuracy = kCLLocationAccuracyBestForNavigation.
let locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.allowsBackgroundLocationUpdates = true
locationManager.pausesLocationUpdatesAutomatically = false
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.activityType = .fitness
locationManager.startUpdatingLocation()
Le mode significant-change location fonctionne sans Mode de localisation en arrière-plan — le système réveille l’application uniquement lorsque les coordonnées changent significativement (généralement 500 m ou plus). Il ne nécessite pas de GPS constant, économisant la batterie. Idéal pour les applications météo qui mettent à jour les données lorsque l’utilisateur se déplace.
Mode Bluetooth LE en arrière-plan permet à l’application d’interagir avec des périphériques BLE en arrière-plan. Il est utilisé par les bracelets fitness, les capteurs médicaux, les appareils domotiques et la navigation par balises. Le mode se divise en deux sous-types : bluetooth-central (l’application se connecte aux périphériques) et bluetooth-peripheral (l’application agit comme un périphérique).
Une application agissant en tant que Central peut analyser et se connecter à des périphériques BLE en arrière-plan. Pour ce faire, spécifiez bluetooth-central dans Background Modes et appelez CBCentralManager.scanForPeripherals avec l’option CBCentralManagerScanOptionAllowDuplicatesKey. En arrière-plan, l’analyse fonctionne à fréquence réduite — le système peut retarder la découverte pour économiser de l’énergie.
Une application agissant en tant que Peripheral peut annoncer des services et répondre aux demandes d’autres périphériques. Le mode bluetooth-peripheral permet à l’application de rester visible pour les autres périphériques BLE, même en arrière-plan. Il est utilisé dans les applications HealthKit et les solutions IoT.
La surveillance iBeacon fonctionne en arrière-plan sans autorisations supplémentaires — le système lui-même suit les entrées et sorties des régions de balises. Cependant, pour analyser le contenu d’une balise (UUID de proximité, major, minor), une autorisation Bluetooth et le mode bluetooth-central Background Mode sont nécessaires. Utilisez CLLocationManager avec CLBeaconRegion pour la surveillance.
Mode VoIP en arrière-plan est conçu pour les applications de communication vocale (Skype, Zoom, WhatsApp). Ce mode permet à l’application de rester connectée au serveur pour recevoir les appels entrants. À partir d’iOS 8, PushKit est utilisé pour la VoIP — un framework qui gère les notifications push du serveur VoIP sans impliquer APNs.
PushKit est le seul mécanisme garantissant la livraison des notifications VoIP au périphérique. À la réception d’une notification PushKit, le système réveille l’application, même si elle a été terminée. L’application doit établir une connexion avec le serveur dans les 30 secondes et afficher une notification locale pour l’appel entrant.
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 ne peut pas être utilisé pour les notifications ordinaires — uniquement pour la VoIP, les communications watchOS et les fournisseurs de fichiers. Apple vérifie cela lors de la révision. Une utilisation inappropriée entraîne le rejet de l’application. À partir d’iOS 13, PushKit ne fait que délivrer la notification — il est obligatoire d’appeler CXProvider (CallKit) pour afficher l’écran d’appel.
Background Fetch et Background Processing sont des modes pour les mises à jour de contenu en arrière-plan et les tâches longues. Fetch est pour les mises à jour périodiques courtes (jusqu’à 30 s), Processing pour les tâches longues (jusqu’à 10 min) avec conditions (Wi-Fi, charge). Processing n’est disponible que sur iOS 13+.
Le mode Fetch permet au système de réveiller périodiquement l’application pour télécharger du nouveau contenu. Le système analyse le comportement de l’utilisateur et sélectionne le moment optimal. L’application doit appeler le gestionnaire d’achèvement dans les 30 secondes. Fetch convient aux applications d’actualités, aux flux de réseaux sociaux et à la météo.
BGProcessingTask est conçue pour les tâches pouvant être exécutées sans intervention de l’utilisateur : nettoyage du cache, synchronisation d’une grande base de données, traitement de fichiers média. Le système lance la tâche uniquement dans des conditions favorables — périphérique en charge, connecté au Wi-Fi, pas en mode basse consommation. Disponible jusqu’à 10 minutes.
Pour BGProcessingTask, vous devez spécifier requiresExternalPower et requiresNetworkConnectivity. Le système peut reporter l’exécution indéfiniment si les conditions ne sont pas remplies. Contrairement à BGAppRefreshTask, qui doit s’exécuter au moins une fois par jour, Processing peut ne pas s’exécuter pendant des semaines si le périphérique est rarement chargé.
Apple vérifie strictement l’utilisation des Background Modes lors de la révision des applications. La règle principale : chaque mode activé doit être justifié par la fonctionnalité de l’application. Si une application déclare le Mode Localisation mais n’utilise pas la géolocalisation, elle sera rejetée avec l’obligation de supprimer la capacité.
Les violations les plus courantes : Mode Localisation sans nécessité explicite (l’application demande un accès « Toujours » pour afficher des publicités), Mode Audio sans lecture audio en arrière-plan, VoIP sans PushKit, Mode BLE sans périphériques Bluetooth. Apple peut rejeter l’application même lors de la mise à jour si le mode n’est plus utilisé.
Lors de la soumission pour révision, fournissez une justification spécifique pour chaque mode dans les Notes. Par exemple, « Le Mode Localisation en arrière-plan est utilisé pour suivre l’itinéraire de l’utilisateur dans la fonctionnalité fitness. » Sans explication, le réviseur peut rejeter l’application. Pour les fonctionnalités confidentielles (VoIP), Apple peut demander un compte de test.
Utilisez l’ensemble minimal nécessaire de modes. Si votre application a besoin d’un téléchargement de données en arrière-plan une fois par heure — n’activez pas le Mode Localisation, utilisez Fetch ou BGAppRefreshTask. Les modes supplémentaires conduisent non seulement au rejet, mais créent également une impression négative : l’utilisateur voit dans les Réglages que l’application utilise la géolocalisation en arrière-plan.
Questions fréquentes
Il n’y a pas de limite de quantité, mais chaque mode doit être justifié par la fonctionnalité de l’application. Activer tous les modes sans nécessité est une raison garantie de rejet lors de la révision. Une limite pratique est de 2–3 modes par application, sinon l’utilisateur verra de nombreuses demandes d’autorisation.
Utilisez UIApplication.shared.applicationState — l’application peut vérifier si elle est en arrière-plan (state == .background). Vous pouvez également observer les notifications UIApplication.didEnterBackgroundNotification et willEnterForegroundNotification pour changer de comportement.
Audio — lecture du son via le haut-parleur ou les écouteurs. AirPlay — diffusion audio et vidéo vers Apple TV et d’autres périphériques AirPlay. En pratique, le Mode Audio couvre les deux scénarios car AirPlay utilise la session audio. Un mode AirPlay séparé n’est pas nécessaire depuis iOS 7+.
Oui, pour cela utilisez requestWhenInUseAuthorization() au lieu de requestAlwaysAuthorization(). L’application recevra la localisation uniquement au premier plan. Si un suivi court en arrière-plan est nécessaire, appelez startUpdatingLocation() et arrêtez-le dans willResignActive.
Chaque mode augmente la consommation d’énergie. Le Mode Localisation est le plus exigeant, pouvant réduire l’autonomie de la batterie de 30–50% en suivi continu. Le Mode Audio est modéré (15–20%). Fetch et Processing sont minimes (2–5%). Le Mode BLE est faible (5–10%) grâce à l’efficacité énergétique du Bluetooth LE.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi