On-Demand Resources " adalah teknologi Apple untuk pemuatan konten aplikasi secara tertunda. Alih-alih menyertakan semua sumber daya dalam paket instalasi, pengembang menempatkannya di server App Store dan memintanya sesuai kebutuhan. Menurut Apple ODR Guide, hal ini memungkinkan pengurangan ukuran instalasi awal dan penambahan konten baru tanpa memperbarui versi aplikasi.
Poin Utama
On-Demand Resources (ODR) " adalah sistem manajemen konten yang terintegrasi di iOS, tvOS, dan macOS. Ini memungkinkan pengembang untuk membagi sumber daya aplikasi menjadi wajib (termasuk dalam paket instalasi) dan dapat dimuat sesuai permintaan (disimpan di App Store dan diunduh saat diperlukan).
Sistem ODR beroperasi dengan tiga entitas kunci: tag, paket sumber daya, dan permintaan. Tag adalah string pengenal yang menyatukan sekelompok file. Paket sumber daya adalah kumpulan data yang terkait dengan tag. Permintaan adalah panggilan terprogram NSBundleResourceRequest yang memulai pemuatan paket.
Pemuatan sumber daya melalui beberapa tahap: inisialisasi permintaan dengan menentukan tag, pemeriksaan ketersediaan di penyimpanan lokal, pengunduhan dari server Apple jika tidak ada, pemberitahuan aplikasi tentang kesiapan, dan pembebasan sumber daya setelah digunakan. Sistem secara otomatis mengelola caching dan penghapusan sumber daya yang tidak digunakan.
| Tahap | Tindakan Sistem | Waktu Eksekusi |
|---|---|---|
| Inisialisasi | Membuat NSBundleResourceRequest dengan tag | Seketika |
| Pemeriksaan cache | Mencari sumber daya di penyimpanan lokal | 0,1–0,5 dtk |
| Pengunduhan | Mengunduh dari CDN Apple | Tergantung ukuran |
| Pemberitahuan | Memanggil completion handler atau delegasi | Seketika |
| Pembebasan | Menandai sumber daya sebagai dapat dihapus oleh sistem | Atas permintaan iOS |
Mekanisme ODR didasarkan pada layanan latar belakang yang mengelola permintaan sumber daya dari penyimpanan cloud App Store. Ketika aplikasi meminta sebuah tag, sistem memeriksa apakah sumber daya ada di cache lokal. Jika tidak " memulai pengunduhan melalui sesi URL latar belakang dengan dukungan untuk melanjutkan saat putus koneksi.
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()
}
}
Metode conditionallyBeginAccessingResources memeriksa ketersediaan sumber daya di cache tanpa pemuatan segera. Jika indikator ketersediaan positif " aplikasi melanjutkan pekerjaan tanpa penundaan. Jika sumber daya tidak ada, beginAccessingResources memulai pengunduhan dengan indikator kemajuan melalui properti progress.
Sistem iOS sendiri mengelola prioritas pemuatan sumber daya ODR tergantung pada aktivitas aplikasi saat ini. Jika aplikasi berada di latar depan, pemuatan dilakukan dengan prioritas tinggi. Di latar belakang, iOS dapat menunda pemuatan atau menjedanya saat baterai rendah.
Sumber daya ODR dapat mencakup gambar, video, file audio, sprite, data level, dan file lain yang tidak kritis untuk menjalankan aplikasi. Setiap sumber daya terikat pada satu atau beberapa tag yang menentukan afiliasinya dengan blok fungsional.
Di Xcode, tag dikonfigurasi melalui inspector Resource Tags di tab Target Membership. Pengembang menentukan untuk setiap file dalam proyek apakah itu bagian dari bundel utama atau dimuat melalui tag. Satu file dapat menjadi milik beberapa tag, memungkinkan penggunaan kembali sumber daya di berbagai bagian aplikasi.
<!-- Contoh konfigurasi Resource Tags di 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 membedakan tiga kategori tag ODR tergantung pada berapa lama sumber daya harus disimpan di perangkat. Initial Install Tags dimuat bersama aplikasi dan tidak pernah dihapus oleh sistem. Prefetch Tag Order menentukan urutan pemuatan latar belakang segera setelah instalasi. Tag utama dimuat sesuai permintaan dan dapat dihapus oleh iOS saat kekurangan ruang.
Selain kategori, setiap tag dapat memiliki prioritas pemuatan. Tag dengan prioritas tinggi dimuat lebih dulu daripada tag prioritas rendah, bahkan jika diminta belakangan. Ini memungkinkan pengembang mengelola urutan tampilan konten: pertama sumber daya kritis untuk layar utama, kemudian materi tambahan untuk bagian dalam aplikasi.
Konfigurasi ODR di Xcode meliputi tiga tahap: kategorisasi sumber daya berdasarkan tag, konfigurasi parameter pemuatan di Info.plist, dan implementasi terprogram permintaan melalui NSBundleResourceRequest. Sebagian besar pekerjaan dilakukan di sisi build proyek.
// Pemeriksaan status dan pemantauan kemajuan 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)% dimuat")
}
}
}
Kemajuan pemuatan dilacak melalui properti progress dari kelas NSProgress dengan dukungan pengamatan KVO. Aplikasi dapat menampilkan indikator kemajuan kepada pengguna selama pengunduhan sumber daya. Setelah pemuatan selesai, sumber daya tersedia di bundel utama aplikasi melalui mekanisme standar FileManager dan NSDataAsset.
Kuota ODR tergantung pada versi iOS. Mulai iOS 13, perangkat dapat menyimpan hingga 20 GB sumber daya yang dimuat sesuai permintaan per akun. Volume ini didistribusikan di antara semua aplikasi yang terinstal di perangkat " jika satu aplikasi memakan banyak ruang, sisanya lebih sedikit untuk yang lain.
Pemantauan ruang yang terpakai dilakukan melalui NSBundleResourceRequest. Aplikasi dapat memeriksa penyimpanan ODR yang tersedia dan berdasarkan itu memutuskan sumber daya mana yang akan dimuat terlebih dahulu. Implementasi mekanisme fallback disarankan: jika penyimpanan ODR penuh, gunakan sumber daya dari bundel utama dengan kualitas berkurang.
Saat melebihi kuota, sistem menghapus sumber daya dengan tag On-Demand dalam urutan paling jarang digunakan, dimulai dari yang terlama. Resource Manager dalam kode aplikasi dapat melacak volume ruang ODR yang terpakai saat ini melalui properti NSBundleResourceRequest.Pengembang harus mempertimbangkan bahwa iOS dapat setiap saat memutuskan untuk menghapus sumber daya On-Demand " aplikasi harus menangani dengan benar situasi ketika sumber daya yang sebelumnya dimuat tiba-tiba tidak tersedia. Disarankan untuk menangkap kesalahan akses ke sumber daya dan memintanya kembali melalui beginAccessingResources. Untuk sumber daya kritis yang tanpanya aplikasi tidak dapat berfungsi, gunakan Initial Install Tags yang tidak dihapus oleh sistem.
On-Demand Resources memberi pengembang alat yang fleksibel untuk mengelola ukuran aplikasi, tetapi memberlakukan sejumlah batasan terkait ketersediaan jaringan dan kebijakan penyimpanan iOS.
Keuntungan utama ODR " pengurangan drastis ukuran instalasi awal. Game dengan beberapa level, aplikasi dengan konten video atau kumpulan gambar besar dapat memuat konten secara bertahap. Pengguna mendapatkan akses ke fungsionalitas dasar segera, sementara sumber daya tambahan diunduh di latar belakang.
ODR memerlukan koneksi internet permanen untuk memuat sumber daya saat pertama kali diakses. Pengguna di area dengan jangkauan buruk mungkin mengalami keterlambatan dan kesalahan pemuatan. Selain itu, Apple tidak menjamin bahwa sumber daya yang dimuat akan tetap berada di perangkat " saat kekurangan ruang, iOS dapat menghapus tag On-Demand tanpa peringatan.
Pertanyaan Umum
ODR memungkinkan penambahan dan perubahan sumber daya tanpa menerbitkan versi baru di App Store. Cukup perbarui file di server Apple melalui Xcode dan tetapkan ke tag yang sama. Pada permintaan berikutnya, aplikasi akan menerima versi terkini dari sumber daya. Ini berguna untuk konten musiman, promosi sementara, dan pengujian A/B gambar serta tata letak baru.
Sistem menghapus sumber daya dengan tag On-Demand ketika perlu membebaskan ruang untuk aplikasi lain. Sumber daya Initial Install Tags tidak dihapus. Urutan penghapusan ditentukan oleh algoritma LRU (Least Recently Used) " pertama-tama sumber daya yang paling lama tidak diakses akan dihapus.
Mulai iOS 13, batas total penyimpanan ODR adalah 20 GB per Apple ID pengguna. Ukuran satu tag tidak boleh melebihi 512 MB untuk kinerja pemuatan yang optimal. Saat melebihi batas, permintaan berakhir dengan kesalahan NSBundleResourceRequestLowDiskSpaceError.
Ya, setelah dimuat, sumber daya disimpan di cache lokal dan tersedia dalam mode offline tanpa koneksi internet. Masalah hanya terjadi jika iOS telah menghapus sumber daya karena kekurangan ruang dan pengguna mencoba mengaksesnya tanpa jaringan.
ODR terintegrasi dengan infrastruktur App Store: sumber daya dihosting di CDN Apple, dikelola oleh sistem cache, dan tidak memerlukan pengembang untuk mengatur server sendiri. URLSession memerlukan infrastruktur server, kontrol versi, dan manajemen cache manual. ODR juga secara otomatis menangani kelanjutan pengunduhan saat putus koneksi.
Kesimpulan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga