On-Demand Resources: cosa sono, meccanismo di richiesta e archiviazione delle risorse

Autore: IT Sectr Pubblicato: 2026-04-17 Tempo di lettura: 9 min

On-Demand Resources è la tecnologia Apple per il caricamento differito del contenuto dell’applicazione. Invece di includere tutte le risorse nel pacchetto di installazione, gli sviluppatori le ospitano sui server dell’App Store e le richiedono secondo necessità. Secondo Apple ODR Guide, ciò riduce la dimensione dell’installazione iniziale e consente di aggiungere nuovi contenuti senza aggiornare la versione dell’app.

Punti chiave

  • On-Demand Resources — un meccanismo per caricare risorse su richiesta dopo l’installazione dell’app
  • Le risorse sono memorizzate sui server Apple e richieste tramite NSBundleResourceRequest
  • I tag raggruppano le risorse per blocchi funzionali dell’app
  • Il precaricamento consente di caricare le risorse in anticipo per migliorare l’UX
  • Le quote di archiviazione sono limitate e richiedono il monitoraggio da parte dello sviluppatore

Cosa sono gli On-Demand Resources in iOS

On-Demand Resources (ODR) è un sistema di gestione dei contenuti integrato in iOS, tvOS e macOS. Consente allo sviluppatore di suddividere le risorse dell’app in obbligatorie (incluse nel pacchetto di installazione) e su richiesta (memorizzate nell’App Store e scaricate quando necessario).

Concetti chiave di ODR

Il sistema ODR opera con tre entità principali: tag, pacchetti di risorse e richieste. Un tag è un identificatore di stringa che raggruppa un insieme di file. Un pacchetto di risorse è un set di dati associato a un tag. Una richiesta è una chiamata programmatica a NSBundleResourceRequest che avvia il caricamento del pacchetto.

Ciclo di vita della richiesta di risorse

Il caricamento delle risorse attraversa diverse fasi: inizializzazione della richiesta con i tag specificati, verifica della disponibilità nell’archivio locale, download dai server Apple se assente, notifica all’app quando pronto e rilascio della risorsa dopo l’uso. Il sistema gestisce automaticamente la memorizzazione nella cache e la rimozione delle risorse inutilizzate.

FaseAzione del sistemaTempo di esecuzione
InizializzazioneCreazione di NSBundleResourceRequest con un tagIstantaneo
Controllo cacheRicerca della risorsa nell’archivio locale0,1–0,5 s
DownloadDownload dalla CDN AppleDipende dalla dimensione
NotificaChiamata al completion handler o delegatoIstantaneo
RilascioMarcatura della risorsa come rimovibile dal sistemaSu richiesta di iOS

Come funziona ODR in iOS

Il meccanismo ODR si basa su un servizio in background che gestisce le richieste di risorse dall’archivio cloud dell’App Store. Quando l’app richiede un tag, il sistema verifica se la risorsa esiste nella cache locale. In caso contrario — avvia il download tramite una sessione URL in background con supporto per la ripresa delle connessioni interrotte.

Gestione delle richieste tramite 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()
    }
}

Il metodo conditionallyBeginAccessingResources verifica la disponibilità della risorsa nella cache senza caricamento immediato. Se il flag di disponibilità è positivo — l’app continua senza ritardo. Se la risorsa è assente, beginAccessingResources avvia il download con indicazione di avanzamento tramite la proprietà progress.

Caricamento in background e priorità

iOS gestisce le priorità di caricamento delle risorse ODR in base all’attività corrente dell’app. Quando l’app è in primo piano, il caricamento viene eseguito con priorità alta. In background, iOS può ritardare il caricamento o sospenderlo quando la batteria è scarica.

  • Priorità alta — caricamento immediato per le risorse necessarie subito
  • Priorità bassa — caricamento differito per precaricamento e caching preliminare
  • Background — caricamento solo con Wi-Fi attivo e batteria sufficiente

Tipi di risorse e tag ODR

Le risorse ODR possono includere immagini, video, file audio, sprite, dati dei livelli e qualsiasi altro file non critico per l’avvio dell’app. Ogni risorsa è legata a uno o più tag che determinano la sua appartenenza a un blocco funzionale.

Tagging dei contenuti in Xcode

In Xcode, i tag vengono configurati tramite l’ispettore Resource Tags nella scheda Target Membership. Lo sviluppatore specifica per ogni file del progetto se è incluso nel bundle principale o caricato tramite tag. Un file può appartenere a più tag, consentendo il riutilizzo delle risorse in diverse sezioni dell’app.

xml
<!-- Esempio di configurazione dei 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 di tag per durata di vita

Apple distingue tre categorie di tag ODR in base a quanto tempo una risorsa deve rimanere sul dispositivo. I tag di installazione iniziale vengono caricati con l’app e non vengono mai eliminati dal sistema. L’ordine di precaricamento dei tag determina la sequenza di caricamento in background immediatamente dopo l’installazione. I tag principali vengono richiesti su richiesta e possono essere eliminati da iOS quando lo spazio è insufficiente.

Oltre alle categorie, ogni tag può avere una priorità di download. I tag con priorità alta vengono caricati prima di quelli a priorità bassa, anche se sono stati richiesti dopo. Ciò consente allo sviluppatore di controllare l’ordine di apparizione dei contenuti: prima le risorse critiche per la schermata principale, poi i materiali aggiuntivi per le sezioni profonde dell’app.

  • Tag di installazione iniziale — caricati durante la prima installazione, non rimossi dal sistema
  • Tag precaricati — scaricati in background dopo l’installazione per migliorare l’UX
  • Tag su richiesta — richiesti programmaticamente, possono essere eliminati da iOS quando lo spazio scarseggia

Configurazione degli On-Demand Resources in Xcode

La configurazione di ODR in Xcode include tre fasi: categorizzazione delle risorse per tag, configurazione dei parametri di download in Info.plist e implementazione programmatica delle richieste tramite NSBundleResourceRequest. La maggior parte del lavoro viene svolta sul lato build.

Categorizzazione in Target Membership

swift
// Controllo dello stato e monitoraggio dell’avanzamento 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)% caricato")
        }
    }
}

L’avanzamento del download viene tracciato tramite la proprietà progress della classe NSProgress con supporto dell’osservazione KVO. L’app può mostrare un indicatore di caricamento all’utente durante il download delle risorse. Al completamento del download, le risorse sono disponibili nel bundle principale dell’app tramite i meccanismi standard FileManager e NSDataAsset.

Parametri di quote e limitazioni

Le quote ODR dipendono dalla versione di iOS. A partire da iOS 13, un dispositivo può memorizzare fino a 20 GB di risorse su richiesta per account. Questo spazio è condiviso tra tutte le app installate sul dispositivo — se un’app occupa molto spazio, ne rimane meno per le altre.

Il monitoraggio dello spazio utilizzato viene effettuato tramite NSBundleResourceRequest. L’app può controllare l’archiviazione ODR disponibile e decidere di conseguenza quali risorse caricare per prime. Si consiglia di implementare un meccanismo di fallback: se l’archiviazione ODR è piena, utilizzare risorse di qualità ridotta dal bundle principale.

Quando la quota viene superata, il sistema rimuove le risorse con tag su richiesta nell’ordine del meno recentemente utilizzato, a partire dalle più vecchie. Il gestore delle risorse nel codice dell’app può tracciare l’uso corrente dell’archiviazione ODR tramite la proprietà NSBundleResourceRequest.

Gli sviluppatori devono considerare che iOS può decidere in qualsiasi momento di eliminare le risorse su richiesta — l’app deve gestire correttamente le situazioni in cui una risorsa precedentemente caricata diventa improvvisamente non disponibile. Si consiglia di intercettare gli errori di accesso alle risorse e di richiederle nuovamente tramite beginAccessingResources. Per le risorse critiche senza le quali l’app non può funzionare, utilizzare i tag di installazione iniziale che non vengono rimossi dal sistema.

Vantaggi e limiti di ODR

On-Demand Resources offrono allo sviluppatore uno strumento flessibile per gestire la dimensione dell’app, ma impongono una serie di limitazioni legate alla disponibilità della rete e alle politiche di archiviazione di iOS.

Vantaggi dell’uso di ODR

Il principale vantaggio di ODR è la riduzione radicale della dimensione dell’installazione iniziale. I giochi con più livelli, le app con contenuti video o grandi set di immagini possono caricare i contenuti in porzioni. L’utente ottiene l’accesso alle funzionalità di base immediatamente, mentre le risorse aggiuntive vengono scaricate in background.

Limitazioni della tecnologia

ODR richiede una connessione Internet costante per caricare le risorse al primo accesso. Gli utenti in aree con copertura scarsa possono riscontrare ritardi ed errori di download. Inoltre, Apple non garantisce che le risorse scaricate rimangano sul dispositivo — quando lo spazio è insufficiente, iOS può eliminare i tag su richiesta senza preavviso.

  • Necessità di rete — la prima richiesta di risorsa richiede una connessione Internet
  • Eliminazione automatica — iOS può pulire la cache quando lo spazio del dispositivo è scarso
  • Complessità di debug — riprodurre i problemi di caricamento richiede la simulazione di varie condizioni di rete
  • Dimensione del tag — Apple consiglia di non superare 512 MB per tag per prestazioni ottimali
  • Gestione degli errori — l’app deve gestire correttamente i fallimenti di caricamento e ripetere le richieste

Domande frequenti

Si può usare ODR per aggiungere dinamicamente contenuti senza aggiornare l’app?

ODR consente di aggiungere e modificare risorse senza pubblicare una nuova versione sull’App Store. Basta aggiornare i file sul server Apple tramite Xcode e assegnarli agli stessi tag. Alla richiesta successiva, l’app riceverà la versione più recente della risorsa. Questo è utile per contenuti stagionali, promozioni temporanee e test A/B di nuove immagini e layout.

Come gestisce iOS l’eliminazione delle risorse ODR quando lo spazio è insufficiente?

Il sistema elimina le risorse con tag su richiesta quando deve liberare spazio per altre app. Le risorse dei tag di installazione iniziale non vengono eliminate. L’ordine di eliminazione è determinato dall’algoritmo LRU (Least Recently Used) — le prime a essere eliminate sono le risorse a cui non si è acceduto da più tempo.

Qual è la dimensione massima delle risorse ODR per una singola app?

A partire da iOS 13, il limite totale di archiviazione ODR è di 20 GB per utente Apple ID. La dimensione di un singolo tag non deve superare 512 MB per prestazioni di download ottimali. Quando il limite viene superato, le richieste falliscono con NSBundleResourceRequestLowDiskSpaceError.

ODR funziona offline dopo il download iniziale?

Sì, dopo il download, la risorsa viene salvata nella cache locale ed è disponibile in modalità offline senza connessione Internet. I problemi sorgono solo se iOS ha eliminato la risorsa a causa della mancanza di spazio e l’utente tenta di accedervi senza rete.

In cosa ODR si differenzia dal semplice download di file tramite URLSession?

ODR è integrato con l’infrastruttura dell’App Store: le risorse sono ospitate sulla CDN Apple, gestite dal sistema di caching e non richiedono allo sviluppatore di configurare un proprio server. URLSession richiede infrastruttura server, controllo versione e gestione manuale della cache. ODR gestisce anche automaticamente la ripresa del download in caso di interruzione della connessione.

Riepilogo

  • On-Demand Resources — una tecnologia per il caricamento differito di contenuti nelle app iOS e tvOS
  • Il sistema si basa su tag che raggruppano le risorse e richieste tramite NSBundleResourceRequest
  • Tutti i tipi di file sono supportati: immagini, video, audio, sprite e dati dei livelli
  • Categorie di tag — installazione iniziale, precaricati e su richiesta con diverse politiche di archiviazione
  • Limite di archiviazione — 20 GB per Apple ID, fino a 512 MB per tag
  • La dimensione dell’installazione si riduce spostando le risorse dal bundle principale ai server Apple
  • Raccomandazione — utilizzare ODR per giochi, app con contenuti multimediali e progetti con struttura multilivello

Svilupperemo un'applicazione mobile chiavi in mano

IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.

Discuti il progetto

Leggi anche