On-Demand Resources: Was es ist, Anforderungsmechanismus und Ressourcenspeicherung

Autor: IT Sectr Veröffentlicht: 2026-04-17 Lesezeit: 9 Min.

On-Demand Resources ist Apples Technologie zum verzögerten Laden von App-Inhalten. Anstatt alle Ressourcen in das Installationspaket aufzunehmen, hosten Entwickler sie auf App Store-Servern und fordern sie bei Bedarf an. Laut Apple ODR Guide reduziert dies die anfängliche Installationsgröße und ermöglicht das Hinzufügen neuer Inhalte ohne Aktualisierung der App-Version.

Wichtige Punkte

  • On-Demand Resources — ein Mechanismus zum Laden von Ressourcen auf Abruf nach der App-Installation
  • Ressourcen werden auf Apple-Servern gespeichert und über NSBundleResourceRequest angefordert
  • Tags gruppieren Ressourcen nach funktionalen Blöcken der App
  • Prefetching ermöglicht das vorzeitige Laden von Ressourcen zur Verbesserung der UX
  • Speicherkontingente sind begrenzt und erfordern eine Überwachung durch den Entwickler

Was sind On-Demand Resources in iOS

On-Demand Resources (ODR) ist ein in iOS, tvOS und macOS integriertes Content-Management-System. Es ermöglicht dem Entwickler, App-Ressourcen in obligatorische (im Installationspaket enthalten) und auf Abruf (im App Store gespeichert und bei Bedarf heruntergeladen) zu unterteilen.

ODR-Schlüsselkonzepte

Das ODR-System arbeitet mit drei Hauptentitäten: Tags, Ressourcenpaketen und Anfragen. Ein Tag ist ein String-Identifikator, der eine Gruppe von Dateien zusammenfasst. Ein Ressourcenpaket ist ein mit einem Tag verbundener Datensatz. Eine Anfrage ist ein programmatischer Aufruf von NSBundleResourceRequest, der das Laden des Pakets initiiert.

Lebenszyklus einer Ressourcenanfrage

Das Laden von Ressourcen durchläuft mehrere Phasen: Initialisierung der Anfrage mit angegebenen Tags, Prüfung der Verfügbarkeit im lokalen Speicher, Herunterladen von Apple-Servern bei Abwesenheit, Benachrichtigung der App bei Bereitschaft und Freigabe der Ressource nach der Nutzung. Das System verwaltet automatisch das Caching und die Entfernung ungenutzter Ressourcen.

PhaseSystemaktionAusführungszeit
InitialisierungErstellen von NSBundleResourceRequest mit einem TagSofort
Cache-PrüfungSuche nach Ressource im lokalen Speicher0,1–0,5 s
DownloadHerunterladen von Apple CDNAbhängig von der Größe
BenachrichtigungAufruf des Completion Handlers oder DelegatenSofort
FreigabeRessource als vom System entfernbar markierenAuf Anfrage von iOS

Wie ODR in iOS funktioniert

Der ODR-Mechanismus basiert auf einem Hintergrunddienst, der Ressourcenanfragen aus dem Cloud-Speicher des App Store verwaltet. Wenn die App ein Tag anfordert, prüft das System, ob die Ressource im lokalen Cache vorhanden ist. Wenn nicht — startet es den Download über eine Hintergrund-URL-Session mit Unterstützung zur Wiederaufnahme bei unterbrochenen Verbindungen.

Verwaltung von Anfragen über 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()
    }
}

Die Methode conditionallyBeginAccessingResources prüft die Verfügbarkeit der Ressource im Cache ohne sofortiges Laden. Wenn das Verfügbarkeitsflag positiv ist — setzt die App ohne Verzögerung fort. Wenn die Ressource fehlt, startet beginAccessingResources den Download mit Fortschrittsanzeige über die Eigenschaft progress.

Hintergrundladen und Prioritäten

iOS verwaltet die Prioritäten des ODR-Ressourcenladens basierend auf der aktuellen App-Aktivität. Wenn die App im Vordergrund ist, wird das Laden mit hoher Priorität durchgeführt. Im Hintergrund kann iOS das Laden bei niedrigem Akkustand verzögern oder anhalten.

  • Hohe Priorität — sofortiges Laden für Ressourcen, die gerade benötigt werden
  • Niedrige Priorität — verzögertes Laden für Prefetching und vorläufiges Caching
  • Hintergrund — Laden nur bei aktivem Wi-Fi und ausreichendem Akku

Ressourcentypen und ODR-Tags

ODR-Ressourcen können Bilder, Videos, Audiodateien, Sprites, Leveldaten und alle anderen Dateien umfassen, die für den App-Start nicht kritisch sind. Jede Ressource ist mit einem oder mehreren Tags verbunden, die ihre Zugehörigkeit zu einem funktionalen Block bestimmen.

Content-Tagging in Xcode

In Xcode werden Tags über den Resource Tags-Inspektor auf dem Tab Target Membership konfiguriert. Der Entwickler gibt für jede Projektdatei an, ob sie im Hauptbundle enthalten oder per Tag geladen wird. Eine Datei kann mehreren Tags angehören, was die Wiederverwendung von Ressourcen in verschiedenen App-Bereichen ermöglicht.

xml
<!-- Beispiel für die Konfiguration von Resource Tags in Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Tag-Kategorien nach Lebensdauer

Apple unterscheidet drei ODR-Tag-Kategorien basierend darauf, wie lange eine Ressource auf dem Gerät verbleiben soll. Initial Install Tags werden mit der App geladen und niemals vom System gelöscht. Die Prefetch Tag Order bestimmt die Reihenfolge des Hintergrund-Vorladens unmittelbar nach der Installation. Haupt-Tags werden auf Abruf angefordert und können von iOS bei Speichermangel gelöscht werden.

Zusätzlich zu den Kategorien kann jedes Tag eine Download-Priorität haben. Tags mit hoher Priorität werden vor niedrigprioren Tags geladen, selbst wenn sie später angefordert wurden. Dies ermöglicht dem Entwickler, die Reihenfolge des Erscheinens von Inhalten zu steuern: zunächst kritische Ressourcen für den Hauptbildschirm, dann zusätzliche Materialien für tiefere App-Bereiche.

  • Initial Install Tags — werden bei der Erstinstallation geladen, nicht vom System entfernt
  • Prefetched Tags — werden nach der Installation im Hintergrund heruntergeladen, um die UX zu verbessern
  • On-Demand Tags — werden programmatisch angefordert, können von iOS bei Speichermangel gelöscht werden

Konfiguration von On-Demand Resources in Xcode

ODR-Setup in Xcode umfasst drei Phasen: Kategorisierung von Ressourcen nach Tags, Konfiguration der Download-Parameter in Info.plist und programmatische Implementierung von Anfragen über NSBundleResourceRequest. Der Großteil der Arbeit erfolgt auf der Build-Seite.

Kategorisierung im Target Membership

swift
// Überprüfung des ODR-Status und Überwachung des Fortschritts
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)% geladen")
        }
    }
}

Der Download-Fortschritt wird über die progress-Eigenschaft der NSProgress-Klasse mit KVO-Beobachtungsunterstützung verfolgt. Die App kann dem Benutzer während des Downloads einen Ladeindikator anzeigen. Nach Abschluss des Downloads sind die Ressourcen über die standardmäßigen FileManager- und NSDataAsset-Mechanismen im Haupt-App-Bundle verfügbar.

Kontingent- und Beschränkungsparameter

ODR-Kontingente hängen von der iOS-Version ab. Ab iOS 13 kann ein Gerät bis zu 20 GB an On-Demand-Ressourcen pro Konto speichern. Dieser Speicherplatz wird von allen auf dem Gerät installierten Apps gemeinsam genutzt — wenn eine App viel Platz beansprucht, bleibt weniger für andere übrig.

Die Überwachung des belegten Speicherplatzes erfolgt über NSBundleResourceRequest. Die App kann den verfügbaren ODR-Speicher überprüfen und entsprechend entscheiden, welche Ressourcen zuerst geladen werden sollen. Es wird empfohlen, einen Fallback-Mechanismus zu implementieren: Wenn der ODR-Speicher voll ist, verwenden Sie Ressourcen in reduzierter Qualität aus dem Hauptbundle.

Wenn das Kontingent überschritten wird, entfernt das System die On-Demand-getaggten Ressourcen in der Reihenfolge der geringsten letzten Nutzung, beginnend mit den ältesten. Der Ressourcen-Manager im App-Code kann die aktuelle ODR-Speichernutzung über die NSBundleResourceRequest-Eigenschaft verfolgen.

Entwickler müssen berücksichtigen, dass iOS jederzeit entscheiden kann, On-Demand-Ressourcen zu löschen — die App muss Situationen korrekt behandeln, in denen eine zuvor geladene Ressource plötzlich nicht mehr verfügbar ist. Es wird empfohlen, Ressourcenzugriffsfehler abzufangen und erneut über beginAccessingResources anzufordern. Für kritische Ressourcen, ohne die die App nicht funktionieren kann, verwenden Sie Initial Install Tags, die nicht vom System entfernt werden.

Vorteile und Grenzen von ODR

On-Demand Resources bieten Entwicklern ein flexibles Werkzeug zur Verwaltung der App-Größe, bringen jedoch eine Reihe von Einschränkungen in Bezug auf Netzwerkverfügbarkeit und iOS-Speicherrichtlinien mit sich.

Vorteile der Nutzung von ODR

Der Hauptvorteil von ODR ist die drastische Reduzierung der anfänglichen Installationsgröße. Spiele mit mehreren Levels, Apps mit Videoinhalten oder großen Bildersammlungen können Inhalte portionsweise laden. Der Benutzer erhält sofort Zugriff auf die Basisfunktionalität, während zusätzliche Ressourcen im Hintergrund heruntergeladen werden.

Technologische Grenzen

ODR erfordert eine ständige Internetverbindung zum Laden von Ressourcen beim ersten Zugriff. Benutzer in Gebieten mit schlechter Abdeckung können Verzögerungen und Download-Fehlern ausgesetzt sein. Darüber hinaus garantiert Apple nicht, dass heruntergeladene Ressourcen auf dem Gerät verbleiben — bei Speichermangel kann iOS On-Demand-Tags ohne Vorwarnung löschen.

  • Netzwerkanforderung — die erste Ressourcenanfrage erfordert eine Internetverbindung
  • Automatisches Löschen — iOS kann den Cache bei Speichermangel leeren
  • Debugging-Komplexität — die Reproduktion von Ladeproblemen erfordert die Simulation verschiedener Netzwerkbedingungen
  • Tag-Größe — Apple empfiehlt, 512 MB pro Tag für optimale Leistung nicht zu überschreiten
  • Fehlerbehandlung — die App muss Ladefehler korrekt behandeln und Anfragen wiederholen

Häufig gestellte Fragen

Kann ODR zum dynamischen Hinzufügen von Inhalten ohne App-Update verwendet werden?

ODR ermöglicht das Hinzufügen und Ändern von Ressourcen, ohne eine neue Version im App Store zu veröffentlichen. Aktualisieren Sie einfach die Dateien auf dem Apple-Server über Xcode und weisen Sie sie denselben Tags zu. Bei der nächsten Anfrage erhält die App die neueste Version der Ressource. Dies ist praktisch für saisonale Inhalte, zeitlich begrenzte Aktionen und A/B-Tests neuer Bilder und Layouts.

Wie verwaltet iOS das Löschen von ODR-Ressourcen bei Speichermangel?

Das System löscht On-Demand-getaggte Ressourcen, wenn es Speicherplatz für andere Apps freigeben muss. Ressourcen von Initial Install Tags werden nicht gelöscht. Die Löschreihenfolge wird durch den LRU (Least Recently Used)-Algorithmus bestimmt — zuerst werden die Ressourcen gelöscht, auf die am längsten nicht zugegriffen wurde.

Was ist die maximale ODR-Ressourcengröße für eine einzelne App?

Seit iOS 13 beträgt das gesamte ODR-Speicherlimit 20 GB pro Apple-ID-Benutzer. Die Größe eines einzelnen Tags sollte 512 MB nicht überschreiten, um eine optimale Download-Leistung zu gewährleisten. Bei Überschreitung des Limits schlagen Anfragen mit NSBundleResourceRequestLowDiskSpaceError fehl.

Funktioniert ODR nach dem ersten Download im Offline-Modus?

Ja, nach dem Herunterladen wird die Ressource im lokalen Cache gespeichert und ist im Offline-Modus ohne Internetverbindung verfügbar. Probleme treten nur auf, wenn iOS die Ressource aufgrund von Speichermangel gelöscht hat und der Benutzer versucht, ohne Netzwerk darauf zuzugreifen.

Wie unterscheidet sich ODR vom einfachen Datei-Download über URLSession?

ODR ist in die App Store-Infrastruktur integriert: Ressourcen werden auf Apples CDN gehostet, vom Caching-System verwaltet und erfordern keinen eigenen Server. URLSession erfordert Serverinfrastruktur, Versionskontrolle und manuelles Caching. ODR behandelt auch automatisch die Wiederaufnahme von Downloads bei Verbindungsunterbrechungen.

Zusammenfassung

  • On-Demand Resources — eine Technologie zum verzögerten Laden von Inhalten in iOS- und tvOS-Apps
  • Das System basiert auf Tags, die Ressourcen gruppieren, und Anfragen über NSBundleResourceRequest
  • Alle Dateitypen werden unterstützt: Bilder, Videos, Audio, Sprites und Leveldaten
  • Tag-Kategorien — Initial Install, Prefetched und On-Demand mit unterschiedlichen Speicherrichtlinien
  • Speicherlimit — 20 GB pro Apple-ID, bis zu 512 MB pro Tag
  • Die Installationsgröße wird durch Auslagern von Ressourcen aus dem Hauptbundle auf Apple-Server reduziert
  • Empfehlung — ODR für Spiele, Medien-Content-Apps und Projekte mit mehrstufiger Struktur verwenden

Wir entwickeln eine mobile Applikation schlüsselfertig

IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.

Projekt besprechen

Lesen Sie auch