BGTaskScheduler : ce que c'est, tâches en arrière-plan dans iOS

Auteur : IT Sectr Publié le : 2026-03-27 Temps de lecture : 8 min

BGTaskScheduler est un framework Apple pour planifier et exécuter des tâches en arrière-plan dans les applications iOS 13 et ultérieures. Il a remplacé les obsolètes Background Fetch et performFetch, offrant une API unifiée pour travailler avec des opérations en arrière-plan. Selon Apple Developer Documentation, 2026, le framework comprend deux types de tâches : BGProcessingTask pour les opérations longues et BGAppRefreshTask pour les courtes mises à jour de contenu.

Points clés

  • BGTaskScheduler est un framework iOS 13+ pour gérer les tâches en arrière-plan, remplaçant l'ancien Background Fetch.
  • BGAppRefreshTask est une courte tâche en arrière-plan jusqu'à 30 secondes pour mettre à jour le contenu.
  • BGProcessingTask est une longue tâche en arrière-plan jusqu'à plusieurs minutes pour les opérations intensives.
  • L'inscription des tâches se fait dans Info.plist via des identifiants et dans le code via handleTasks.
  • Le système détermine automatiquement le moment optimal pour lancer les tâches en fonction du comportement de l'utilisateur.

Qu'est-ce que BGTaskScheduler ?

BGTaskScheduler est un framework système Apple introduit dans iOS 13 qui gère de manière centralisée l'exécution des tâches en arrière-plan. Avant son apparition, les développeurs utilisaient UIApplication backgroundTasks, performFetch et la gestion d'événements dans appDelegate, ce qui entraînait une fragmentation du code et un comportement imprévisible.

Le framework fonctionne sur le principe de planification différée : l'application inscrit des tâches avec des identifiants uniques, et iOS détermine lui-même le moment optimal pour les exécuter. Le système prend en compte le niveau de batterie, l'activité de l'utilisateur, l'état du réseau et d'autres facteurs.

Les capacités principales incluent le travail avec des opérations en arrière-plan courtes et longues. Contrairement à AlarmManager sous Android, BGTaskScheduler ne garantit pas une heure d'exécution précise — le système se réserve le droit de retarder une tâche si les conditions sont défavorables.

Comment fonctionne BGTaskScheduler dans iOS ?

BGTaskScheduler utilise une architecture basée sur des gestionnaires (handlers). L'application inscrit un gestionnaire pour chaque type de tâche, et le système l'appelle lorsque le moment approprié arrive. Le framework lui-même n'exécute pas la tâche directement — il notifie simplement l'application qu'il est temps de l'exécuter.

Processus d'inscription d'une tâche

L'inscription commence par la déclaration de l'identifiant de la tâche dans Info.plist via le tableau BGTaskSchedulerPermittedIdentifiers. Ensuite, dans le code de l'application, la méthode registerHandler(forTaskWithIdentifier:) est appelée avec une closure comme gestionnaire.

swift
import BackgroundTasks

let taskID = "com.example.app.refresh"

BGTaskScheduler.shared.registerHandler(
    forTaskWithIdentifier: taskID,
    using: DispatchQueue.global()
) { task in
    task.expirationHandler = {
        // appelé lors de l'arrêt forcé
    }
    processBackgroundTask(task as! BGAppRefreshTask)
}

Planification de l'exécution

Après l'inscription, l'application doit explicitement demander l'exécution de la tâche via submitTaskRequest. La demande contient l'identifiant de la tâche et la date de début la plus proche possible. Le système enregistre la demande et la traite lorsqu'il juge les conditions appropriées.

swift
let request = BGAppRefreshTaskRequest(
    identifier: taskID
)
request.earliestBeginDate = Date(timeIntervalSinceNow: 3600)

do {
    try BGTaskScheduler.shared.submit(request)
} catch {
    print("Erreur de planification : \(error)")
}

Types de tâches en arrière-plan de BGTaskScheduler

BGTaskScheduler fournit deux types principaux de tâches, chacun conçu pour son propre cas d'utilisation. Choisir le bon type affecte directement la probabilité d'exécution réussie de la tâche par le système.

BGAppRefreshTask

BGAppRefreshTask est conçue pour les courtes mises à jour de contenu en arrière-plan : charger de nouvelles données, synchroniser avec le serveur, mettre à jour les widgets. Le temps d'exécution est limité à 30 secondes, après quoi le système force l'arrêt de la tâche. Ce type de tâche s'exécute plus fréquemment que BGProcessingTask et a une priorité plus élevée.

BGProcessingTask

BGProcessingTask est conçue pour les opérations plus longues : traiter des fichiers multimédias, indexer Core Data, créer des sauvegardes. La tâche peut s'exécuter jusqu'à plusieurs minutes, mais le système la lance moins fréquemment et seulement dans des conditions favorables — branché sur secteur, Wi-Fi stable et faible charge de l'appareil.

ParamètreBGAppRefreshTaskBGProcessingTask
Limite de temps30 secondesplusieurs minutes
Fréquence de lancementélevéebasse
Conditionsquelconquessecteur + Wi-Fi
Nécessite secteurnonrecommandé
Exemplemise à jour du filtraitement vidéo

Inscription et planification

L'inscription correcte est une condition obligatoire pour le fonctionnement de BGTaskScheduler. Si une tâche n'est pas inscrite dans Info.plist, le système ignorera toute demande d'exécution.

Inscription dans Info.plist

Le fichier Info.plist doit inclure le tableau BGTaskSchedulerPermittedIdentifiers avec une liste d'identifiants chaîne. Chaque identifiant doit être unique au sein de l'application. Apple recommande d'utiliser la notation de domaine inversé.

xml
<key>BGTaskSchedulerPermittedIdentifiers</key>
<array>
    <string>com.example.app.refresh</string>
    <string>com.example.app.processing</string>
</array>

Planification et annulation

Pour planifier une tâche, utilisez la méthode submitTaskRequest. Si une tâche n'est plus nécessaire, elle peut être annulée via cancelTaskRequest ou cancelAllTaskRequests. Le système annule également automatiquement les tâches lors de la suppression de l'application ou de la réinitialisation des données.

Surveillance de l'état des tâches

BGTaskScheduler offre la possibilité de suivre l'état des tâches planifiées via getPendingTaskRequests. Cette méthode retourne une liste de toutes les demandes actives avec des informations sur leur type, identifiant et earliestBeginDate. Pour chaque demande, vous pouvez vérifier si elle a déjà été terminée ou annulée et décider de la reprogrammer.

Il est important de noter que le système ne fournit pas de rappel direct sur le succès d'une tâche en arrière-plan — le gestionnaire lui-même doit signaler le résultat via les propriétés de la tâche. setTaskCompleted permet de marquer une tâche comme terminée avec succès, après quoi le système peut lancer la prochaine tâche planifiée de ce type. Si une tâche n'appelle pas setTaskCompleted, le système la considère comme terminée par expiration du délai ou arrêt forcé.

Pour le diagnostic, il est recommandé d'utiliser OSLog dans le gestionnaire et de visualiser les logs via Console.app sur Mac. Apple fournit également l'outil MetricKit pour analyser les performances des tâches en arrière-plan — il collecte des données sur le temps d'exécution, la consommation d'énergie et la fréquence de lancement qui peuvent être utilisées pour l'optimisation.

swift
// Annuler une tâche spécifique
BGTaskScheduler.shared.cancel(taskRequestWithIdentifier: taskID)

// Annuler toutes les tâches
BGTaskScheduler.shared.cancelAllTaskRequests()

// Vérifier les tâches planifiées
BGTaskScheduler.shared.getPendingTaskRequests { requests in
    print("\(requests.count) tâches planifiées")
}

Limitations et recommandations

BGTaskScheduler impose des limitations strictes au travail en arrière-plan. Le système peut retarder une tâche indéfiniment si les conditions sont défavorables. Les développeurs doivent comprendre que le framework n'est pas conçu pour les tâches en temps réel.

Les principales limitations incluent : le système ne garantit pas l'exécution de la tâche à l'heure spécifiée, le nombre maximum de tâches simultanées est limité, et la consommation d'énergie est strictement contrôlée. L'exécution de plusieurs tâches à la suite peut entraîner leur fusion ou annulation.

Pour augmenter la probabilité d'exécution, il est recommandé de définir earliestBeginDate au moins 1 heure pour BGProcessingTask et 15 minutes pour BGAppRefreshTask. Il est également important de gérer expirationHandler — si une tâche ne peut pas respecter sa limite de temps, le système appelle ce gestionnaire pour une terminaison appropriée. La reprogrammation doit être effectuée à l'intérieur du gestionnaire lui-même pour maintenir un cycle continu de travail en arrière-plan.

Une autre limitation importante concerne les requêtes réseau. BGTaskScheduler ne garantit pas une connexion réseau active pendant l'exécution de la tâche. L'application doit vérifier indépendamment la disponibilité du réseau via NWPathMonitor et différer le traitement si la connexion est absente. Cela diffère d'Android JobScheduler qui peut activer une tâche uniquement lorsqu'il est connecté à un type de réseau spécifique. En pratique, les développeurs combinent souvent BGTaskScheduler avec des sessions URL en arrière-plan NSURLSession pour un chargement fiable des données.

Compatibilité avec macOS et watchOS

À partir de macOS Catalina, BGTaskScheduler est également disponible sur Mac. Cela permet de créer des tâches en arrière-plan multiplateformes pour les applications UIKit fonctionnant sur Apple Silicon. Sur watchOS, le framework a des fonctionnalités limitées — seules de courtes BGAppRefreshTask sont disponibles pour mettre à jour les complications et synchroniser les données avec l'iPhone. Les développeurs doivent tenir compte des différences de plateforme lors de la planification de l'architecture en arrière-plan.

Outils de débogage et de diagnostic

Apple fournit plusieurs outils pour déboguer BGTaskScheduler. La commande e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] dans lldb lance de force une tâche en arrière-plan, contournant les limitations système. Xcode dispose d'un indicateur Simulate Background Fetch dans le menu Debug qui simule une courte mise à jour en arrière-plan. MetricKit est utilisé pour l'analyse des performances — il collecte des informations sur la fréquence de lancement, la durée d'exécution et la consommation d'énergie de chaque tâche. Ces données aident à optimiser la fréquence de planification et à choisir le bon type de tâche.

En pratique, BGTaskScheduler est adapté pour mettre à jour les données des widgets, la synchronisation iCloud, le traitement des notifications push avec contenu et l'indexation pour la recherche Spotlight. Il n'est pas adapté pour les analyses en temps réel, les applications de chat ou toute tâche nécessitant une exécution immédiate.

Ressources et documentation Apple

Pour une étude approfondie de BGTaskScheduler, Apple recommande la documentation officielle de la WWDC : la session « Advances in Background Tasks » (2020) couvre la migration depuis les API obsolètes, et « Background Tasks in Practice » (2021) contient des cas d'utilisation réels. La section Energy Efficiency Guide est également utile, décrivant comment le framework s'intègre dans la stratégie globale d'économie d'énergie d'Apple. Des exemples de code sont disponibles dans le dépôt officiel Apple Developer sur GitHub avec des projets complets pour iOS et macOS.

Questions fréquentes

En quoi BGTaskScheduler diffère-t-il de Background Fetch dans iOS 12 ?

Background Fetch était limité à une tâche en arrière-plan par application et n'avait pas de mécanisme de priorité. BGTaskScheduler prend en charge plusieurs tâches avec différents types, fournit une API unifiée et une gestion automatique de l'énergie.

Combien de tâches en arrière-plan peuvent être inscrites dans BGTaskScheduler ?

Apple ne fixe pas de limite explicite au nombre d'identifiants inscrits, mais en pratique il est recommandé de ne pas utiliser plus de 5–10 tâches. Un nombre plus important réduit la probabilité d'exécution de chaque tâche spécifique en raison de la concurrence pour les ressources système.

Comment déboguer l'exécution de BGTaskScheduler sur un appareil réel ?

Pour le débogage, utilisez la commande e -l objc -- (void)[[BGTaskScheduler sharedScheduler] _simulateLaunchForTaskWithIdentifier:@"com.example.task"] dans lldb. Elle lance de force une tâche, contournant les limitations système. L'indicateur Xcode Simulate Background Fetch dans le menu Debug est également disponible.

BGTaskScheduler peut-il exécuter une tâche si l'application est fermée ?

Oui, BGTaskScheduler peut lancer un processus même si l'application a été fermée de force par l'utilisateur. Cependant, le système peut appliquer des retards supplémentaires, et tous les types de tâches ne garantissent pas l'exécution dans ce scénario.

Que se passe-t-il si une tâche ne se termine pas dans le temps imparti ?

Le système appelle expirationHandler, signalant à la tâche qu'elle doit se terminer. Si l'application ignore ce signal et continue de fonctionner, iOS force l'arrêt du processus. Après cela, le système peut réduire la priorité de toutes les tâches en arrière-plan de l'application.

Résumé

  • BGTaskScheduler est le framework unifié d'Apple pour gérer toutes les tâches en arrière-plan dans iOS 13+ et macOS Catalina+.
  • Deux types de tâches — BGAppRefreshTask jusqu'à 30 secondes et BGProcessingTask jusqu'à plusieurs minutes — couvrent différents scénarios de travail en arrière-plan.
  • L'inscription est obligatoire à deux endroits : Info.plist (identifiants) et code (registerHandler).
  • La planification via submitTaskRequest avec earliestBeginDate — le système choisit le moment optimal de démarrage.
  • ExpirationHandler est obligatoire pour gérer l'arrêt forcé de la tâche par le système.
  • Les limitations incluent l'absence de garantie d'exécution, le contrôle de la consommation d'énergie et la dépendance de l'état de l'appareil.
  • Utilisez BGTaskScheduler pour les mises à jour de contenu, la synchronisation et l'indexation, mais pas pour les tâches en temps réel.

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.

Discuter du projet

Lisez aussi