On-Demand Resources: wat is het, aanvraagmechanisme en opslag van resources

Auteur: IT Sectr Gepubliceerd: 2026-04-17 Leestijd: 9 min

On-Demand Resources „is Apple's technologie voor het uitgesteld laden van app-content”. In plaats van alle resources in het installatiepakket op te nemen, plaatst de ontwikkelaar ze op App Store-servers en vraagt ze aan wanneer nodig. Volgens Apple ODR Guide verkleint dit de initiële installatiegrootte en voegt nieuwe content toe zonder de app-versie bij te werken.

Belangrijkste punten

  • On-Demand Resources „mechanisme voor het laden van resources op aanvraag na installatie van de app”
  • Resources worden opgeslagen op Apple-servers en aangevraagd via NSBundleResourceRequest
  • Tags groeperen resources per functionele blokken van de app
  • Prefetching laadt resources vooraf om de UX te verbeteren
  • Opslagquota zijn beperkt en vereisen monitoring door de ontwikkelaar

Wat zijn On-Demand Resources in iOS

On-Demand Resources (ODR) „is een contentbeheersysteem ingebouwd in iOS, tvOS en macOS”. Het stelt de ontwikkelaar in staat om app-resources te verdelen in verplichte (onderdeel van het installatiepakket) en op aanvraag laadbare (opgeslagen in de App Store en gedownload wanneer nodig).

Basisconcepten van ODR

Het ODR-systeem werkt met drie belangrijke entiteiten: tags, resourcepakketten en aanvragen. Een tag is een identificerende string die een groep bestanden verenigt. Een resourcepakket is een set gegevens die aan een tag is gekoppeld. Een aanvraag is een programmatische aanroep van NSBundleResourceRequest die het laden van het pakket start.

Levenscyclus van een resourceaanvraag

Het laden van een resource doorloopt verschillende fasen: initialisatie van de aanvraag met specificatie van tags, controle op beschikbaarheid in lokale opslag, downloaden van Apple-servers bij afwezigheid, melding aan de app over gereedheid en vrijgave van de resource na gebruik. Het systeem beheert automatisch caching en verwijdering van ongebruikte resources.

FaseSysteemactieUitvoeringstijd
InitialisatieAanmaken van NSBundleResourceRequest met tagDirect
CachecontroleZoeken naar resource in lokale opslag0,1–0,5 s
DownloadenOphalen van Apple CDNAfhankelijk van grootte
MeldingAanroepen van completion handler of delegraatDirect
VrijgaveMarkeren van resource als verwijderbaar door systeemOp verzoek van iOS

Hoe werkt ODR in iOS

Het ODR-mechanisme is gebaseerd op een achtergronddienst die resourceaanvragen vanuit de App Store-cloud beheert. Wanneer de app een tag aanvraagt, controleert het systeem of de resource in de lokale cache aanwezig is. Zo niet „ start het downloaden via een achtergrond-URL-sessie met ondersteuning voor hervatting bij verbindingsonderbreking.

Aanvragen beheren 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()
    }
}

De methode conditionallyBeginAccessingResources controleert de beschikbaarheid van de resource in de cache zonder onmiddellijk te laden. Als de beschikbaarheidsvlag positief is „ gaat de app zonder vertraging verder. Als de resource ontbreekt, start beginAccessingResources het downloaden met voortgangsindicatie via de eigenschap progress.

Achtergrond laden en prioriteiten

Het iOS-systeem beheert zelf de prioriteiten van het laden van ODR-resources op basis van de huidige activiteit van de app. Als de app op de voorgrond staat, wordt geladen met hoge prioriteit. Op de achtergrond kan iOS het laden uitstellen of pauzeren bij een lage batterij.

  • Hoge prioriteit „onmiddellijk laden voor resources die direct nodig zijn”
  • Lage prioriteit „uitgesteld laden voor prefetching en voorlopige caching”
  • Achtergrond „alleen laden met actieve Wi-Fi en voldoende batterij”

Typen resources en ODR-tags

ODR-resources kunnen afbeeldingen, video's, audiobestanden, sprites, niveaugegevens en alle andere bestanden omvatten die niet kritiek zijn voor het starten van de app. Elke resource is gekoppeld aan een of meer tags die de functionele bloktoewijzing bepalen.

Content tagging in Xcode

In Xcode worden tags geconfigureerd via de inspector Resource Tags op het tabblad Target Membership. De ontwikkelaar specificeert voor elk bestand in het project of het deel uitmaakt van de hoofd-bundle of via een tag wordt geladen. Eén bestand kan tot meerdere tags behoren, wat hergebruik van resources tussen verschillende secties van de app mogelijk maakt.

xml
<!-- Voorbeeldconfiguratie van 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>

Categorieën tags op basis van levensduur

Apple onderscheidt drie categorieën ODR-tags op basis van hoe lang de resource op het apparaat moet worden bewaard. Initial Install Tags worden samen met de app geladen en nooit door het systeem verwijderd. Prefetch Tag Order bepaalt de volgorde van achtergrond laden direct na installatie. Hoofdtags worden op aanvraag geladen en kunnen door iOS worden verwijderd bij ruimtegebrek.

Naast categorieën kan elke tag een laadprioriteit hebben. Tags met hoge prioriteit worden eerder geladen dan tags met lage prioriteit, zelfs als ze later zijn aangevraagd. Dit stelt de ontwikkelaar in staat de volgorde van contentweergave te beheren: eerst kritieke resources voor het hoofdscherm, daarna aanvullend materiaal voor diepe secties van de app.

  • Initial install tags „worden geladen bij eerste installatie, niet verwijderd door systeem”
  • Prefetched tags „worden na installatie op de achtergrond gedownload voor betere UX”
  • On-demand tags „worden programmatisch aangevraagd, kunnen door iOS worden verwijderd bij ruimtegebrek”

On-Demand Resources configureren in Xcode

ODR configureren in Xcode omvat drie stappen: categoriseren van resources per tag, configureren van laadparameters in Info.plist en programmatische implementatie van aanvragen via NSBundleResourceRequest. Het meeste werk wordt aan de projectbuild-kant gedaan.

Categoriseren in Target Membership

swift
// Statuscontrole en monitoring van ODR-voortgang
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")
        }
    }
}

Voortgang van laden wordt gevolgd via de eigenschap progress van de klasse NSProgress met ondersteuning voor KVO-bewaking. De app kan een voortgangsindicator aan de gebruiker tonen tijdens het downloaden van resources. Na voltooiing van het laden zijn de resources beschikbaar in de hoofd-bundle van de app via de standaardmechanismen FileManager en NSDataAsset.

Quota- en beperkingsparameters

ODR-quota zijn afhankelijk van de iOS-versie. Vanaf iOS 13 kan het apparaat tot 20 GB aan op aanvraag geladen resources per account opslaan. Dit volume wordt verdeeld over alle apps die op het apparaat zijn geïnstalleerd „ als één app veel ruimte inneemt, blijft er minder over voor anderen.

Monitoring van gebruikte ruimte gebeurt via NSBundleResourceRequest. De app kan de beschikbare ODR-opslag controleren en op basis daarvan beslissen welke resources eerst worden geladen. Implementatie van een fallback-mechanisme wordt aanbevolen: als de ODR-opslag vol is, gebruik dan resources van verminderde kwaliteit uit de hoofd-bundle.

Bij overschrijding van het quota verwijdert het systeem resources met On-Demand-tags in de volgorde van minst recent gebruikt, te beginnen met de oudste. Resource Manager in de app-code kan het huidige volume van gebruikte ODR-opslag volgen via de eigenschap NSBundleResourceRequest.

De ontwikkelaar moet er rekening mee houden dat iOS op elk moment kan besluiten On-Demand-resources te verwijderen „ de app moet de situatie correct afhandelen waarin een eerder geladen resource plotseling niet beschikbaar is. Het wordt aanbevolen om fouten bij toegang tot resources op te vangen en opnieuw aan te vragen via beginAccessingResources. Gebruik voor kritieke resources zonder welke de app niet kan functioneren Initial Install Tags, die niet door het systeem worden verwijderd.

Voordelen en beperkingen van ODR

On-Demand Resources bieden de ontwikkelaar een flexibel hulpmiddel voor het beheren van de app-grootte, maar leggen een aantal beperkingen op met betrekking tot netwerkbeschikbaarheid en iOS-opslagbeleid.

Voordelen van ODR

Het belangrijkste voordeel van ODR „ drastische vermindering van de initiële installatiegrootte. Games met meerdere niveaus, apps met video-content of grote afbeeldingssets kunnen content in porties laden. De gebruiker krijgt direct toegang tot basisfunctionaliteit, terwijl extra resources op de achtergrond worden gedownload.

Beperkingen van de technologie

ODR vereist een constante internetverbinding voor het laden van resources bij het eerste bezoek. Een gebruiker in een gebied met slechte dekking kan vertragingen en laadfouten ondervinden. Bovendien garandeert Apple niet dat geladen resources op het apparaat blijven „ bij ruimtegebrek kan iOS On-Demand-tags zonder waarschuwing verwijderen.

  • Netwerkvereiste „eerste resourceaanvraag vereist internetverbinding”
  • Automatische verwijdering „iOS kan de cache wissen bij ruimtegebrek op het apparaat”
  • Moeilijkheid van debuggen „reproduceren van laadproblemen vereist simulatie van verschillende netwerkomstandigheden”
  • Tag-grootte „Apple raadt aan niet meer dan 512 MB per tag te gebruiken voor optimale prestaties”
  • Foutafhandeling „de app moet laadfouten correct afhandelen en aanvragen herhalen”

Veelgestelde vragen

Kan ik ODR gebruiken voor het dynamisch toevoegen van content zonder de app bij te werken?

ODR maakt het mogelijk resources toe te voegen en te wijzigen zonder een nieuwe versie in de App Store te publiceren. Het volstaat om de bestanden op de Apple-server via Xcode bij te werken en ze aan dezelfde tags toe te wijzen. Bij de volgende aanvraag ontvangt de app de huidige versie van de resource. Dit is handig voor seizoenscontent, tijdelijke promoties en A/B-testen van nieuwe afbeeldingen en lay-outs.

Hoe beheert iOS het verwijderen van ODR-resources bij ruimtegebrek?

Het systeem verwijdert resources met de On-Demand-markering wanneer ruimte moet worden vrijgemaakt voor andere apps. Initial Install Tags-resources worden niet verwijderd. De verwijderingsvolgorde wordt bepaald door het LRU (Least Recently Used)-algoritme „ eerst worden resources verwijderd die het langst niet zijn gebruikt.

Wat is de maximale grootte van ODR-resources voor één app?

Vanaf iOS 13 is de totale ODR-opslaglimiet 20 GB per Apple ID van de gebruiker. De grootte van één tag mag niet groter zijn dan 512 MB voor optimale laadprestaties. Bij overschrijding van de limiet mislukken aanvragen met de fout NSBundleResourceRequestLowDiskSpaceError.

Werkt ODR in offline modus na het eerste laden?

Ja, na het laden wordt de resource opgeslagen in de lokale cache en beschikbaar in offline modus zonder internetverbinding. Problemen ontstaan alleen als iOS de resource heeft verwijderd vanwege ruimtegebrek en de gebruiker deze zonder netwerk probeert te openen.

Waarin verschilt ODR van het eenvoudig downloaden van bestanden via URLSession?

ODR is geïntegreerd met de App Store-infrastructuur: resources worden gehost op Apple CDN, beheerd door het cachesysteem en vereisen geen eigen server van de ontwikkelaar. URLSession vereist serverinfrastructuur, versiebeheer en handmatig cachebeheer. ODR beheert ook automatisch het hervatten van downloads bij verbindingsonderbreking.

Samenvatting

  • On-Demand Resources „technologie voor uitgesteld laden van content in iOS- en tvOS-apps”
  • Systeem gebaseerd op tags die resources groeperen en aanvragen via NSBundleResourceRequest
  • Ondersteund worden alle bestandstypen: afbeeldingen, video's, audio, sprites en niveaugegevens
  • Tagcategorieën „ Initial Install, Prefetched en On-Demand met verschillende opslagbeleidsregels”
  • Opslaglimiet „ 20 GB per Apple ID, tot 512 MB per tag”
  • Installatiegrootte wordt verkleind door resources van de hoofd-bundle naar Apple-servers te verplaatsen
  • Aanbeveling „ gebruik ODR voor games, apps met mediacontent en projecten met een gelaagde structuur”

We ontwikkelen een mobiele applicatie turnkey

IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.

Bespreek het project

Lees ook