On-Demand Resources: co to jest, mechanizm żądania i przechowywanie zasobów

Autor: IT Sectr Opublikowano: 2026-04-17 Czas czytania: 9 min

On-Demand Resources „ to technologia Apple do opóźnionego pobierania treści aplikacji. Zamiast dołączać wszystkie zasoby do pakietu instalacyjnego, programista umieszcza je na serwerach App Store i pobiera w razie potrzeby. Według Apple ODR Guide pozwala to zmniejszyć rozmiar początkowej instalacji i dodawać nową treść bez aktualizacji wersji aplikacji.

Najważniejsze

  • On-Demand Resources „ mechanizm pobierania zasobów na żądanie po instalacji aplikacji
  • Zasoby są przechowywane na serwerach Apple i pobierane przez NSBundleResourceRequest
  • Tagi grupują zasoby według funkcjonalnych bloków aplikacji
  • Prefetching pozwala wczytywać zasoby z wyprzedzeniem dla poprawy UX
  • Limity pamięci są ograniczone i wymagają monitorowania przez programistę

Czym są On-Demand Resources w iOS

On-Demand Resources (ODR) „ to system zarządzania treścią wbudowany w iOS, tvOS i macOS. Pozwala programiście podzielić zasoby aplikacji na obowiązkowe (wchodzące w skład pakietu instalacyjnego) i pobierane na żądanie (przechowywane w App Store i pobierane w razie potrzeby).

Podstawowe pojęcia ODR

System ODR operuje trzema kluczowymi jednostkami: tagami, pakietami zasobów i żądaniami. Tag „ to ciąg znaków identyfikujący grupę plików. Pakiet zasobów „ to zestaw danych powiązanych z tagiem. Żądanie „ to programowe wywołanie NSBundleResourceRequest inicjujące pobranie pakietu.

Cykl życia żądania zasobu

Pobieranie zasobu przechodzi kilka etapów: inicjalizacja żądania z określeniem tagów, sprawdzenie dostępności w lokalnym magazynie, pobranie z serwerów Apple w razie braku, powiadomienie aplikacji o gotowości i zwolnienie zasobu po użyciu. System automatycznie zarządza buforowaniem i usuwaniem nieużywanych zasobów.

EtapDziałanie systemuCzas wykonania
InicjalizacjaUtworzenie NSBundleResourceRequest z tagiemNatychmiast
Sprawdzenie pamięci podręcznejWyszukanie zasobu w lokalnym magazynie0,1–0,5 s
PobieranieŚciągnięcie z CDN AppleZależy od rozmiaru
PowiadomienieWywołanie completion handler lub delegataNatychmiast
ZwolnienieOznaczenie zasobu jako możliwego do usunięcia przez systemNa żądanie iOS

Jak działa ODR w iOS

Mechanizm ODR opiera się na usłudze działającej w tle, która zarządza żądaniami zasobów z chmury App Store. Gdy aplikacja żąda tagu, system sprawdza, czy zasób znajduje się w lokalnej pamięci podręcznej. Jeśli nie „ rozpoczyna pobieranie przez sesję URL w tle z obsługą wznawiania po przerwaniu połączenia.

Zarządzanie żądaniami przez 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 sprawdza dostępność zasobu w pamięci podręcznej bez natychmiastowego pobierania. Jeśli flaga dostępności jest pozytywna „ aplikacja kontynuuje działanie bez opóźnienia. Jeśli zasób jest nieobecny, beginAccessingResources uruchamia pobieranie z postępem śledzonym przez właściwość progress.

Pobieranie w tle i priorytety

System iOS sam zarządza priorytetami pobierania zasobów ODR w zależności od bieżącej aktywności aplikacji. Jeśli aplikacja jest na pierwszym planie, pobieranie odbywa się z wysokim priorytetem. W tle iOS może opóźnić pobieranie lub wstrzymać je przy niskim poziomie baterii.

  • High priority „ natychmiastowe pobieranie dla zasobów potrzebnych od razu
  • Low priority „ opóźnione pobieranie dla prefetchingu i wstępnego buforowania
  • Background „ pobieranie tylko przy aktywnym Wi-Fi i wystarczającym poziomie baterii

Typy zasobów i tagi ODR

Zasoby ODR mogą obejmować obrazy, wideo, pliki audio, sprite'y, dane poziomów i wszelkie inne pliki niekrytyczne dla uruchomienia aplikacji. Każdy zasób jest przypisany do jednego lub kilku tagów, które określają jego przynależność do bloku funkcjonalnego.

Content Tagging w Xcode

W Xcode tagi konfiguruje się przez inspektor Resource Tags na karcie Target Membership. Programista określa dla każdego pliku w projekcie, czy wchodzi on w skład głównego pakietu, czy jest pobierany przez tag. Jeden plik może należeć do wielu tagów, co pozwala na współdzielenie zasobów między różnymi sekcjami aplikacji.

xml
<!-- Przykładowa konfiguracja Resource Tags w 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ów według czasu życia

Apple wyróżnia trzy kategorie tagów ODR w zależności od tego, jak długo zasób powinien być przechowywany na urządzeniu. Initial Install Tags są pobierane wraz z aplikacją i nigdy nie są usuwane przez system. Prefetch Tag Order określa kolejność wczytywania w tle zaraz po instalacji. Główne tagi są pobierane na żądanie i mogą być usunięte przez iOS przy braku miejsca.

Oprócz kategorii, każdy tag może mieć priorytet pobierania. Tagi z wysokim priorytetem są pobierane przed niskopriorytetowymi, nawet jeśli zostały zażądane później. Pozwala to programiście zarządzać kolejnością pojawiania się treści: najpierw krytyczne zasoby dla głównego ekranu, potem dodatkowe materiały dla głębokich sekcji aplikacji.

  • Initial install tags „ pobierane przy pierwszej instalacji, nieusuwane przez system
  • Prefetched tags „ ściągane w tle po instalacji dla poprawy UX
  • On-demand tags „ pobierane programowo, mogą być usunięte przez iOS przy braku miejsca

Konfiguracja On-Demand Resources w Xcode

Konfiguracja ODR w Xcode obejmuje trzy etapy: kategoryzacja zasobów według tagów, konfiguracja parametrów pobierania w Info.plist i programowa implementacja żądań przez NSBundleResourceRequest. Większość pracy wykonuje się po stronie kompilacji projektu.

Kategoryzacja w Target Membership

swift
// Sprawdzenie statusu i monitorowanie postępu 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)% załadowano")
        }
    }
}

Postęp pobierania jest śledzony przez właściwość progress klasy NSProgress z obsługą obserwacji KVO. Aplikacja może wyświetlić użytkownikowi wskaźnik postępu podczas pobierania zasobów. Po zakończeniu pobierania zasoby są dostępne w głównym pakiecie aplikacji przez standardowe mechanizmy FileManager i NSDataAsset.

Parametry limitów i ograniczeń

Limity ODR zależą od wersji iOS. Od iOS 13 urządzenie może przechowywać do 20 GB pobranych na żądanie zasobów na jedno konto. Ten wolumen jest rozdzielany między wszystkie aplikacje zainstalowane na urządzeniu „ jeśli jedna aplikacja zajęła dużo miejsca, innym pozostaje mniej.

Monitorowanie zajętego miejsca odbywa się przez NSBundleResourceRequest. Aplikacja może sprawdzać dostępną pamięć ODR i w zależności od tego decydować, które zasoby pobrać w pierwszej kolejności. Zaleca się zaimplementowanie mechanizmu fallback: jeśli pamięć ODR jest pełna, używać zasobów z głównego pakietu o obniżonej jakości.

Po przekroczeniu limitu system usuwa zasoby z tagami On-Demand w kolejności najmniej ostatnio używanych, zaczynając od najstarszych. Resource Manager w kodzie aplikacji może śledzić bieżący wolumen zajętej pamięci ODR przez właściwość NSBundleResourceRequest.

Programista musi uwzględnić, że iOS może w każdej chwili podjąć decyzję o usunięciu zasobów On-Demand „ aplikacja powinna poprawnie obsługiwać sytuację, gdy wcześniej pobrany zasób nagle staje się niedostępny. Zaleca się przechwytywanie błędów dostępu do zasobów i ponowne ich żądanie przez beginAccessingResources. Dla krytycznie ważnych zasobów, bez których aplikacja nie może działać, należy używać Initial Install Tags, które nie są usuwane przez system.

Zalety i ograniczenia ODR

On-Demand Resources dają programiście elastyczne narzędzie do zarządzania rozmiarem aplikacji, ale nakładają szereg ograniczeń związanych z dostępnością sieci i politykami pamięci iOS.

Zalety stosowania ODR

Główna zaleta ODR „ radykalne zmniejszenie rozmiaru początkowej instalacji. Gry z wieloma poziomami, aplikacje z treścią wideo lub dużymi zestawami obrazów mogą pobierać treść porcjami. Użytkownik otrzymuje dostęp do podstawowej funkcjonalności od razu, a dodatkowe zasoby są pobierane w tle.

Ograniczenia technologii

ODR wymaga stałego połączenia z internetem do pobierania zasobów przy pierwszym dostępie. Użytkownik w obszarze o słabym zasięgu może napotkać opóźnienia i błędy pobierania. Ponadto Apple nie gwarantuje, że pobrane zasoby pozostaną na urządzeniu „ przy braku miejsca iOS może usunąć tagi On-Demand bez ostrzeżenia.

  • Konieczność sieci „ pierwsze żądanie zasobu wymaga połączenia z internetem
  • Automatyczne usuwanie „ iOS może wyczyścić pamięć podręczną przy braku miejsca na urządzeniu
  • Trudność debugowania „ odtworzenie problemów z pobieraniem wymaga symulacji różnych warunków sieciowych
  • Rozmiar tagu „ Apple zaleca nie przekraczać 512 MB na jeden tag dla optymalnej wydajności
  • Obsługa błędów „ aplikacja musi poprawnie obsługiwać błędy pobierania i ponawiać żądania

Często zadawane pytania

Czy mogę używać ODR do dynamicznego dodawania treści bez aktualizacji aplikacji?

ODR pozwala dodawać i zmieniać zasoby bez publikowania nowej wersji w App Store. Wystarczy zaktualizować pliki na serwerze Apple przez Xcode i przypisać je do tych samych tagów. Przy następnym żądaniu aplikacja otrzyma aktualną wersję zasobu. Jest to wygodne dla treści sezonowych, tymczasowych promocji i testów A/B nowych obrazów i układów.

Jak iOS zarządza usuwaniem zasobów ODR przy braku miejsca?

System usuwa zasoby oznaczone jako On-Demand, gdy trzeba zwolnić miejsce dla innych aplikacji. Zasoby Initial Install Tags nie są usuwane. Kolejność usuwania określa algorytm LRU (Least Recently Used) „ najpierw usuwane są zasoby, do których najdłużej nie było dostępu.

Jaki jest maksymalny rozmiar zasobów ODR dla jednej aplikacji?

Od iOS 13 całkowity limit pamięci ODR wynosi 20 GB na jeden Apple ID użytkownika. Rozmiar jednego tagu nie powinien przekraczać 512 MB dla optymalnej wydajności pobierania. Po przekroczeniu limitu żądania kończą się błędem NSBundleResourceRequestLowDiskSpaceError.

Czy ODR działa w trybie offline po wstępnym pobraniu?

Tak, po pobraniu zasób jest zapisywany w lokalnej pamięci podręcznej i dostępny w trybie offline bez połączenia z internetem. Problemy występują tylko jeśli iOS usunął zasób z powodu braku miejsca, a użytkownik próbuje uzyskać do niego dostęp bez sieci.

Czym ODR różni się od zwykłego pobierania plików przez URLSession?

ODR jest zintegrowany z infrastrukturą App Store: zasoby są hostowane na CDN Apple, zarządzane przez system buforowania i nie wymagają od programisty organizacji własnego serwera. URLSession wymaga infrastruktury serwerowej, kontroli wersji i ręcznego zarządzania buforem. ODR dodatkowo automatycznie obsługuje wznawianie pobierania po przerwaniu połączenia.

Podsumowanie

  • On-Demand Resources „ technologia opóźnionego pobierania treści w aplikacjach iOS i tvOS
  • System oparty na tagach grupujących zasoby i żądaniach przez NSBundleResourceRequest
  • Obsługiwane są wszystkie typy plików: obrazy, wideo, audio, sprite'y i dane poziomów
  • Kategorie tagów „ Initial Install, Prefetched i On-Demand z różnymi politykami przechowywania
  • Limit pamięci „ 20 GB na Apple ID, do 512 MB na jeden tag
  • Rozmiar instalacji jest zmniejszany przez przeniesienie zasobów z głównego pakietu na serwery Apple
  • Zalecenie „ używać ODR dla gier, aplikacji z treścią multimedialną i projektów o wielopoziomowej strukturze

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również