On-Demand Resources : ce que c’est, mécanisme de requête et stockage des ressources

Auteur : IT Sectr Publié le : 2026-04-17 Temps de lecture : 9 min

On-Demand Resources est la technologie d’Apple pour le chargement différé du contenu de l’application. Au lieu d’inclure toutes les ressources dans le package d’installation, les développeurs les hébergent sur les serveurs de l’App Store et les demandent selon les besoins. Selon Apple ODR Guide, cela réduit la taille de l’installation initiale et permet d’ajouter du nouveau contenu sans mettre à jour la version de l’application.

Points clés

  • On-Demand Resources — un mécanisme de chargement de ressources à la demande après l’installation de l’application
  • Les ressources sont stockées sur les serveurs Apple et demandées via NSBundleResourceRequest
  • Les tags regroupent les ressources par blocs fonctionnels de l’application
  • Le préchargement permet de charger les ressources à l’avance pour améliorer l’UX
  • Les quotas de stockage sont limités et nécessitent une surveillance par le développeur

Que sont les On-Demand Resources dans iOS

On-Demand Resources (ODR) est un système de gestion de contenu intégré à iOS, tvOS et macOS. Il permet au développeur de diviser les ressources de l’application en obligatoires (incluses dans le package d’installation) et à la demande (stockées dans l’App Store et téléchargées en cas de besoin).

Concepts clés de l’ODR

Le système ODR fonctionne avec trois entités principales : les tags, les packs de ressources et les requêtes. Un tag est un identifiant de chaîne qui regroupe un ensemble de fichiers. Un pack de ressources est un ensemble de données associé à un tag. Une requête est un appel programmatique à NSBundleResourceRequest qui initie le chargement du pack.

Cycle de vie d’une requête de ressource

Le chargement des ressources passe par plusieurs étapes : initialisation de la requête avec les tags spécifiés, vérification de disponibilité dans le stockage local, téléchargement depuis les serveurs Apple si absent, notification à l’application lorsque prêt et libération de la ressource après utilisation. Le système gère automatiquement la mise en cache et la suppression des ressources inutilisées.

ÉtapeAction du systèmeTemps d’exécution
InitialisationCréation de NSBundleResourceRequest avec un tagInstantanné
Vérification du cacheRecherche de la ressource dans le stockage local0,1–0,5 s
TéléchargementTéléchargement depuis le CDN AppleDépend de la taille
NotificationAppel du gestionnaire d’achèvement ou déléguéInstantanné
LibérationMarquage de la ressource comme supprimable par le systèmeSur demande d’iOS

Comment ODR fonctionne dans iOS

Le mécanisme ODR est basé sur un service d’arrière-plan qui gère les demandes de ressources depuis le stockage cloud de l’App Store. Lorsque l’application demande un tag, le système vérifie si la ressource existe dans le cache local. Si ce n’est pas le cas — il lance le téléchargement via une session URL d’arrière-plan avec prise en charge de la reprise pour les connexions interrompues.

Gestion des requêtes via NSBundleResourceRequest

swift
import Foundation

class ResourceManager {
    let odrRequest = NSBundleResourceRequest(tags: ["level-3"])

    func loadLevel3() {
        odrRequest.conditionallyBeginAccessingResources { available in
            if available {
                self.startLevel3()
            } else {
                self.odrRequest.beginAccessingResources { error in
                    guard error == nil else { return }
                    self.startLevel3()
                }
            }
        }
    }

    func releaseResources() {
        odrRequest.endAccessingResources()
    }
}

La méthode conditionallyBeginAccessingResources vérifie la disponibilité de la ressource dans le cache sans chargement immédiat. Si l’indicateur de disponibilité est positif — l’application continue sans délai. Si la ressource est absente, beginAccessingResources lance le téléchargement avec indication de progression via la propriété progress.

Chargement en arrière-plan et priorités

iOS gère les priorités de chargement des ressources ODR en fonction de l’activité actuelle de l’application. Lorsque l’application est au premier plan, le chargement est effectué avec une priorité élevée. En arrière-plan, iOS peut retarder le chargement ou le suspendre lorsque la batterie est faible.

  • Priorité élevée — chargement immédiat pour les ressources nécessaires immédiatement
  • Priorité basse — chargement différé pour le préchargement et la mise en cache préliminaire
  • Arrière-plan — chargement uniquement avec Wi-Fi actif et batterie suffisante

Types de ressources et tags ODR

Les ressources ODR peuvent inclure des images, des vidéos, des fichiers audio, des sprites, des données de niveaux et tout autre fichier non critique pour le lancement de l’application. Chaque ressource est liée à un ou plusieurs tags qui déterminent son appartenance à un bloc fonctionnel.

Taggage de contenu dans Xcode

Dans Xcode, les tags sont configurés via l’inspecteur Resource Tags dans l’onglet Target Membership. Le développeur spécifie pour chaque fichier du projet s’il est inclus dans le bundle principal ou chargé par tag. Un fichier peut appartenir à plusieurs tags, permettant la réutilisation des ressources dans différentes sections de l’application.

xml
<!-- Exemple de configuration des Resource Tags dans Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Catégories de tags par durée de vie

Apple distingue trois catégories de tags ODR en fonction de la durée pendant laquelle une ressource doit rester sur l’appareil. Les tags d’installation initiale sont chargés avec l’application et ne sont jamais supprimés par le système. L’ordre de préchargement des tags détermine la séquence de chargement en arrière-plan immédiatement après l’installation. Les tags principaux sont demandés à la demande et peuvent être supprimés par iOS lorsque l’espace est insuffisant.

En plus des catégories, chaque tag peut avoir une priorité de téléchargement. Les tags avec priorité élevée sont chargés avant ceux à faible priorité, même s’ils ont été demandés plus tard. Cela permet au développeur de contrôler l’ordre d’apparition du contenu : d’abord les ressources critiques pour l’écran principal, puis les matériaux supplémentaires pour les sections profondes de l’application.

  • Tags d’installation initiale — chargés lors de la première installation, non supprimés par le système
  • Tags préchargés — téléchargés en arrière-plan après l’installation pour améliorer l’UX
  • Tags à la demande — demandés programmatiquement, peuvent être supprimés par iOS en cas de manque d’espace

Configuration des On-Demand Resources dans Xcode

La configuration ODR dans Xcode comprend trois étapes : catégorisation des ressources par tags, configuration des paramètres de téléchargement dans Info.plist et implémentation programmatique des requêtes via NSBundleResourceRequest. La majeure partie du travail est effectuée côté build.

Catégorisation dans Target Membership

swift
// Vérification du statut et suivi de la progression ODR
func monitorODRProgress(tag: String) {
    let request = NSBundleResourceRequest(tags: [tag])
    let observer = request.progress.observe(\.fractionCompleted) { progress, _ in
        DispatchQueue.main.async {
            let percent = Int(progress.fractionCompleted * 100)
            print("ODR : \(percent)% chargé")
        }
    }
}

La progression du téléchargement est suivie via la propriété progress de la classe NSProgress avec prise en charge de l’observation KVO. L’application peut afficher un indicateur de chargement à l’utilisateur pendant le téléchargement des ressources. Une fois le téléchargement terminé, les ressources sont disponibles dans le bundle principal de l’application via les mécanismes standard FileManager et NSDataAsset.

Paramètres de quotas et limitations

Les quotas ODR dépendent de la version d’iOS. À partir d’iOS 13, un appareil peut stocker jusqu’à 20 Go de ressources à la demande par compte. Cet espace est partagé entre toutes les applications installées sur l’appareil — si une application occupe beaucoup d’espace, il en reste moins pour les autres.

La surveillance de l’espace utilisé se fait via NSBundleResourceRequest. L’application peut vérifier le stockage ODR disponible et décider en conséquence quelles ressources charger en premier. Il est recommandé d’implémenter un mécanisme de repli : si le stockage ODR est plein, utilisez des ressources de qualité réduite provenant du bundle principal.

Lorsque le quota est dépassé, le système supprime les ressources avec des tags à la demande dans l’ordre du moins récemment utilisé, en commençant par les plus anciennes. Le gestionnaire de ressources dans le code de l’application peut suivre l’utilisation actuelle du stockage ODR via la propriété NSBundleResourceRequest.

Les développeurs doivent considérer qu’iOS peut décider à tout moment de supprimer les ressources à la demande — l’application doit gérer correctement les situations où une ressource précédemment chargée devient soudainement indisponible. Il est recommandé d’intercepter les erreurs d’accès aux ressources et de les redemander via beginAccessingResources. Pour les ressources critiques sans lesquelles l’application ne peut pas fonctionner, utilisez des tags d’installation initiale qui ne sont pas supprimés par le système.

Avantages et limites de l’ODR

On-Demand Resources offrent au développeur un outil flexible pour gérer la taille de l’application, mais imposent un certain nombre de limitations liées à la disponibilité du réseau et aux politiques de stockage d’iOS.

Avantages de l’utilisation de l’ODR

Le principal avantage de l’ODR est la réduction radicale de la taille de l’installation initiale. Les jeux à plusieurs niveaux, les applications avec contenu vidéo ou de grands ensembles d’images peuvent charger le contenu par portions. L’utilisateur accède immédiatement aux fonctionnalités de base, tandis que les ressources supplémentaires sont téléchargées en arrière-plan.

Limitations technologiques

L’ODR nécessite une connexion Internet constante pour charger les ressources lors du premier accès. Les utilisateurs dans les zones à faible couverture peuvent rencontrer des retards et des erreurs de téléchargement. De plus, Apple ne garantit pas que les ressources téléchargées restent sur l’appareil — lorsque l’espace est insuffisant, iOS peut supprimer les tags à la demande sans préavis.

  • Nécessité de réseau — la première demande de ressource nécessite une connexion Internet
  • Suppression automatique — iOS peut vider le cache en cas de manque d’espace sur l’appareil
  • Complexité de débogage — reproduire les problèmes de chargement nécessite de simuler diverses conditions réseau
  • Taille du tag — Apple recommande de ne pas dépasser 512 Mo par tag pour des performances optimales
  • Gestion des erreurs — l’application doit gérer correctement les échecs de chargement et répéter les demandes

Questions fréquentes

Peut-on utiliser ODR pour ajouter dynamiquement du contenu sans mettre à jour l’application ?

ODR permet d’ajouter et de modifier des ressources sans publier une nouvelle version sur l’App Store. Il suffit de mettre à jour les fichiers sur le serveur Apple via Xcode et de les assigner aux mêmes tags. Lors de la prochaine demande, l’application recevra la version la plus récente de la ressource. C’est pratique pour le contenu saisonnier, les promotions temporaires et les tests A/B de nouvelles images et maquettes.

Comment iOS gère-t-il la suppression des ressources ODR en cas de manque d’espace ?

Le système supprime les ressources avec des tags à la demande lorsqu’il doit libérer de l’espace pour d’autres applications. Les ressources des tags d’installation initiale ne sont pas supprimées. L’ordre de suppression est déterminé par l’algorithme LRU (Least Recently Used) — les premières à être supprimées sont les ressources qui n’ont pas été consultées depuis le plus longtemps.

Quelle est la taille maximale des ressources ODR pour une seule application ?

Depuis iOS 13, la limite totale de stockage ODR est de 20 Go par utilisateur Apple ID. La taille d’un seul tag ne doit pas dépasser 512 Mo pour des performances de téléchargement optimales. Lorsque la limite est dépassée, les requêtes échouent avec NSBundleResourceRequestLowDiskSpaceError.

ODR fonctionne-t-il hors ligne après le téléchargement initial ?

Oui, après le téléchargement, la ressource est sauvegardée dans le cache local et disponible en mode hors ligne sans connexion Internet. Les problèmes surviennent uniquement si iOS a supprimé la ressource en raison d’un manque d’espace et que l’utilisateur tente d’y accéder sans réseau.

En quoi ODR diffère-t-il du simple téléchargement de fichiers via URLSession ?

ODR est intégré à l’infrastructure de l’App Store : les ressources sont hébergées sur le CDN d’Apple, gérées par le système de cache et ne nécessitent pas que le développeur configure son propre serveur. URLSession nécessite une infrastructure serveur, un contrôle de version et une gestion manuelle du cache. ODR gère également automatiquement la reprise du téléchargement en cas d’interruption de connexion.

Résumé

  • On-Demand Resources — une technologie de chargement différé de contenu dans les applications iOS et tvOS
  • Le système est basé sur des tags regroupant les ressources et des requêtes via NSBundleResourceRequest
  • Tous les types de fichiers sont pris en charge : images, vidéos, audio, sprites et données de niveaux
  • Catégories de tags — installation initiale, préchargés et à la demande avec différentes politiques de stockage
  • Limite de stockage — 20 Go par Apple ID, jusqu’à 512 Mo par tag
  • La taille d’installation est réduite en déplaçant les ressources du bundle principal vers les serveurs Apple
  • Recommandation — utiliser ODR pour les jeux, les applications multimédias et les projets à structure multi-niveaux

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