On-Demand Resources: шта је то, механизам захтева и складиштење ресурса

Аутор: IT Sectr Објављено: 2026-04-17 Време читања: 9 мин

On-Demand Resources „је Apple технологија за одложено учитавање садржаја апликације”. Уместо да укључи све ресурсе у инсталациони пакет, програмер их поставља на App Store сервере и захтева по потреби. Према Apple ODR Guide, ово омогућава смањење величине почетне инсталације и додавање новог садржаја без ажурирања верзије апликације.

Главно

  • On-Demand Resources „механизам учитавања ресурса на захтев након инсталације апликације”
  • Ресурси се чувају на Apple серверима и захтевају се путем NSBundleResourceRequest
  • Ознаке групишу ресурсе по функционалним блоковима апликације
  • Prefetching омогућава унапред учитавање ресурса за побољшање UX
  • Квоте складишта су ограничене и захтевају надзор од стране програмера

Шта су On-Demand Resources у iOS-у

On-Demand Resources (ODR) „је систем за управљање садржајем уграђен у iOS, tvOS и macOS”. Он омогућава програмеру да подели ресурсе апликације на обавезне (улазе у инсталациони пакет) и оне који се учитавају на захтев (чувају се у App Store-у и преузимају по потреби).

Основни појмови ODR-а

ODR систем оперише са три кључна ентитета: ознаке, ресурсни пакети и захтеви. Ознака је низ знакова који идентификује групу датотека. Ресурсни пакет је скуп података повезаних са ознаком. Захтев је програмски позив NSBundleResourceRequest који покреће учитавање пакета.

Животни циклус захтева за ресурсом

Учитавање ресурса пролази кроз неколико фаза: иницијализација захтева са навођењем ознака, провера доступности у локалном складишту, преузимање са Apple сервера у одсуству, обавештавање апликације о спремности и ослобађање ресурса након употребе. Систем аутоматски управља кеширањем и брисањем неискоришћених ресурса.

ФазаАкција системаВреме извршења
ИницијализацијаКреирање NSBundleResourceRequest са ознакомТренутно
Провера кешаПретрага ресурса у локалном складишту0,1–0,5 с
ПреузимањеСкидање са Apple CDN-аЗависи од величине
ОбавештењеПозив completion handler-а или делегатаТренутно
ОслобађањеОзначавање ресурса као обрисивог од стране системаНа захтев iOS-а

Како функционише ODR у iOS-у

ODR механизам се заснива на позадинској услузи која управља захтевима за ресурсима из облака App Store-а. Када апликација затражи ознаку, систем проверава да ли ресурс постоји у локалном кешу. Ако не „ покреће преузимање путем позадинске URL сесије са подршком за наставак при прекиду везе.

Управљање захтевима путем 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()
    }
}

Метод conditionallyBeginAccessingResources проверава доступност ресурса у кешу без тренутног учитавања. Ако је ознака доступности позитивна „ апликација наставља рад без кашњења. Ако ресурс недостаје, beginAccessingResources покреће преузимање са индикацијом напретка путем својства progress.

Позадинско учитавање и приоритети

iOS систем сам управља приоритетима учитавања ODR ресурса у зависности од тренутне активности апликације. Ако је апликација у предњем плану, учитавање се врши са високим приоритетом. У позадини, iOS може одложити учитавање или га обуставити при ниској батерији.

  • Висок приоритет „тренутно учитавање за ресурсе потребне одмах”
  • Низак приоритет „одложено учитавање за prefetching и прелиминарно кеширање”
  • Позадина „учитавање само уз активан Wi-Fi и довољно батерије”

Врсте ресурса и ODR ознаке

ODR ресурси могу укључивати слике, видео записе, аудио датотеке, спрајтове, податке нивоа и све друге датотеке које нису критичне за покретање апликације. Сваки ресурс је везан за једну или више ознака које одређују његову припадност функционалном блоку.

Означавање садржаја у Xcode-у

У Xcode-у, ознаке се подешавају путем инспектора Resource Tags на картици Target Membership. Програмер за сваку датотеку у пројекту одређује да ли је део главног пакета или се учитава путем ознаке. Једна датотека може припадати више ознака, што омогућава поновну употребу ресурса између различитих делова апликације.

xml
<!-- Пример конфигурације Resource Tags у Info.plist-у -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Категорије ознака према времену живота

Apple издваја три категорије ODR ознака у зависности од тога колико дуго ресурс треба да се чува на уређају. Initial Install Tags се учитавају заједно са апликацијом и никада се не бришу од стране система. Prefetch Tag Order одређује редослед позадинског учитавања одмах након инсталације. Главне ознаке се учитавају на захтев и могу бити обрисане од стране iOS-а при недостатку простора.

Поред категорија, свака ознака може имати приоритет учитавања. Ознаке са високим приоритетом се учитавају пре оних са ниским приоритетом, чак и ако су захтеване касније. Ово омогућава програмеру да управља редоследом појављивања садржаја: прво критични ресурси за главни екран, затим додатни материјали за дубоке делове апликације.

  • Initial install tags „учитавају се при првој инсталацији, не бришу их систем”
  • Prefetched tags „преузимају се у позадини након инсталације за побољшање UX”-а
  • On-demand tags „захтевају се програмски, могу бити обрисани од стране iOS-а при недостатку простора”

Подешавање On-Demand Resources у Xcode-у

Подешавање ODR-а у Xcode-у укључује три корака: категоризација ресурса по ознакама, конфигурација параметара учитавања у Info.plist-у и програмска имплементација захтева путем NSBundleResourceRequest. Већина посла се обавља на страни изградње пројекта.

Категоризација у Target Membership-у

swift
// Провера статуса и праћење напретка 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)% учитано")
        }
    }
}

Напредак учитавања се прати путем својства progress класе NSProgress са подршком за KVO посматрање. Апликација може приказати индикатор напретка кориснику током преузимања ресурса. Након завршетка учитавања, ресурси су доступни у главном пакету апликације путем стандардних механизама FileManager-а и NSDataAsset-а.

Параметри квота и ограничења

ODR квоте зависе од верзије iOS-а. Почев од iOS 13, уређај може да складишти до 20 GB учитаних на захтев ресурса по једном налогу. Овај обим се расподељује између свих апликација инсталираних на уређају „ ако једна апликација заузме много простора, другима остаје мање.

Праћење заузетог простора се врши путем NSBundleResourceRequest-а. Апликација може проверити доступно ODR складиште и у зависности од тога одлучити које ресурсе прво учитати. Препоручује се имплементација fallback механизма: ако је ODR складиште пуно, користити ресурсе из главног пакета смањеног квалитета.

При прекорачењу квоте, систем брише ресурсе са On-Demand ознакама по реду најмање недавног коришћења, почев од најстаријих. Resource Manager у коду апликације може пратити тренутну запремину заузетог ODR складишта путем својства NSBundleResourceRequest.

Програмер мора узети у обзир да iOS може у сваком тренутку одлучити да обрише On-Demand ресурсе „ апликација треба правилно да обради ситуацију када раније учитани ресурс изненада постане недоступан. Препоручује се хватање грешака приступа ресурсима и поновно захтевање путем beginAccessingResources. За критично важне ресурсе без којих апликација не може да функционише, користите Initial Install Tags које систем не брише.

Предности и ограничења ODR-а

On-Demand Resources пружају програмеру флексибилан алат за управљање величином апликације, али намећу низ ограничења повезаних са доступношћу мреже и политикама складиштења iOS-а.

Предности коришћења ODR-а

Главна предност ODR-а „ радикално смањење величине почетне инсталације. Игре са више нивоа, апликације са видео садржајем или великим скуповима слика могу да учитавају садржај у деловима. Корисник добија приступ основном функционалности одмах, а додатни ресурси се преузимају у позадини.

Ограничења технологије

ODR захтева сталну интернет везу за учитавање ресурса при првом приступу. Корисник у зони са слабим покривањем може наићи на кашњења и грешке при учитавању. Поред тога, Apple не гарантује да ће учитани ресурси остати на уређају „ при недостатку простора, iOS може обрисати On-Demand ознаке без упозорења.

  • Потреба за мрежом „први захтев за ресурсом захтева интернет везу”
  • Аутоматско брисање „iOS може очистити кеш при недостатку простора на уређају”
  • Сложеност отклањања грешака „репродукција проблема са учитавањем захтева симулацију различитих мрежних услова”
  • Величина ознаке „Apple препоручује да не прелази 512 MB по ознаци за оптималне перформансе”
  • Обрада грешака „апликација мора правилно обрадити грешке при учитавању и поновити захтеве”

Често постављана питања

Могу ли користити ODR за динамичко додавање садржаја без ажурирања апликације?

ODR омогућава додавање и измену ресурса без објављивања нове верзије у App Store-у. Довољно је ажурирати датотеке на Apple серверу путем Xcode-а и доделити их истим ознакама. При следећем захтеву, апликација ће добити тренутну верзију ресурса. Ово је згодно за сезонски садржај, привремене промоције и A/B тестирање нових слика и распореда.

Како iOS управља брисањем ODR ресурса при недостатку простора?

Систем брише ресурсе са On-Demand ознаком када треба ослободити простор за друге апликације. Initial Install Tags ресурси се не бришу. Редослед брисања одређује алгоритам LRU (Least Recently Used) „ прво се бришу ресурси којима се најдуже није приступало.

Која је максимална величина ODR ресурса за једну апликацију?

Почев од iOS 13, укупна граница ODR складишта је 20 GB по Apple ID-у корисника. Величина једне ознаке не би требало да прелази 512 MB за оптималне перформансе учитавања. При прекорачењу границе, захтеви се завршавају грешком NSBundleResourceRequestLowDiskSpaceError.

Да ли ODR ради у офлајн режиму након почетног учитавања?

Да, након учитавања, ресурс се чува у локалном кешу и доступан је у офлајн режиму без интернет везе. Проблеми настају само ако је iOS обрисао ресурс због недостатка простора и корисник покушава да му приступи без мреже.

По чему се ODR разликује од обичног преузимања датотека путем URLSession-а?

ODR је интегрисан са App Store инфраструктуром: ресурси се хостирају на Apple CDN-у, управљају се системом кеширања и не захтевају од програмера организовање сопственог сервера. URLSession захтева серверску инфраструктуру, контролу верзија и ручно управљање кешом. ODR такође аутоматски обрађује наставак преузимања при прекиду везе.

Резиме

  • On-Demand Resources „технологија одложеног учитавања садржаја у iOS и tvOS апликацијама”
  • Систем се заснива на ознакама које групишу ресурсе и захтевима путем NSBundleResourceRequest-а
  • Подржани су сви типови датотека: слике, видео, аудио, спрајтови и подаци нивоа
  • Категорије ознака „ Initial Install, Prefetched и On-Demand са различитим политикама складиштења”
  • Граница складишта „ 20 GB по Apple ID-у, до 512 MB по ознаци”
  • Величина инсталације се смањује премештањем ресурса из главног пакета на Apple сервере
  • Препорука „ користити ODR за игре, апликације са медијским садржајем и пројекте са вишеслојном структуром”

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође