On-Demand Resources: mi ez, kérési mechanizmus és erőforrások tárolása

Szerző: IT Sectr Megjelenés: 2026-04-17 Olvasási idő: 9 perc

On-Demand Resources „az Apple technológiája az alkalmazás tartalmának késleltetett betöltésére”. Ahelyett, hogy az összes erőforrást a telepítőcsomagba foglalná, a fejlesztő az App Store szerverein helyezi el őket, és szükség szerint kéri le. Az Apple ODR Guide szerint ez lehetővé teszi a kezdeti telepítés méretének csökkentését és új tartalom hozzáadását az alkalmazás verziójának frissítése nélkül.

Főbb pontok

  • On-Demand Resources „az erőforrások igény szerinti betöltésének mechanizmusa az alkalmazás telepítése után”
  • Erőforrások az Apple szerverein tárolódnak, és az NSBundleResourceRequest segítségével kérhetők le
  • Címkék az erőforrásokat az alkalmazás funkcionális blokkjai szerint csoportosítják
  • Prefetching lehetővé teszi az erőforrások előzetes betöltését a UX javítása érdekében
  • Kvóták korlátozottak, és a fejlesztő részéről monitorozást igényelnek

Mik az On-Demand Resources iOS-ben

On-Demand Resources (ODR) „az iOS-be, tvOS-be és macOS-be épített tartalomkezelő rendszer”. Lehetővé teszi a fejlesztő számára, hogy az alkalmazás erőforrásait kötelező (a telepítőcsomag részét képező) és igény szerint betölthető (az App Store-ban tárolt és szükség esetén letöltött) részekre ossza.

Az ODR alapfogalmai

Az ODR rendszer három kulcsfontosságú entitással működik: címkék, erőforráscsomagok és kérések. A címke egy azonosító sztring, amely egyesíti a fájlok csoportját. Az erőforráscsomag egy címkéhez társított adathalmaz. A kérés egy NSBundleResourceRequest programozott hívása, amely elindítja a csomag betöltését.

Az erőforráskérés életciklusa

Az erőforrás betöltése több szakaszon megy keresztül: a kérés inicializálása a címkék megadásával, a helyi tárban való elérhetőség ellenőrzése, letöltés az Apple szervereiről hiány esetén, az alkalmazás értesítése a készenlétről, és az erőforrás felszabadítása használat után. A rendszer automatikusan kezeli a gyorsítótárazást és a nem használt erőforrások törlését.

SzakaszRendszer műveleteVégrehajtási idő
InicializálásNSBundleResourceRequest létrehozása címkévelAzonnal
Gyorsítótár ellenőrzésErőforrás keresése a helyi tárban0,1–0,5 mp
LetöltésLetöltés az Apple CDN-rőlMérettől függ
ÉrtesítésCompletion handler vagy delegált hívásaAzonnal
FelszabadításErőforrás megjelölése a rendszer által törölhetőkéntiOS kérésére

Hogyan működik az ODR iOS-ben

Az ODR mechanizmus egy háttérszolgáltatáson alapul, amely az App Store felhőtárhelyéről érkező erőforráskéréseket kezeli. Amikor az alkalmazás egy címkét kér, a rendszer ellenőrzi, hogy az erőforrás a helyi gyorsítótárban van-e. Ha nem „ elindítja a letöltést egy háttér URL-munkameneten keresztül, amely támogatja a megszakadt kapcsolat utáni folytatást.

Kérések kezelése az NSBundleResourceRequest segítségével

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

A conditionallyBeginAccessingResources metódus ellenőrzi az erőforrás elérhetőségét a gyorsítótárban azonnali betöltés nélkül. Ha az elérhetőségi jelző pozitív „ az alkalmazás késedelem nélkül folytatja a munkát. Ha az erőforrás hiányzik, a beginAccessingResources elindítja a letöltést a progress tulajdonságon keresztüli előrehaladás-jelzéssel.

Háttérben történő betöltés és prioritások

Az iOS rendszer maga kezeli az ODR-erőforrások betöltési prioritásait az alkalmazás aktuális tevékenységétől függően. Ha az alkalmazás az előtérben van, a betöltés magas prioritással történik. A háttérben az iOS késleltetheti a betöltést vagy felfüggesztheti azt alacsony akkumulátorszint esetén.

  • Magas prioritás „azonnali betöltés a közvetlenül szükséges erőforrásokhoz”
  • Alacsony prioritás „késleltetett betöltés az előzetes gyorsítótárazáshoz”
  • Háttér „betöltés csak aktív Wi-Fi és elegendő akkumulátor esetén”

Erőforrástípusok és ODR-címkék

Az ODR-erőforrások tartalmazhatnak képeket, videókat, hangfájlokat, sprite-okat, szintadatokat és bármilyen egyéb fájlt, amely nem kritikus az alkalmazás indításához. Minden erőforrás egy vagy több címkéhez van kötve, amelyek meghatározzák a funkcionális blokkhoz való tartozását.

Tartalom címkézése Xcode-ban

Az Xcode-ban a címkéket a Resource Tags ellenőrző segítségével konfigurálja a Target Membership fülön. A fejlesztő minden projekten belüli fájlhoz meghatározza, hogy az a fő csomag része-e vagy címkén keresztül töltődik be. Egy fájl több címkéhez is tartozhat, lehetővé téve az erőforrások újrafelhasználását az alkalmazás különböző szakaszai között.

xml
<!-- Példa a Resource Tags konfigurációra Info.plist-ben -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Címkék kategóriái élettartam szerint

Az Apple három ODR-címke kategóriát különböztet meg attól függően, hogy az erőforrás mennyi ideig tárolódjon az eszközön. Az Initial Install Tags az alkalmazással együtt töltődnek be, és a rendszer soha nem törli őket. A Prefetch Tag Order meghatározza a háttérbetöltés sorrendjét közvetlenül a telepítés után. A fő címkék igény szerint töltődnek be, és iOS törölheti őket helyhiány esetén.

A kategóriákon kívül minden címkének lehet betöltési prioritása. A magas prioritású címkék a kis prioritásúak előtt töltődnek be, még akkor is, ha később kérték őket. Ez lehetővé teszi a fejlesztő számára a tartalom megjelenési sorrendjének kezelését: először a kritikus erőforrások a főképernyőhöz, majd a kiegészítő anyagok az alkalmazás mélyebb szakaszaihoz.

  • Initial install tags „az első telepítéskor töltődnek be, a rendszer nem törli őket”
  • Prefetched tags „telepítés után a háttérben töltődnek le a UX javításához”
  • On-demand tags „programozottan kérhetők le, iOS törölheti őket helyhiány esetén”

On-Demand Resources konfigurálása Xcode-ban

Az ODR konfigurálása az Xcode-ban három lépésből áll: az erőforrások kategorizálása címkék szerint, a betöltési paraméterek konfigurálása az Info.plist-ben, és a kérések programozott megvalósítása az NSBundleResourceRequest segítségével. A munka nagy része a projekt build oldalán történik.

Kategorizálás a Target Membership-ben

swift
// Az ODR állapotának ellenőrzése és előrehaladásának monitorozása
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)% betöltve")
        }
    }
}

A betöltés előrehaladását az NSProgress osztály progress tulajdonsága követi nyomon KVO-megfigyelés támogatásával. Az alkalmazás előrehaladási jelzőt jeleníthet meg a felhasználónak az erőforrások letöltése során. A betöltés befejezése után az erőforrások elérhetők az alkalmazás fő csomagjában a FileManager és az NSDataAsset szabványos mechanizmusain keresztül.

Kvóta- és korlátozási paraméterek

Az ODR-kvóták az iOS verziójától függnek. Az iOS 13-tól kezdve az eszköz fiókonként akár 20 GB igény szerint betöltött erőforrást is tárolhat. Ez a mennyiség az eszközre telepített összes alkalmazás között oszlik meg „ ha egy alkalmazás sok helyet foglal, a többieknek kevesebb marad.

A foglalt hely monitorozása az NSBundleResourceRequest segítségével történik. Az alkalmazás ellenőrizheti a rendelkezésre álló ODR-tárhelyet, és ennek alapján döntheti el, mely erőforrásokat töltse be elsőként. Fallback mechanizmus implementálása ajánlott: ha az ODR-tárhely megtelt, használja a fő csomagból származó, csökkentett minőségű erőforrásokat.

A kvóta túllépése esetén a rendszer a legrégebben nem használt erőforrások sorrendjében törli az On-Demand címkékkel ellátott erőforrásokat. Az alkalmazáskódban lévő Resource Manager az NSBundleResourceRequest tulajdonságon keresztül nyomon követheti az ODR-tárhely aktuális foglaltságát.

A fejlesztőnek figyelembe kell vennie, hogy az iOS bármikor dönthet az On-Demand erőforrások törléséről „ az alkalmazásnak megfelelően kell kezelnie azt a helyzetet, amikor egy korábban betöltött erőforrás hirtelen nem elérhető. Javasolt az erőforrásokhoz való hozzáférési hibák elkapása és újbóli lekérése a beginAccessingResources segítségével. A kritikus erőforrásokhoz, amelyek nélkül az alkalmazás nem működhet, használja az Initial Install Tags-eket, amelyeket a rendszer nem töröl.

Az ODR előnyei és korlátai

Az On-Demand Resources rugalmas eszközt biztosít a fejlesztőnek az alkalmazás méretének kezeléséhez, de számos korlátozást ír elő a hálózati elérhetőséggel és az iOS tárolási irányelveivel kapcsolatban.

Az ODR használatának előnyei

Az ODR fő előnye „ a kezdeti telepítés méretének drasztikus csökkentése. A több szinttel rendelkező játékok, a videótartalmú alkalmazások vagy nagy képsorozatokkal rendelkező programok részletekben tölthetik be a tartalmat. A felhasználó azonnal hozzáfér az alapfunkciókhoz, a kiegészítő erőforrások pedig a háttérben töltődnek le.

A technológia korlátai

Az ODR állandó internetkapcsolatot igényel az erőforrások első alkalommal történő betöltéséhez. A gyenge lefedettségű területen lévő felhasználó késéseket és betöltési hibákat tapasztalhat. Ezenkívül az Apple nem garantálja, hogy a betöltött erőforrások az eszközön maradnak „ helyhiány esetén az iOS figyelmeztetés nélkül törölheti az On-Demand címkéket.

  • Hálózati szükséglet „az első erőforráskérés internetkapcsolatot igényel”
  • Automatikus törlés „az iOS törölheti a gyorsítótárat, ha kevés a hely az eszközön”
  • Hibakeresés nehézsége „a betöltési problémák reprodukálása különböző hálózati feltételek szimulálását igényli”
  • Címke mérete „az Apple azt javasolja, hogy ne haladja meg a 512 MB-ot címkénként az optimális teljesítmény érdekében”
  • Hibakezelés „az alkalmazásnak megfelelően kell kezelnie a betöltési hibákat, és meg kell ismételnie a kéréseket”

Gyakran Ismételt Kérdések

Használhatom az ODR-t tartalom dinamikus hozzáadására az alkalmazás frissítése nélkül?

Az ODR lehetővé teszi erőforrások hozzáadását és módosítását anélkül, hogy új verziót kellene közzétenni az App Store-ban. Elég frissíteni a fájlokat az Apple szerverén az Xcode-on keresztül, és hozzárendelni őket ugyanazokhoz a címkékhez. A következő kérésnél az alkalmazás megkapja az erőforrás aktuális verzióját. Ez kényelmes szezonális tartalomhoz, ideiglenes promóciókhoz és új képek és elrendezések A/B teszteléséhez.

Hogyan kezeli az iOS az ODR-erőforrások törlését helyhiány esetén?

A rendszer törli az On-Demand jelölésű erőforrásokat, amikor helyet kell felszabadítani más alkalmazások számára. Az Initial Install Tags erőforrások nem törlődnek. A törlési sorrendet az LRU (Least Recently Used) algoritmus határozza meg „ először azok az erőforrások törlődnek, amelyekhez a legrégebben nem fértek hozzá.

Mekkora az ODR-erőforrások maximális mérete egy alkalmazáshoz?

Az iOS 13-tól kezdve az ODR-tárhely teljes korlátja 20 GB felhasználónkénti Apple ID-nként. Egyetlen címke mérete nem haladhatja meg az 512 MB-ot az optimális betöltési teljesítmény érdekében. A korlát túllépése esetén a kérések NSBundleResourceRequestLowDiskSpaceError hibával végződnek.

Működik az ODR offline módban a kezdeti betöltés után?

Igen, a betöltés után az erőforrás a helyi gyorsítótárba kerül, és offline módban internetkapcsolat nélkül is elérhető. Problémák csak akkor merülnek fel, ha az iOS helyhiány miatt törölte az erőforrást, és a felhasználó hálózat nélkül próbál hozzáférni.

Miben különbözik az ODR az egyszerű URLSession-en keresztüli fájlletöltéstől?

Az ODR integrálva van az App Store infrastruktúrájával: az erőforrások az Apple CDN-jén vannak tárolva, a gyorsítótárazó rendszer kezeli őket, és nem igényelnek a fejlesztőtől saját szerver beállítását. Az URLSession szerverinfrastruktúrát, verziókezelést és kézi gyorsítótár-kezelést igényel. Az ODR emellett automatikusan kezeli a letöltés folytatását a kapcsolat megszakadása esetén.

Összefoglalás

  • On-Demand Resources „a tartalom késleltetett betöltésének technológiája iOS és tvOS alkalmazásokban”
  • Rendszer az erőforrásokat csoportosító címkéken és az NSBundleResourceRequest kéréseken alapul
  • Támogatott minden fájltípus: képek, videók, hang, sprite-ok és szintadatok
  • Címkekategóriák „ Initial Install, Prefetched és On-Demand eltérő tárolási irányelvekkel”
  • Tárhelykorlát „ 20 GB Apple ID-nként, címkénként legfeljebb 512 MB”
  • Telepítési méret csökken az erőforrások fő csomagból az Apple szervereire történő áthelyezésével
  • Javaslat „ használja az ODR-t játékokhoz, médiatartalmú alkalmazásokhoz és többrétegű szerkezetű projektekhez”

Kulcsrakész mobilalkalmazást fejlesztünk

Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.

Projekt megbeszélése

Olvassa el is