On-Demand Resources: bu nima, so'rov mexanizmi va resurslarni saqlash

Muallif: IT Sectr Nashr etilgan: 2026-04-17 O'qish vaqti: 9 daq

On-Demand Resources " Apple-ning ilova kontentini kechiktirib yuklash texnologiyasidir. Barcha resurslarni o'rnatish paketiga kiritish o'rniga, dasturchi ularni App Store serverlarida joylashtiradi va kerak bo'lganda so'raydi. Apple ODR Guide-ga ko'ra, bu dastlabki o'rnatish hajmini kamaytirish va ilova versiyasini yangilamasdan yangi kontent qo'shish imkonini beradi.

Asosiy fikrlar

  • On-Demand Resources " ilova o'rnatilgandan so'ng talab bo'yicha resurslarni yuklash mexanizmidir
  • Resurslar Apple serverlarida saqlanadi va NSBundleResourceRequest orqali so'raladi
  • Teglar resurslarni ilonaning funksional bloklari bo'yicha guruhlaydi
  • Prefetching UX-ni yaxshilash uchun resurslarni oldindan yuklash imkonini beradi
  • Saqlash kvotalari cheklangan va dasturchi tomonidan kuzatilishi talab qilinadi

iOS-da On-Demand Resources nima

On-Demand Resources (ODR) " iOS, tvOS va macOS-ga o'rnatilgan kontent boshqaruv tizimidir. Bu dasturchiga ilova resurslarini majburiy (o'rnatish paketiga kiradigan) va talab bo'yicha yuklanadigan (App Store-da saqlanadigan va kerak bo'lganda yuklab olinadigan) qismlarga ajratish imkonini beradi.

ODR-ning asosiy tushunchalari

ODR tizimi uchta asosiy ob'ekt bilan ishlaydi: teglar, resurs paketlari va so'rovlar. Teg fayllar guruhini birlashtiruvchi identifikator qatoridir. Resurs paketi teg bilan bog'liq ma'lumotlar to'plamidir. So'rov paketni yuklashni boshlaydigan NSBundleResourceRequest dasturiy chaqiruvidir.

Resurs so'rovining hayot aylanishi

Resurs yuklash bir necha bosqichdan o'tadi: teglarni ko'rsatish bilan so'rovni ishga tushirish, mahalliy omborda mavjudligini tekshirish, yo'q bo'lganda Apple serverlaridan yuklab olish, ilovani tayyorlik haqida xabardor qilish va foydalanishdan keyin resursni bo'shatish. Tizim keshlash va foydalanilmayotgan resurslarni o'chirishni avtomatik boshqaradi.

BosqichTizim harakatiBajarish vaqti
Ishga tushirishTeg bilan NSBundleResourceRequest yaratishBir zumda
Keshni tekshirishMahalliy omborda resursni qidirish0.1–0.5 s
Yuklab olishApple CDN-dan yuklab olishHajmiga bog'liq
Xabardor qilishCompletion handler yoki delegatni chaqirishBir zumda
Bo'shatishResursni tizim tomonidan o'chirilishi mumkin deb belgilashiOS talabiga ko'ra

iOS-da ODR qanday ishlaydi

ODR mexanizmi App Store bulut omboridan resurs so'rovlarini boshqaruvchi fon xizmatiga asoslanadi. Ilova tegni so'raganda, tizim resursning mahalliy keshda mavjudligini tekshiradi. Agar yo'q bo'lsa " ulanish uzilishida davom ettirish qo'llab-quvvatlashi bilan fon URL sessiyasi orqali yuklab olishni boshlaydi.

NSBundleResourceRequest orqali so'rovlarni boshqarish

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 metodi darhol yuklamasdan resursning keshda mavjudligini tekshiradi. Agar mavjudlik flagi ijobiy bo'lsa " ilova kechikishsiz ishni davom ettiradi. Agar resurs yo'q bo'lsa, beginAccessingResources progress xususiyati orqali borish ko'rsatkichi bilan yuklab olishni boshlaydi.

Fon yuklash va prioritetlar

iOS tizimi ilonaning joriy faolligiga qarab ODR resurslarini yuklash prioritetlarini o'zi boshqaradi. Ilova oldingi planda bo'lsa, yuklash yuqori prioritet bilan amalga oshiriladi. Fonda iOS yuklashni kechiktirishi yoki batareya past bo'lganda to'xtatib qo'yishi mumkin.

  • Yuqori prioriter " darhol kerak bo'lgan resurslar uchun zudlik bilan yuklash
  • Past prioriter " prefetching va dastlabki keshlash uchun kechiktirilgan yuklash
  • Fon " faqat faol Wi-Fi va yetarli batareya bilan yuklash

Resurs turlari va ODR teglari

ODR resurslari rasmlar, videolar, audio fayllar, spritlar, daraja ma'lumotlari va ilovani ishga tushirish uchun muhim bo'lmagan boshqa fayllarni o'z ichiga olishi mumkin. Har bir resurs funksional blokga tegishliligini belgilaydigan bir yoki bir nechta teg bilan bog'lanadi.

Xcode-da kontent teglash

Xcode-da teglar Target Membership yorlig'idagi Resource Tags inspektori orqali sozlanadi. Dasturchi loyihadagi har bir fayl uchun uning asosiy bundle qismi yoki teg orqali yuklanishini belgilaydi. Bitta fayl bir nechta tegga tegishli bo'lishi mumkin, bu resurslarni ilonaning turli bo'limlari o'rtasida qayta ishlatish imkonini beradi.

xml
<!-- Info.plist da Resource Tags konfiguratsiyasiga misol -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Teglarni yashash vaqti bo'yicha kategoriyalari

Apple resursning qurilmada qancha vaqt saqlanishiga qarab uchta ODR tegi kategoriyasini ajratadi. Initial Install Tags ilova bilan birga yuklanadi va hech qachon tizim tomonidan o'chirilmaydi. Prefetch Tag Order o'rnatishdan so'ng darhol fon yuklash tartibini belgilaydi. Asosiy teglar talab bo'yicha yuklanadi va joy yetishmasa iOS tomonidan o'chirilishi mumkin.

Kategoriyalardan tashqari, har bir teg yuklash prioritetiga ega bo'lishi mumkin. Yuqori prioriterli teglar past prioritetlilardan oldin yuklanadi, hatto keyinroq so'ralgan bo'lsa ham. Bu dasturchiga kontentning paydo bo'lish tartibini boshqarish imkonini beradi: avval asosiy ekran uchun muhim resurslar, keyin ilonaning chuqur bo'limlari uchun qo'shimcha materiallar.

  • Initial install tags " dastlabki o'rnatishda yuklanadi, tizim tomonidan o'chirilmaydi
  • Prefetched tags " UX-ni yaxshilash uchun o'rnatishdan so'ng fonda yuklab olinadi
  • On-demand tags " dasturiy ravishda so'raladi, joy yetishmasa iOS tomonidan o'chirilishi mumkin

Xcode-da On-Demand Resources sozlash

ODR sozlash Xcode-da uch bosqichdan iborat: resurslarni teglar bo'yicha kategoriyalash, Info.plist-da yuklash parametrlarini sozlash va NSBundleResourceRequest orqali so'rovlarni dasturiy amalga oshirish. Ishning ko'p qismi loyiha qurish tomonida amalga oshiriladi.

Target Membership-da kategoriyalash

swift
// ODR holatini tekshirish va borishni kuzatish
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)% yuklandi")
        }
    }
}

Yuklash borishi KVO kuzatish qo'llab-quvvatlashi bilan NSProgress sinfining progress xususiyati orqali kuzatiladi. Ilova resurslarni yuklab olish vaqtida foydalanuvchiga borish ko'rsatkichini ko'rsatishi mumkin. Yuklash tugagandan so'ng, resurslar FileManager va NSDataAsset standart mexanizmlari orqali ilonaning asosiy bundle'ida mavjud bo'ladi.

Kvota va cheklov parametrlari

ODR kvotalari iOS versiyasiga bog'liq. iOS 13 dan boshlab, qurilma bitta hisob uchun 20 GB gacha talab bo'yicha yuklangan resurslarni saqlashi mumkin. Bu hajm qurilmada o'rnatilgan barcha ilovalar o'rtasida taqsimlanadi " agar bitta ilova ko'p joy egallasa, boshqalarga kamroq qoladi.

Ishg'ol qilingan joyni kuzatish NSBundleResourceRequest orqali amalga oshiriladi. Ilova mavjud ODR xotirasini tekshirishi va shunga qarab qaysi resurslarni birinchi navbatda yuklashni hal qilishi mumkin. Fallback mexanizmini joriy qilish tavsiya etiladi: agar ODR xotirasi to'la bo'lsa, asosiy bundle dan past sifatli resurslardan foydalaning.

Kvota oshib ketganda, tizim eng kam ishlatilgan resurslardan boshlab, On-Demand teglari bo'lgan resurslarni o'chiradi. Ilova kodidagi Resource Manager NSBundleResourceRequest xususiyati orqali joriy ishg'ol qilingan ODR xotira hajmini kuzatishi mumkin.

Dasturchi hisobga olishi kerakki, iOS istalgan vaqtda On-Demand resurslarini o'chirish to'g'risida qaror qabul qilishi mumkin " ilova oldin yuklangan resurs to'satdan mavjud bo'lmagan vaziyatni to'g'ri boshqarishi kerak. Resurslarga kirish xatolarini ushlash va beginAccessingResources orqali qayta so'rash tavsiya etiladi. Ilova ishlay olmaydigan muhim resurslar uchun tizim tomonidan o'chirilmaydigan Initial Install Tags dan foydalaning.

ODR-ning afzalliklari va cheklovlari

On-Demand Resources dasturchiga ilova hajmini boshqarish uchun moslashuvchan vosita beradi, lekin tarmoq mavjudligi va iOS xotira siyosatlari bilan bog'liq bir qator cheklovlarni qo'yadi.

ODR dan foydalanishning afzalliklari

ODR ning asosiy afzalligi dastlabki o'rnatish hajmini keskin kamaytirishdir. Bir nechta darajali o'yinlar, video kontentli ilovalar yoki katta rasm to'plamlari bo'lgan dasturlar kontentni qismlarga bo'lib yuklashi mumkin. Foydalanuvchi asosiy funksionallikka darhol kirishadi, qo'shimcha resurslar esa fonda yuklab olinadi.

Texnologiyaning cheklovlari

ODR birinchi murojaatda resurslarni yuklash uchun doimiy internet ulanishini talab qiladi. Yomon qamrov zonasidagi foydalanuvchi kechikishlar va yuklash xatolariga duch kelishi mumkin. Bundan tashqari, Apple yuklangan resurslarning qurilmada qolishiga kafolat bermaydi " joy yetishmasa, iOS ogohlantirishsiz On-Demand teglarini o'chirishi mumkin.

  • Tarmoq zaruriyati " resursning birinchi so'rovi internet ulanishini talab qiladi
  • Avtomatik o'chirish " iOS qurilmada joy yetishmasa keshni tozalashi mumkin
  • Disk raskadrovka qiyinligi " yuklash muammolarini qayta tiklash turli tarmoq sharoitlarini simulyatsiya qilishni talab qiladi
  • Teg hajmi " Apple optimal ishlash uchun har bir teg uchun 512 MB dan oshmaslikni tavsiya qiladi
  • Xatolarni boshqarish " ilova yuklash xatolarini to'g'ri boshqarishi va so'rovlarni takrorlashi kerak

Tez-tez so'raladigan savollar

Ilovani yangilamasdan dinamik kontent qo'shish uchun ODR dan foydalanish mumkinmi?

ODR App Store-da yangi versiyani nashr etmasdan resurslarni qo'shish va o'zgartirish imkonini beradi. Apple serveridagi fayllarni Xcode orqali yangilash va ularni bir xil teglarga tayinlash kifoya. Keyingi so'rovda ilova resursning joriy versiyasini oladi. Bu mavsumiy kontent, vaqtinchalik aksiyalar va yangi rasm va layoutlarning A/B testi uchun qulay.

iOS joy yetishmasligida ODR resurslarini o'chirishni qanday boshqaradi?

Tizim boshqa ilovalar uchun joy bo'shatish kerak bo'lganda On-Demand teglangan resurslarni o'chiradi. Initial Install Tags resurslari o'chirilmaydi. O'chirish tartibi LRU (Least Recently Used) algoritmi bilan belgilanadi " avval eng uzoq vaqt davomida murojaat qilinmagan resurslar o'chiriladi.

Bitta ilova uchun ODR resurslarining maksimal hajmi qancha?

iOS 13 dan boshlab, umumiy ODR xotira chegarasi bitta foydalanuvchi Apple ID si uchun 20 GB ni tashkil qiladi. Bir tegning hajmi optimal yuklash ishlashi uchun 512 MB dan oshmasligi kerak. Chegara oshib ketganda, so'rovlar NSBundleResourceRequestLowDiskSpaceError xatosi bilan tugaydi.

ODR dastlabki yuklashdan so'ng oflayn rejimda ishlaydimi?

Ha, yuklashdan so'ng resurs mahalliy keshda saqlanadi va oflayn rejimda internet ulanishisiz mavjud bo'ladi. Muammolar faqat iOS joy yetishmasligi sababli resursni o'chirgan bo'lsa va foydalanuvchi tarmoqsiz unga kirishga harakat qilsa yuzaga keladi.

ODR URLSession orqali oddiy fayl yuklashdan nimasi bilan farq qiladi?

ODR App Store infratuzilmasi bilan integratsiyalashgan: resurslar Apple CDN da joylashtiriladi, keshlash tizimi tomonidan boshqariladi va dasturchidan o'z serverini tashkil qilishni talab qilmaydi. URLSession server infratuzilmasi, versiya nazorati va qo'lda kesh boshqaruvini talab qiladi. ODR shuningdek ulanish uzilishida yuklashni avtomatik davom ettirishni boshqaradi.

Xulosa

  • On-Demand Resources " iOS va tvOS ilovalarida kechiktirilgan kontent yuklash texnologiyasidir
  • Tizim resurslarni guruhlaydigan teglar va NSBundleResourceRequest so'rovlariga asoslanadi
  • Qo'llab-quvvatlanadi barcha fayl turlari: rasmlar, videolar, audio, spritlar va daraja ma'lumotlari
  • Teg kategoriyalari " Initial Install, Prefetched va On-Demand turli saqlash siyosatlari bilan
  • Xotira chegarasi " Apple ID uchun 20 GB, bir teg uchun 512 MB gacha
  • O'rnatish hajmi resurslarni asosiy bundle dan Apple serverlariga ko'chirish orqali kamayadi
  • Tavsiya " ODR dan o'yinlar, media kontentli ilovalar va ko'p darajali tuzilmali loyihalar uchun foydalaning

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing