On-Demand Resources: co to je, mechanismus požadavku a ukládání zdrojů

Autor: IT Sectr Publikováno: 2026-04-17 Doba čtení: 9 min

On-Demand Resources „je technologie Apple pro odložené načítání obsahu aplikace”. Místo zahrnutí všech zdrojů do instalačního balíčku je vývojář umístí na servery App Store a vyžádá si je podle potřeby. Podle Apple ODR Guide to umožňuje zmenšit velikost počáteční instalace a přidávat nový obsah bez aktualizace verze aplikace.

Hlavní body

  • On-Demand Resources „mechanismus načítání zdrojů na vyžádání po instalaci aplikace”
  • Zdroje jsou uloženy na serverech Apple a vyžadovány prostřednictvím NSBundleResourceRequest
  • Tagy seskupují zdroje podle funkčních bloků aplikace
  • Prefetching umožňuje načítat zdroje předem pro zlepšení UX
  • Kvóty úložiště jsou omezené a vyžadují monitorování ze strany vývojáře

Co jsou On-Demand Resources v iOS

On-Demand Resources (ODR) „je systém správy obsahu integrovaný do iOS, tvOS a macOS”. Umožňuje vývojáři rozdělit zdroje aplikace na povinné (součást instalačního balíčku) a načítatelné na vyžádání (uložené v App Store a stažené podle potřeby).

Základní pojmy ODR

Systém ODR pracuje se třemi klíčovými entitami: tagy, balíčky zdrojů a požadavky. Tag je identifikační řetězec, který spojuje skupinu souborů. Balíček zdrojů je sada dat spojená s tagem. Požadavek je programové volání NSBundleResourceRequest, které spouští načítání balíčku.

Životní cyklus požadavku na zdroj

Načítání zdroje prochází několika fázemi: inicializace požadavku s uvedením tagů, kontrola dostupnosti v lokálním úložišti, stažení ze serverů Apple při absenci, upozornění aplikace na připravenost a uvolnění zdroje po použití. Systém automaticky spravuje ukládání do mezipaměti a odstraňování nepoužívaných zdrojů.

FázeAkce systémuDoba provedení
InicializaceVytvoření NSBundleResourceRequest s tagemOkamžitě
Kontrola mezipamětiVyhledání zdroje v lokálním úložišti0,1–0,5 s
StaženíStažení z CDN AppleZávisí na velikosti
UpozorněníVolání completion handler nebo delegátaOkamžitě
UvolněníOznačení zdroje jako odstranitelného systémemNa vyžádání iOS

Jak funguje ODR v iOS

Mechanismus ODR je založen na službě na pozadí, která spravuje požadavky na zdroje z cloudového úložiště App Store. Když aplikace požaduje tag, systém zkontroluje, zda je zdroj v místní mezipaměti. Pokud ne „ spustí stahování prostřednictvím relace URL na pozadí s podporou obnovení při přerušení spojení.

Správa požadavků prostřednictvím 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 kontroluje dostupnost zdroje v mezipaměti bez okamžitého načítání. Pokud je příznak dostupnosti pozitivní „ aplikace pokračuje v práci bez zpoždění. Pokud zdroj chybí, beginAccessingResources spustí stahování s indikací průběhu prostřednictvím vlastnosti progress.

Načítání na pozadí a priority

Systém iOS sám spravuje priority načítání zdrojů ODR v závislosti na aktuální aktivitě aplikace. Pokud je aplikace v popředí, načítání probíhá s vysokou prioritou. Na pozadí může iOS načítání zpozdit nebo pozastavit při nízké baterii.

  • Vysoká priorita „okamžité načítání pro zdroje potřebné okamžitě”
  • Nízká priorita „odložené načítání pro prefetching a předběžné ukládání do mezipaměti”
  • Pozadí „načítání pouze s aktivní Wi-Fi a dostatečnou baterií”

Typy zdrojů a tagy ODR

Zdroje ODR mohou zahrnovat obrázky, videa, zvukové soubory, sprity, data úrovní a jakékoli další soubory, které nejsou kritické pro spuštění aplikace. Každý zdroj je vázán na jeden nebo více tagů, které určují jeho příslušnost k funkčnímu bloku.

Označování obsahu v Xcode

V Xcode se tagy konfigurují pomocí inspektoru Resource Tags na kartě Target Membership. Vývojář pro každý soubor v projektu určí, zda je součástí hlavního balíčku nebo se načítá prostřednictvím tagu. Jeden soubor může patřit k více tagům, což umožňuje opětovné použití zdrojů mezi různými sekcemi aplikace.

xml
<!-- Příklad konfigurace Resource Tags v Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Kategorie tagů podle životnosti

Apple rozlišuje tři kategorie tagů ODR podle toho, jak dlouho má být zdroj na zařízení uchováván. Initial Install Tags se načítají spolu s aplikací a systém je nikdy neodstraňuje. Prefetch Tag Order určuje pořadí načítání na pozadí ihned po instalaci. Hlavní tagy se načítají na vyžádání a mohou být odstraněny iOS při nedostatku místa.

Kromě kategorií může mít každý tag prioritu načítání. Tagy s vysokou prioritou se načítají před tagy s nízkou prioritou, i když byly vyžádány později. To umožňuje vývojáři řídit pořadí zobrazení obsahu: nejprve kritické zdroje pro hlavní obrazovku, poté doplňkové materiály pro hluboké sekce aplikace.

  • Initial install tags „načítají se při první instalaci, neodstraňuje je systém”
  • Prefetched tags „stahují se na pozadí po instalaci pro zlepšení UX”
  • On-demand tags „vyžadují se programově, mohou být odstraněny iOS při nedostatku místa”

Nastavení On-Demand Resources v Xcode

Nastavení ODR v Xcode zahrnuje tři fáze: kategorizace zdrojů podle tagů, konfigurace parametrů načítání v Info.plist a programová implementace požadavků prostřednictvím NSBundleResourceRequest. Většina práce se provádí na straně sestavení projektu.

Kategorizace v Target Membership

swift
// Kontrola stavu a monitorování průběhu 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)% načteno")
        }
    }
}

Průběh načítání je sledován prostřednictvím vlastnosti progress třídy NSProgress s podporou pozorování KVO. Aplikace může uživateli zobrazit indikátor průběhu během stahování zdrojů. Po dokončení načítání jsou zdroje k dispozici v hlavním balíčku aplikace prostřednictvím standardních mechanismů FileManager a NSDataAsset.

Parametry kvót a omezení

Kvóty ODR závisí na verzi iOS. Od iOS 13 může zařízení ukládat až 20 GB načtených zdrojů na vyžádání na jeden účet. Tento objem je rozdělen mezi všechny aplikace nainstalované na zařízení „ pokud jedna aplikace zabírá mnoho místa, ostatním zbývá méně.

Sledování obsazeného místa se provádí prostřednictvím NSBundleResourceRequest. Aplikace může zkontrolovat dostupné úložiště ODR a podle toho rozhodnout, které zdroje načíst jako první. Implementace mechanismu fallback se doporučuje: pokud je úložiště ODR plné, použijte zdroje z hlavního balíčku se sníženou kvalitou.

Při překročení kvóty systém odstraňuje zdroje s tagy On-Demand v pořadí podle nejméně nedávného použití, počínaje nejstaršími. Resource Manager v kódu aplikace může sledovat aktuální objem obsazeného úložiště ODR prostřednictvím vlastnosti NSBundleResourceRequest.

Vývojář musí vzít v úvahu, že iOS může kdykoli rozhodnout o odstranění zdrojů On-Demand „ aplikace by měla správně zpracovat situaci, kdy dříve načtený zdroj náhle není k dispozici. Doporučuje se zachytávat chyby přístupu ke zdrojům a znovu je vyžadovat prostřednictvím beginAccessingResources. Pro kriticky důležité zdroje, bez kterých aplikace nemůže fungovat, použijte Initial Install Tags, které systém neodstraňuje.

Výhody a omezení ODR

On-Demand Resources poskytují vývojáři flexibilní nástroj pro správu velikosti aplikace, ale ukládají řadu omezení souvisejících s dostupností sítě a politikami úložiště iOS.

Výhody použití ODR

Hlavní výhoda ODR „ radikální snížení velikosti počáteční instalace. Hry s několika úrovněmi, aplikace s video obsahem nebo velkými sadami obrázků mohou načítat obsah po částech. Uživatel získá přístup k základní funkcionalitě okamžitě, zatímco další zdroje se stahují na pozadí.

Omezení technologie

ODR vyžaduje trvalé připojení k internetu pro načítání zdrojů při prvním přístupu. Uživatel v oblasti se špatným pokrytím může narazit na zpoždění a chyby načítání. Kromě toho Apple nezaručuje, že načtené zdroje zůstanou na zařízení „ při nedostatku místa může iOS odstranit tagy On-Demand bez varování.

  • Potřeba sítě „první požadavek na zdroj vyžaduje připojení k internetu”
  • Automatické odstraňování „iOS může vyčistit mezipaměť při nedostatku místa na zařízení”
  • Obtížnost ladění „reprodukce problémů s načítáním vyžaduje simulaci různých síťových podmínek”
  • Velikost tagu „Apple doporučuje nepřekračovat 512 MB na jeden tag pro optimální výkon”
  • Zpracování chyb „aplikace musí správně zpracovávat chyby načítání a opakovat požadavky”

Často kladené otázky

Mohu použít ODR pro dynamické přidávání obsahu bez aktualizace aplikace?

ODR umožňuje přidávat a měnit zdroje bez publikování nové verze v App Store. Stačí aktualizovat soubory na serveru Apple prostřednictvím Xcode a přiřadit je ke stejným tagům. Při příštím požadavku aplikace obdrží aktuální verzi zdroje. To je vhodné pro sezónní obsah, dočasné promoakce a A/B testování nových obrázků a rozvržení.

Jak iOS spravuje odstraňování zdrojů ODR při nedostatku místa?

Systém odstraňuje zdroje s označením On-Demand, když je potřeba uvolnit místo pro jiné aplikace. Zdroje Initial Install Tags se neodstraňují. Pořadí odstraňování určuje algoritmus LRU (Least Recently Used) „ nejprve se odstraní zdroje, ke kterým se nejdéle nepřistupovalo.

Jaká je maximální velikost zdrojů ODR pro jednu aplikaci?

Od iOS 13 je celkový limit úložiště ODR 20 GB na Apple ID uživatele. Velikost jednoho tagu by neměla přesáhnout 512 MB pro optimální výkon načítání. Při překročení limitu požadavky končí chybou NSBundleResourceRequestLowDiskSpaceError.

Funguje ODR v offline režimu po počátečním načtení?

Ano, po načtení je zdroj uložen v místní mezipaměti a dostupný v offline režimu bez připojení k internetu. Problémy nastávají pouze tehdy, pokud iOS odstranil zdroj kvůli nedostatku místa a uživatel se k němu snaží přistoupit bez sítě.

Čím se ODR liší od jednoduchého stahování souborů prostřednictvím URLSession?

ODR je integrován s infrastrukturou App Store: zdroje jsou hostovány na CDN Apple, spravovány systémem mezipaměti a nevyžadují od vývojáře organizaci vlastního serveru. URLSession vyžaduje serverovou infrastrukturu, správu verzí a ruční správu mezipaměti. ODR také automaticky zpracovává obnovení stahování při přerušení spojení.

Shrnutí

  • On-Demand Resources „technologie odloženého načítání obsahu v aplikacích iOS a tvOS”
  • Systém založený na tazích seskupujících zdroje a požadavcích prostřednictvím NSBundleResourceRequest
  • Podporovány jsou všechny typy souborů: obrázky, videa, zvuk, sprity a data úrovní
  • Kategorie tagů „ Initial Install, Prefetched a On-Demand s různými politikami ukládání”
  • Limit úložiště „ 20 GB na Apple ID, až 512 MB na tag”
  • Velikost instalace se snižuje přesunem zdrojů z hlavního balíčku na servery Apple
  • Doporučení „ používejte ODR pro hry, aplikace s mediálním obsahem a projekty s vícevrstvou strukturou”

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také