On-Demand Resources: nedir, talep mekanizması ve kaynak depolama

Yazar: IT Sectr Yayınlanma: 2026-04-17 Okuma süresi: 9 dk

On-Demand Resources, Apple'ın uygulama içeriğini gecikmeli yükleme teknolojisidir. Tüm kaynakları kurulum paketine dahil etmek yerine, geliştiriciler bunları App Store sunucularında barındırır ve ihtiyaç duyuldukça talep eder. Apple ODR Guide'a göre bu, ilk kurulum boyutunu azaltır ve uygulama sürümünü güncellemeden yeni içerik eklemeye olanak tanır.

Önemli Noktalar

  • On-Demand Resources — uygulama kurulumundan sonra talep üzerine kaynak yükleme mekanizması
  • Kaynaklar Apple sunucularında depolanır ve NSBundleResourceRequest aracılığıyla talep edilir
  • Etiketler kaynakları uygulamanın işlevsel bloklarına göre gruplandırır
  • Prefetching Kullanıcı deneyimini iyileştirmek için kaynakları önceden yüklemeye olanak tanır
  • Depolama kotaları sınırlıdır ve geliştirici tarafından izlenmesi gerekir

Xcode'da On-Demand Resources Yapılandırması

ODR kurulumu Xcode'da üç aşama içerir: kaynakları etiketlere göre kategorize etme, Info.plist'te indirme parametrelerini yapılandırma ve NSBundleResourceRequest aracılığıyla programatik talep uygulaması. İşin çoğu derleme tarafında yapılır.

Target Membership'ta Kategorizasyon

swift
// ODR durumunu kontrol etme ve ilerlemeyi izleme
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)% yüklendi")
        }
    }
}

İndirme ilerlemesi, KVO gözlem desteğiyle NSProgress sınıfının progress özelliği aracılığıyla izlenir. Uygulama, kaynak indirme sırasında kullanıcıya bir yükleme göstergesi görüntüleyebilir. İndirme tamamlandıktan sonra kaynaklar, standart FileManager ve NSDataAsset mekanizmaları aracılığıyla ana uygulama paketinde kullanılabilir hale gelir.

Kota ve Sınırlama Parametreleri

ODR kotaları iOS sürümüne bağlıdır. iOS 13'ten itibaren, bir cihaz hesap başına 20 GB'a kadar talep üzerine kaynak depolayabilir. Bu alan, cihazda yüklü tüm uygulamalar arasında paylaşılır — bir uygulama çok yer kaplarsa, diğerlerine daha az kalır.

Kullanılan alan izlemesi NSBundleResourceRequest aracılığıyla yapılır. Uygulama, mevcut ODR depolama alanını kontrol edebilir ve buna göre hangi kaynakların önce yükleneceğine karar verebilir. Bir yedek mekanizması uygulanması önerilir: ODR depolama alanı doluysa, ana paketten düşük kaliteli kaynaklar kullanın.

Kota aşıldığında, sistem en az yakın zamanda kullanılan sırasına göre talep üzerine etiketli kaynakları kaldırır, en eskilerden başlayarak. Uygulama kodundaki kaynak yöneticisi, NSBundleResourceRequest özelliği aracılığıyla mevcut ODR depolama kullanımını izleyebilir.

Geliştiriciler, iOS'un herhangi bir zamanda talep üzerine kaynakları silmeye karar verebileceğini göz önünde bulundurmalıdır — uygulama, önceden yüklenmiş bir kaynağın aniden kullanılamaz hale geldiği durumları doğru şekilde ele almalıdır. Kaynak erişim hatalarını engellemeniz ve beginAccessingResources aracılığıyla yeniden talep etmeniz önerilir. Uygulamanın çalışması için gerekli olan kritik kaynaklar için, sistem tarafından kaldırılmayan ilk kurulum etiketlerini kullanın.

ODR'nin Avantajları ve Sınırlamaları

On-Demand Resources, geliştiricilere uygulama boyutunu yönetmek için esnek bir araç sağlar, ancak ağ kullanılabilirliği ve iOS depolama politikalarıyla ilgili bir dizi sınırlama getirir.

ODR Kullanmanın Avantajları

ODR'nin ana avantajı, ilk kurulum boyutunda köklü bir azalmadır. Birden çok seviyeli oyunlar, video içerikli uygulamalar veya büyük görüntü kümeleri içeriği kısımlar halinde yükleyebilir. Kullanıcı temel işlevselliğe hemen erişirken, ek kaynaklar arka planda indirilir.

Teknoloji Sınırlamaları

ODR, ilk erişimde kaynakları yüklemek için sürekli bir internet bağlantısı gerektirir. Kapsama alanı zayıf olan bölgelerdeki kullanıcılar gecikmeler ve indirme hataları yaşayabilir. Ayrıca Apple, indirilen kaynakların cihazda kalacağını garanti etmez — depolama alanı düşük olduğunda, iOS uyarı vermeden talep üzerine etiketleri silebilir.

  • Ağ gereksinimi — ilk kaynak talebi için internet bağlantısı gerekir
  • Otomatik silme — iOS, cihaz depolama alanı düşük olduğunda önbelleği temizleyebilir
  • Hata ayıklama karmaşıklığı — yükleme sorunlarını yeniden oluşturmak için çeşitli ağ koşullarını simüle etmek gerekir
  • Etiket boyutu — Apple, optimum performans için etiket başına 512 MB'ı aşmamayı önerir
  • Hata işleme — uygulama yükleme hatalarını doğru şekilde ele almalı ve talepleri yeniden denemelidir

Sıkça Sorulan Sorular

ODR, uygulamayı güncellemeden dinamik olarak içerik eklemek için kullanılabilir mi?

ODR, App Store'da yeni bir sürüm yayınlamadan kaynak eklemeye ve değiştirmeye olanak tanır. Dosyaları Xcode aracılığıyla Apple sunucusunda güncelleyin ve aynı etiketlere atayın. Bir sonraki talepte uygulama, kaynağın en son sürümünü alacaktır. Bu, mevsimsel içerik, geçici promosyonlar ve yeni görüntüler ile düzenlerin A/B testi için kullanışlıdır.

Depolama alanı düşük olduğunda iOS, ODR kaynaklarının silinmesini nasıl yönetir?

Sistem, diğer uygulamalar için alan boşaltması gerektiğinde talep üzerine etiketli kaynakları siler. İlk kurulum etiketi kaynakları silinmez. Silme sırası LRU (Least Recently Used) algoritması tarafından belirlenir — en uzun süredir erişilmeyen kaynaklar ilk önce silinir.

Tek bir uygulama için maksimum ODR kaynak boyutu nedir?

iOS 13'ten itibaren, toplam ODR depolama sınırı Apple ID kullanıcısı başına 20 GB'dır. Optimum indirme performansı için tek bir etiketin boyutu 512 MB'ı aşmamalıdır. Sınır aşıldığında, talepler NSBundleResourceRequestLowDiskSpaceError ile başarısız olur.

ODR, ilk indirmeden sonra çevrimdışı modda çalışır mı?

Evet, indirmeden sonra kaynak yerel önbellekte saklanır ve internet bağlantısı olmadan çevrimdışı modda kullanılabilir. Sorunlar yalnızca iOS depolama alanı eksikliği nedeniyle kaynağı silmişse ve kullanıcı ağ olmadan ona erişmeye çalışırsa ortaya çıkar.

ODR, URLSession aracılığıyla basit dosya indirmeden nasıl farklıdır?

ODR, App Store altyapısıyla entegredir: kaynaklar Apple'ın CDN'sinde barındırılır, önbellekleme sistemi tarafından yönetilir ve geliştiricinin kendi sunucusunu kurmasını gerektirmez. URLSession, sunucu altyapısı, sürüm kontrolü ve manuel önbellek yönetimi gerektirir. ODR ayrıca bağlantı kesintisi durumunda indirmeyi otomatik olarak sürdürür.

Özet

  • On-Demand Resources — iOS ve tvOS uygulamalarında gecikmeli içerik yükleme teknolojisi
  • Sistem, kaynakları gruplayan etiketlere ve NSBundleResourceRequest aracılığıyla taleplere dayanır
  • Tüm dosya türleri desteklenir: görüntüler, videolar, ses, sprite'lar ve seviye verileri
  • Etiket kategorileri — ilk kurulum, prefetch ve talep üzerine (farklı depolama politikalarıyla)
  • Depolama sınırı — Apple ID başına 20 GB, etiket başına 512 MB'a kadar
  • Kurulum boyutu, kaynakları ana paketten Apple sunucularına taşıyarak azaltılır
  • Öneri — oyunlar, medya içerikli uygulamalar ve çok seviyeli yapı projeleri için ODR kullanın

iOS'ta On-Demand Resources Nedir

On-Demand Resources (ODR), iOS, tvOS ve macOS'a yerleşik bir içerik yönetim sistemidir. Geliştiricinin uygulama kaynaklarını zorunlu (kurulum paketine dahil) ve talep üzerine (App Store'da depolanan ve ihtiyaç duyulduğunda indirilen) olarak ayırmasına olanak tanır.

ODR'nin Temel Kavramları

ODR sistemi üç ana varlıkla çalışır: etiketler, kaynak paketleri ve talepler. Etiket, bir dosya grubunu bir araya getiren bir dize tanımlayıcısıdır. Kaynak paketi, bir etiketle ilişkili bir veri kümesidir. Talep, paket yüklemesini başlatan NSBundleResourceRequest'e yapılan programatik bir çağrıdır.

Kaynak Talep Yaşam Döngüsü

Kaynak yükleme birkaç aşamadan geçer: belirtilen etiketlerle talebin başlatılması, yerel depoda kullanılabilirliğin kontrol edilmesi, yoksa Apple sunucularından indirme, hazır olduğunda uygulamaya bildirim ve kullanımdan sonra kaynağın serbest bırakılması. Sistem, önbellekleme ve kullanılmayan kaynakların kaldırılmasını otomatik olarak yönetir.

AşamaSistem EylemiYürütme Süresi
BaşlatmaBir etiketle NSBundleResourceRequest oluşturmaAnında
Önbellek KontrolüYerel depoda kaynak arama0,1–0,5 sn
İndirmeApple CDN'den indirmeBoyuta bağlı
BildirimTamamlama işleyicisini veya temsilciyi çağırmaAnında
Serbest BırakmaKaynağı sistem tarafından kaldırılabilir olarak işaretlemeiOS talebi üzerine

iOS'ta ODR Nasıl Çalışır

ODR mekanizması, App Store bulut deposundan kaynak taleplerini yöneten bir arka plan hizmetine dayanır. Uygulama bir etiket talep ettiğinde, sistem kaynağın yerel önbellekte olup olmadığını kontrol eder. Yoksa — kesintiye uğrayan bağlantılar için devam ettirme desteğiyle bir arka plan URL oturumu aracılığıyla indirmeyi başlatır.

NSBundleResourceRequest ile Talep Yönetimi

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 yöntemi, hemen yükleme olmadan kaynağın önbellekteki kullanılabilirliğini kontrol eder. Kullanılabilirlik bayrağı olumluysa — uygulama gecikmeden devam eder. Kaynak yoksa, beginAccessingResources progress özelliği aracılığıyla ilerleme göstergesiyle indirmeyi başlatır.

Arka Plan Yükleme ve Öncelikler

iOS, mevcut uygulama etkinliğine göre ODR kaynak yükleme önceliklerini yönetir. Uygulama ön plandayken yükleme yüksek öncelikle gerçekleştirilir. Arka planda, iOS pil seviyesi düşükken yüklemeyi geciktirebilir veya duraklatabilir.

Kaynak Türleri ve ODR Etiketleri

ODR kaynakları görüntüler, videolar, ses dosyaları, sprite'lar, seviye verileri ve uygulama başlatma için kritik olmayan diğer dosyaları içerebilir. Her kaynak, işlevsel blok üyeliğini belirleyen bir veya daha fazla etikete bağlıdır.

Xcode'da İçerik Etiketleme

Xcode'da etiketler, Target Membership sekmesindeki Resource Tags denetleyicisi aracılığıyla yapılandırılır. Geliştirici, proje dosyalarının her biri için ana pakete dahil mi yoksa etiketle mi yükleneceğini belirtir. Bir dosya birden çok etikete ait olabilir ve bu da kaynakların uygulamanın farklı bölümlerinde yeniden kullanılmasına olanak tanır.

xml
<!-- Info.plist'te Resource Tags yapılandırma örneği -->
<key>NSBundleResourceRequestTags</key>
<dict>
    <key>level-3</key>
    <array>
        <string>levels/level3.scnassets</string>
        <string>textures/level3_tex.png</string>
    </array>
</dict>

Yaşam Süresine Göre Etiket Kategorileri

Apple, bir kaynağın cihazda ne kadar süre kalması gerektiğine bağlı olarak üç ODR etiketi kategorisini ayırt eder. İlk kurulum etiketleri uygulamayla birlikte yüklenir ve sistem tarafından asla silinmez. Prefetch etiket sırası, kurulumdan hemen sonra arka plan ön yükleme sırasını belirler. Ana etiketler talep üzerine istenir ve depolama alanı düşük olduğunda iOS tarafından silinebilir.

Kategorilere ek olarak, her etiketin bir indirme önceliği olabilir. Yüksek öncelikli etiketler, daha sonra talep edilmiş olsalar bile düşük öncelikli olanlardan önce yüklenir. Bu, geliştiricinin içerik görünme sırasını kontrol etmesine olanak tanır: önce ana ekran için kritik kaynaklar, ardından uygulamanın derin bölümleri için ek materyaller.

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun