On-Demand Resources: vad det är, begäranmekanism och lagring av resurser

Författare: IT Sectr Publicerad: 2026-04-17 Lästid: 9 min

On-Demand Resources " är Apples teknik för fördröjd laddning av appinnehåll. Istället för att inkludera alla resurser i installationspaketet placerar utvecklaren dem på App Store-servrar och begär dem vid behov. Enligt Apple ODR Guide minskar detta storleken på den initiala installationen och gör det möjligt att lägga till nytt innehåll utan att uppdatera appversionen.

Huvudpunkter

  • On-Demand Resources " mekanism för att ladda resurser på begäran efter installation av appen
  • Resurser lagras på Apples servrar och begärs via NSBundleResourceRequest
  • Taggar grupperar resurser efter appens funktionella block
  • Prefetching gör det möjligt att ladda resurser i förväg för att förbättra UX
  • Kvoter för lagring är begränsade och kräver övervakning av utvecklaren

Vad är On-Demand Resources i iOS

On-Demand Resources (ODR) " är ett inbyggt innehållshanteringssystem i iOS, tvOS och macOS. Det gör det möjligt för utvecklaren att dela upp appresurser i obligatoriska (ingår i installationspaketet) och laddningsbara på begäran (lagras i App Store och laddas ner vid behov).

Grundläggande begrepp inom ODR

ODR-systemet arbetar med tre nyckelenheter: taggar, resurspaket och begäranden. En tagg är en identifieringssträng som förenar en grupp filer. Ett resurspaket är en uppsättning data som är kopplad till en tagg. En begäran är ett programmatiskt anrop av NSBundleResourceRequest som startar laddningen av paketet.

Livscykeln för en resursbegäran

Laddning av resurs går igenom flera steg: initiering av begäran med specificering av taggar, kontroll av tillgänglighet i lokal lagring, nedladdning från Apples servrar vid frånvaro, notifiering av appen om beredskap och frigöring av resursen efter användning. Systemet hanterar automatiskt cachning och borttagning av oanvända resurser.

StegSystemåtgärdExekveringstid
InitieringSkapa NSBundleResourceRequest med taggOmedelbart
CachekontrollSök efter resurs i lokal lagring0,1–0,5 s
NedladdningHämta från Apple CDNBeror på storlek
NotifieringAnropa completion handler eller delegatOmedelbart
FrigöringMarkera resurs som borttagbar av systemetPå begäran av iOS

Hur fungerar ODR i iOS

ODR-mekanismen är baserad på en bakgrundstjänst som hanterar resursbegäranden från App Stores molnlagring. När appen begär en tagg kontrollerar systemet om resursen finns i den lokala cachen. Om inte " startar den nedladdning via en bakgrunds-URL-session med stöd för återupptagning vid avbrott i anslutningen.

Hantera begäranden 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()
    }
}

Metoden conditionallyBeginAccessingResources kontrollerar resursens tillgänglighet i cachen utan omedelbar laddning. Om tillgänglighetsflaggan är positiv " fortsätter appen utan fördröjning. Om resursen saknas startar beginAccessingResources nedladdning med förloppsindikering via egenskapen progress.

Bakgrundsladdning och prioriteringar

iOS-systemet hanterar själv prioriteringarna för laddning av ODR-resurser beroende på appens aktuella aktivitet. Om appen är i förgrunden sker laddning med hög prioritet. I bakgrunden kan iOS fördröja laddningen eller pausa den vid låg batterinivå.

  • Hög prioritet " omedelbar laddning för resurser som behövs direkt
  • Låg prioritet " fördröjd laddning för prefetching och förberedande cachning
  • Bakgrund " laddning endast med aktivt Wi-Fi och tillräckligt batteri

Typer av resurser och ODR-taggar

ODR-resurser kan omfatta bilder, videor, ljudfiler, sprites, nivådata och alla andra filer som inte är kritiska för att starta appen. Varje resurs är kopplad till en eller flera taggar som bestämmer dess tillhörighet till ett funktionellt block.

Innehållstagging i Xcode

I Xcode konfigureras taggar via inspektören Resource Tags på fliken Target Membership. Utvecklaren specificerar för varje fil i projektet om den ingår i huvudbundeln eller laddas via en tagg. En fil kan tillhöra flera taggar, vilket möjliggör återanvändning av resurser mellan olika delar av appen.

xml
<!-- Exempel på konfiguration av Resource Tags i Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Kategorier av taggar baserat på livslängd

Apple särskiljer tre kategorier av ODR-taggar beroende på hur länge resursen ska lagras på enheten. Initial Install Tags laddas tillsammans med appen och tas aldrig bort av systemet. Prefetch Tag Order bestämmer ordningen för bakgrundsladdning omedelbart efter installation. Huvudtaggar laddas på begäran och kan tas bort av iOS vid utrymmesbrist.

Utöver kategorier kan varje tagg ha en laddningsprioritet. Taggar med hög prioritet laddas före taggar med låg prioritet, även om de begärdes senare. Detta gör det möjligt för utvecklaren att hantera ordningen för innehållsvisning: först kritiska resurser för huvudskärmen, sedan ytterligare material för djupa delar av appen.

  • Initial install tags " laddas vid första installationen, tas inte bort av systemet
  • Prefetched tags " laddas ner i bakgrunden efter installation för att förbättra UX
  • On-demand tags " begärs programmatiskt, kan tas bort av iOS vid utrymmesbrist

Konfigurera On-Demand Resources i Xcode

Konfigurering av ODR i Xcode omfattar tre steg: kategorisering av resurser per tagg, konfigurering av laddningsparametrar i Info.plist och programmatisk implementering av begäranden via NSBundleResourceRequest. Merparten av arbetet utförs på projektdelen.

Kategorisering i Target Membership

swift
// Statuskontroll och övervakning av ODR-förlopp
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)% laddad")
        }
    }
}

Förloppet för laddning spåras via egenskapen progress i klassen NSProgress med stöd för KVO-observation. Appen kan visa en förloppsindikator för användaren under nedladdning av resurser. Efter slutförd laddning är resurserna tillgängliga i appens huvudbundle via standardmekanismerna FileManager och NSDataAsset.

Kvot- och begränsningsparametrar

ODR-kvoter beror på iOS-versionen. Från och med iOS 13 kan enheten lagra upp till 20 GB på begäran laddade resurser per konto. Denna volym fördelas mellan alla appar installerade på enheten " om en app tar mycket plats återstår mindre för andra.

Övervakning av använt utrymme görs via NSBundleResourceRequest. Appen kan kontrollera tillgängligt ODR-lagringsutrymme och baserat på detta besluta vilka resurser som ska laddas först. Implementering av en fallback-mekanism rekommenderas: om ODR-lagringen är full, använd resurser från huvudbundeln med reducerad kvalitet.

Vid överskridande av kvoten tar systemet bort resurser med On-Demand-taggar i ordning av minst nyligen använt, med början från de äldsta. Resource Manager i appkoden kan spåra den aktuella volymen av använt ODR-lagringsutrymme via egenskapen NSBundleResourceRequest.

Utvecklaren måste ta hänsyn till att iOS när som helst kan besluta att ta bort On-Demand-resurser " appen måste korrekt hantera situationen när en tidigare laddad resurs plötsligt blir otillgänglig. Det rekommenderas att fånga fel vid åtkomst till resurser och begära dem igen via beginAccessingResources. För kritiska resurser utan vilka appen inte kan fungera, använd Initial Install Tags som inte tas bort av systemet.

Fördelar och begränsningar med ODR

On-Demand Resources ger utvecklaren ett flexibelt verktyg för att hantera appstorleken, men medför en rad begränsningar relaterade till nätverkstillgänglighet och iOS-lagringspolicy.

Fördelar med att använda ODR

Den största fördelen med ODR " drastisk minskning av den initiala installationsstorleken. Spel med flera nivåer, appar med videoinnehåll eller stora bildsamlingar kan ladda innehåll i portioner. Användaren får omedelbart tillgång till grundläggande funktionalitet medan ytterligare resurser laddas ner i bakgrunden.

Begränsningar med tekniken

ODR kräver en permanent internetanslutning för att ladda resurser vid första åtkomst. En användare i ett område med dålig täckning kan drabbas av förseningar och laddningsfel. Dessutom garanterar Apple inte att laddade resurser finns kvar på enheten " vid utrymmesbrist kan iOS ta bort On-Demand-taggar utan förvarning.

  • Nätverksbehov " första resursbegäran kräver internetanslutning
  • Automatisk borttagning " iOS kan rensa cachen vid utrymmesbrist på enheten
  • Svårighet att felsöka " återskapande av laddningsproblem kräver simulering av olika nätverksförhållanden
  • Taggstorlek " Apple rekommenderar att inte överskrida 512 MB per tagg för optimal prestanda
  • Felhantering " appen måste korrekt hantera laddningsfel och upprepa begäranden

Vanliga frågor

Kan jag använda ODR för att dynamiskt lägga till innehåll utan att uppdatera appen?

ODR gör det möjligt att lägga till och ändra resurser utan att publicera en ny version i App Store. Det räcker med att uppdatera filerna på Apples server via Xcode och tilldela dem samma taggar. Vid nästa begäran kommer appen att få den aktuella versionen av resursen. Detta är praktiskt för säsongsbetonat innehåll, tillfälliga kampanjer och A/B-testning av nya bilder och layouter.

Hur hanterar iOS borttagning av ODR-resurser vid utrymmesbrist?

Systemet tar bort resurser med On-Demand-markering när utrymme behöver frigöras för andra appar. Initial Install Tags-resurser tas inte bort. Borttagningsordningen bestäms av algoritmen LRU (Least Recently Used) " först tas resurser bort som inte har använts på längst tid.

Vad är den maximala storleken på ODR-resurser för en app?

Från och med iOS 13 är den totala ODR-lagringsgränsen 20 GB per användares Apple ID. Storleken på en tagg bör inte överstiga 512 MB för optimal laddningsprestanda. Vid överskridande av gränsen misslyckas begäranden med felet NSBundleResourceRequestLowDiskSpaceError.

Funktioner ODR i offlineläge efter initial laddning?

Ja, efter laddning sparas resursen i den lokala cachen och är tillgänglig i offlineläge utan internetanslutning. Problem uppstår bara om iOS har tagit bort resursen på grund av utrymmesbrist och användaren försöker komma åt den utan nätverk.

Hur skiljer sig ODR från enkel filnedladdning via URLSession?

ODR är integrerat med App Store-infrastrukturen: resurser hostas på Apple CDN, hanteras av cachesystemet och kräver inte att utvecklaren organiserar en egen server. URLSession kräver serverinfrastruktur, versionskontroll och manuell cachehantering. ODR hanterar också automatiskt återupptagning av nedladdning vid anslutningsavbrott.

Sammanfattning

  • On-Demand Resources " teknik för fördröjd laddning av innehåll i iOS- och tvOS-appar
  • Systemet baseras på taggar som grupperar resurser och begäranden via NSBundleResourceRequest
  • Stödjer alla filtyper: bilder, videor, ljud, sprites och nivådata
  • Tagkategorier " Initial Install, Prefetched och On-Demand med olika lagringsprinciper
  • Lagringsgräns " 20 GB per Apple ID, upp till 512 MB per tagg
  • Installationsstorlek minskas genom att flytta resurser från huvudbundeln till Apples servrar
  • Rekommendation " använd ODR för spel, appar med mediainnehåll och projekt med flerskiktad struktur

Vi utvecklar en mobil applikation nyckelfärdigt

IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.

Diskutera projektet

Läs också