On-Demand Resources: ce este, mecanismul de solicitare și stocarea resurselor

Autor: IT Sectr Publicat: 2026-04-17 Timp de citire: 9 min

On-Demand Resources „este tehnologia Apple pentru încărcarea întârziată a conținutului aplicației”. În loc să includă toate resursele în pachetul de instalare, dezvoltatorul le plasează pe serverele App Store și le solicită după necesitate. Potrivit Apple ODR Guide, aceasta permite reducerea dimensiunii instalării inițiale și adăugarea de conținut nou fără actualizarea versiunii aplicației.

Principalele puncte

  • On-Demand Resources „mecanismul de încărcare a resurselor la cerere după instalarea aplicației”
  • Resursele sunt stocate pe serverele Apple și solicitate prin NSBundleResourceRequest
  • Etichetele grupează resursele pe blocuri funcționale ale aplicației
  • Prefetching permite încărcarea anticipată a resurselor pentru îmbunătățirea UX
  • Cotele de stocare sunt limitate și necesită monitorizare din partea dezvoltatorului

Ce sunt On-Demand Resources în iOS

On-Demand Resources (ODR) „este un sistem de gestionare a conținutului încorporat în iOS, tvOS și macOS”. Acesta permite dezvoltatorului să împartă resursele aplicației în obligatorii (incluse în pachetul de instalare) și încărcabile la cerere (stocate în App Store și descărcate la necesitate).

Concepte de bază ODR

Sistemul ODR operează cu trei entități cheie: etichete, pachete de resurse și solicitări. O etichetă este un șir de caractere identificator care unește un grup de fișiere. Un pachet de resurse este un set de date asociat cu o etichetă. O solicitare este un apel programatic NSBundleResourceRequest care inițiază încărcarea pachetului.

Ciclul de viață al solicitării unei resurse

Încărcarea resursei trece prin mai multe etape: inițializarea solicitării cu specificarea etichetelor, verificarea disponibilității în stocarea locală, descărcarea de pe serverele Apple în absență, notificarea aplicației despre pregătire și eliberarea resursei după utilizare. Sistemul gestionează automat memorarea în cache și ștergerea resurselor neutilizate.

EtapăAcțiunea sistemuluiTimp de execuție
InițializareCrearea NSBundleResourceRequest cu etichetăInstant
Verificare cacheCăutarea resursei în stocarea locală0,1–0,5 s
DescărcareRecepționarea de pe CDN AppleDepinde de dimensiune
NotificareApelarea completion handler sau delegatInstant
EliberareMarcarea resursei ca ștearsă de sistemLa cererea iOS

Cum funcționează ODR în iOS

Mecanismul ODR se bazează pe un serviciu de fundal care gestionează solicitările de resurse din stocarea cloud App Store. Când aplicația solicită o etichetă, sistemul verifică dacă resursa există în cache-ul local. Dacă nu „ începe descărcarea printr-o sesiune URL de fundal cu suport pentru reluare în caz de întrerupere a conexiunii.

Gestionarea solicitărilor prin 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()
    }
}

Metoda conditionallyBeginAccessingResources verifică disponibilitatea resursei în cache fără încărcare imediată. Dacă indicatorul de disponibilitate este pozitiv „ aplicația continuă lucrul fără întârziere. Dacă resursa lipsește, beginAccessingResources pornește descărcarea cu indicarea progresului prin proprietatea progress.

Descărcare în fundal și priorități

Sistemul iOS gestionează singur prioritățile de încărcare a resurselor ODR în funcție de activitatea curentă a aplicației. Dacă aplicația este în prim-plan, încărcarea se face cu prioritate ridicată. În fundal, iOS poate amâna încărcarea sau o poate suspenda la baterie scăzută.

  • Prioritate ridicată „încărcare imediată pentru resursele necesare imediat”
  • Prioritate scăzută „încărcare întârziată pentru prefetching și cache preliminar”
  • Fundal „încărcare doar cu Wi-Fi activ și suficientă baterie”

Tipuri de resurse și etichete ODR

Resursele ODR pot include imagini, videoclipuri, fișiere audio, sprite-uri, datele nivelurilor și orice alte fișiere necritice pentru lansarea aplicației. Fiecare resursă este legată de una sau mai multe etichete care determină apartenența sa la un bloc funcțional.

Etichetarea conținutului în Xcode

În Xcode, etichetele se configurează prin inspectorul Resource Tags din fila Target Membership. Dezvoltatorul specifică pentru fiecare fișier din proiect dacă face parte din pachetul principal sau este încărcat prin etichetă. Un fișier poate aparține mai multor etichete, permițând reutilizarea resurselor între diferite secțiuni ale aplicației.

xml
<!-- Exemplu de configurare Resource Tags în Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Categorii de etichete după durata de viață

Apple distinge trei categorii de etichete ODR în funcție de cât timp trebuie păstrată resursa pe dispozitiv. Initial Install Tags se încarcă odată cu aplicația și nu sunt niciodată șterse de sistem. Prefetch Tag Order determină ordinea încărcării de fundal imediat după instalare. Etichetele principale se încarcă la cerere și pot fi șterse de iOS la lipsă de spațiu.

Pe lângă categorii, fiecare etichetă poate avea o prioritate de încărcare. Etichetele cu prioritate ridicată se încarcă înaintea celor cu prioritate scăzută, chiar dacă au fost solicitate mai târziu. Aceasta permite dezvoltatorului să gestioneze ordinea apariției conținutului: mai întâi resursele critice pentru ecranul principal, apoi materialele suplimentare pentru secțiunile profunde ale aplicației.

  • Initial install tags „se încarcă la instalarea inițială, nu sunt șterse de sistem”
  • Prefetched tags „se descarcă în fundal după instalare pentru îmbunătățirea UX”
  • On-demand tags „se solicită programatic, pot fi șterse de iOS la lipsă de spațiu”

Configurarea On-Demand Resources în Xcode

Configurarea ODR în Xcode include trei etape: categorisirea resurselor pe etichete, configurarea parametrilor de încărcare în Info.plist și implementarea programatică a solicitărilor prin NSBundleResourceRequest. Majoritatea muncii se face în partea de construire a proiectului.

Categorisirea în Target Membership

swift
// Verificarea stării și monitorizarea progresului 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)% încărcat")
        }
    }
}

Progresul încărcării este urmărit prin proprietatea progress a clasei NSProgress cu suport de observare KVO. Aplicația poate afișa un indicator de progres utilizatorului în timpul descărcării resurselor. După finalizarea încărcării, resursele sunt disponibile în pachetul principal al aplicației prin mecanismele standard FileManager și NSDataAsset.

Parametrii cotelor și limitărilor

Cotele ODR depind de versiunea iOS. Începând cu iOS 13, dispozitivul poate stoca până la 20 GB de resurse încărcate la cerere pe un cont. Acest volum este distribuit între toate aplicațiile instalate pe dispozitiv „ dacă o aplicație ocupă mult spațiu, altora le rămâne mai puțin.

Monitorizarea spațiului ocupat se face prin NSBundleResourceRequest. Aplicația poate verifica spațiul de stocare ODR disponibil și în funcție de aceasta decide ce resurse să încarce primele. Se recomandă implementarea unui mecanism de fallback: dacă spațiul ODR este plin, să se utilizeze resurse din pachetul principal de calitate redusă.

La depășirea cotei, sistemul șterge resursele cu etichete On-Demand în ordinea celei mai puțin recent utilizate, începând cu cele mai vechi. Resource Manager în codul aplicației poate urmări volumul curent al spațiului ODR ocupat prin proprietatea NSBundleResourceRequest.

Dezvoltatorul trebuie să ia în considerare că iOS poate oricând decide ștergerea resurselor On-Demand „ aplicația trebuie să gestioneze corect situația în care o resursă încărcată anterior devine brusc indisponibilă. Se recomandă interceptarea erorilor de acces la resurse și re-solicitarea lor prin beginAccessingResources. Pentru resursele critice fără de care aplicația nu poate funcționa, utilizați Initial Install Tags care nu sunt șterse de sistem.

Avantaje și limitări ale ODR

On-Demand Resources oferă dezvoltatorului un instrument flexibil de gestionare a dimensiunii aplicației, dar impune o serie de limitări legate de disponibilitatea rețelei și politicile de stocare iOS.

Avantajele utilizării ODR

Principalul avantaj al ODR „ reducerea radicală a dimensiunii instalării inițiale. Jocurile cu mai multe niveluri, aplicațiile cu conținut video sau seturi mari de imagini pot încărca conținutul porționat. Utilizatorul obține acces la funcționalitatea de bază imediat, iar resursele suplimentare se descarcă în fundal.

Limitările tehnologiei

ODR necesită conexiune permanentă la internet pentru încărcarea resurselor la prima accesare. Utilizatorul într-o zonă cu acoperire slabă poate întâmpina întârzieri și erori de încărcare. În plus, Apple nu garantează că resursele încărcate vor rămâne pe dispozitiv „ la lipsă de spațiu, iOS poate șterge etichetele On-Demand fără avertisment.

  • Necesitatea rețelei „prima solicitare a resursei necesită conexiune la internet”
  • Ștergere automată „iOS poate curăța cache-ul la lipsă de spațiu pe dispozitiv”
  • Dificultatea depanării „reproducerea problemelor de încărcare necesită simularea diferitelor condiții de rețea”
  • Dimensiunea etichetei „Apple recomandă să nu depășească 512 MB per etichetă pentru performanță optimă”
  • Gestionarea erorilor „aplicația trebuie să gestioneze corect erorile de încărcare și să reia solicitările”

Întrebări frecvente

Pot folosi ODR pentru adăugarea dinamică de conținut fără actualizarea aplicației?

ODR permite adăugarea și modificarea resurselor fără publicarea unei versiuni noi în App Store. Este suficient să actualizați fișierele pe serverul Apple prin Xcode și să le atribuiți acelorași etichete. La următoarea solicitare, aplicația va primi versiunea actuală a resursei. Acest lucru este convenabil pentru conținut sezonier, promoții temporare și testarea A/B a noilor imagini și machete.

Cum gestionează iOS ștergerea resurselor ODR la lipsă de spațiu?

Sistemul șterge resursele cu eticheta On-Demand când trebuie eliberat spațiu pentru alte aplicații. Resursele Initial Install Tags nu sunt șterse. Ordinea de ștergere este determinată de algoritmul LRU (Least Recently Used) „ primele sunt șterse resursele la care nu s-a mai accesat de cel mai mult timp.

Care este dimensiunea maximă a resurselor ODR pentru o aplicație?

Începând cu iOS 13, limita totală a spațiului de stocare ODR este de 20 GB per Apple ID al utilizatorului. Dimensiunea unei etichete nu trebuie să depășească 512 MB pentru performanță optimă de încărcare. La depășirea limitei, solicitările se termină cu eroarea NSBundleResourceRequestLowDiskSpaceError.

Funcționează ODR în modul offline după încărcarea inițială?

Da, după încărcare, resursa este salvată în cache-ul local și disponibilă în modul offline fără conexiune la internet. Problemele apar doar dacă iOS a șters resursa din lipsă de spațiu și utilizatorul încearcă să o acceseze fără rețea.

Cu ce se deosebește ODR de simpla încărcare a fișierelor prin URLSession?

ODR este integrat cu infrastructura App Store: resursele sunt găzduite pe CDN Apple, gestionate de sistemul de cache și nu necesită organizarea unui server propriu de către dezvoltator. URLSession necesită infrastructură de server, controlul versiunilor și gestionarea manuală a cache-ului. ODR, de asemenea, gestionează automat reluarea încărcării la întreruperea conexiunii.

Rezumat

  • On-Demand Resources „tehnologia de încărcare întârziată a conținutului în aplicațiile iOS și tvOS”
  • Sistemul se bazează pe etichete care grupează resursele și solicitări prin NSBundleResourceRequest
  • Sunt acceptate toate tipurile de fișiere: imagini, videoclipuri, audio, sprite-uri și date ale nivelurilor
  • Categorii de etichete „ Initial Install, Prefetched și On-Demand cu politici diferite de stocare”
  • Limita de stocare „ 20 GB per Apple ID, până la 512 MB per etichetă”
  • Dimensiunea instalării se reduce prin mutarea resurselor din pachetul principal pe serverele Apple
  • Recomandare „ utilizați ODR pentru jocuri, aplicații cu conținut media și proiecte cu structură pe mai multe niveluri”

Vom dezvolta o aplicație mobilă la cheie

IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.

Discutați proiectul

Citiți și