On-Demand Resources " ay teknolohiya ng Apple para sa naantalang pag-load ng nilalaman ng application. Sa halip na isama ang lahat ng resources sa installation package, inilalagay ng developer ang mga ito sa mga server ng App Store at hinihingi kung kinakailangan. Ayon sa Apple ODR Guide, pinapayagan nito na bawasan ang laki ng paunang pag-install at magdagdag ng bagong nilalaman nang hindi nag-a-update ng bersyon ng application.
Mga Pangunahing Punto
On-Demand Resources (ODR) " ay isang sistema ng pamamahala ng nilalaman na naka-embed sa iOS, tvOS at macOS. Pinapayagan nito ang developer na hatiin ang resources ng application sa mandatory (kasama sa installation package) at maaaring i-load kapag hinihingi (naka-imbak sa App Store at dina-download kung kinakailangan).
Ang sistema ng ODR ay nagpapatakbo gamit ang tatlong pangunahing entity: mga tag, mga package ng resources at mga kahilingan. Ang tag ay isang identifier string na nag-uugnay sa isang grupo ng mga file. Ang resource package ay isang set ng data na nauugnay sa isang tag. Ang kahilingan ay isang programmatic na tawag sa NSBundleResourceRequest na nag-uumpisa ng pag-load ng package.
Ang pag-load ng resource ay dumadaan sa ilang yugto: pagsisimula ng kahilingan na may pagtukoy ng mga tag, pagsusuri ng availability sa lokal na imbakan, pag-download mula sa mga server ng Apple kung wala, pag-notify sa application na handa na, at pagpapalaya ng resource pagkatapos gamitin. Awtomatikong pinamamahalaan ng sistema ang caching at pagtanggal ng mga hindi ginagamit na resources.
| Yugto | Aksyon ng Sistema | Oras ng Pag-execute |
|---|---|---|
| Pagsisimula | Paglikha ng NSBundleResourceRequest na may tag | Agad |
| Pagsusuri ng cache | Paghahanap ng resource sa lokal na imbakan | 0.1–0.5 s |
| Pag-download | Pag-download mula sa CDN ng Apple | Depende sa laki |
| Pag-notify | Pag-tawag sa completion handler o delegado | Agad |
| Pagpapalaya | Pagmarka ng resource bilang pwedeng tanggalin ng sistema | Sa kahilingan ng iOS |
Ang mekanismo ng ODR ay batay sa isang background service na namamahala sa mga kahilingan ng resources mula sa cloud storage ng App Store. Kapag humihingi ang application ng isang tag, sinusuri ng sistema kung ang resource ay nasa lokal na cache. Kung wala " sinisimulan ang pag-download sa pamamagitan ng background URL session na may suporta para sa pagpapatuloy kapag naputol ang koneksyon.
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()
}
}
Ang metodo na conditionallyBeginAccessingResources ay sinusuri ang availability ng resource sa cache nang hindi agad naglo-load. Kung positibo ang flag ng availability " ang application ay nagpapatuloy nang walang pagkaantala. Kung wala ang resource, ang beginAccessingResources ay nag-uumpisa ng pag-download na may indikasyon ng progreso sa pamamagitan ng property na progress.
Ang iOS system mismo ang namamahala ng mga priyoridad sa pag-load ng ODR resources batay sa kasalukuyang aktibidad ng application. Kung ang application ay nasa foreground, ang pag-load ay ginagawa na may mataas na priyoridad. Sa background, maaaring antalahin ng iOS ang pag-load o ihinto ito kapag mababa ang baterya.
Ang mga ODR resources ay maaaring magsama ng mga larawan, video, audio file, sprite, data ng mga level, at anumang iba pang file na hindi kritikal para sa paglunsad ng application. Bawat resource ay naka-ugnay sa isa o higit pang mga tag na tumutukoy sa pagiging kabilang nito sa isang functional block.
Sa Xcode, ang mga tag ay naka-configure sa pamamagitan ng inspector na Resource Tags sa tab na Target Membership. Tinutukoy ng developer para sa bawat file sa proyekto kung ito ay bahagi ng pangunahing bundle o nalo-load sa pamamagitan ng tag. Ang isang file ay maaaring mapabilang sa maraming tag, na nagpapahintulot sa muling paggamit ng resources sa pagitan ng iba't ibang seksyon ng application.
<!-- Halimbawa ng configuration ng Resource Tags sa Info.plist -->
<key>NSBundleResourceRequestTags</key>
<dict>
<key>level-3</key>
<array>
<string>levels/level3.scnassets</string>
<string>textures/level3_tex.png</string>
</array>
</dict>
Ang Apple ay nagtatangi ng tatlong kategorya ng ODR tag batay sa kung gaano katagal dapat itago ang resource sa device. Ang Initial Install Tags ay nalo-load kasama ng application at hindi kailanman tinatanggal ng sistema. Ang Prefetch Tag Order ay tumutukoy sa pagkakasunod-sunod ng background loading pagkatapos ng pag-install. Ang mga pangunahing tag ay nalo-load kapag hinihingi at maaaring tanggalin ng iOS kapag kulang sa espasyo.
Bukod sa mga kategorya, bawat tag ay maaaring may priyoridad sa pag-load. Ang mga tag na may mataas na priyoridad ay nalo-load bago ang mga mababang priyoridad, kahit na sila ay hinihingi nang mas huli. Ito ay nagpapahintulot sa developer na pamahalaan ang pagkakasunod-sunod ng paglitaw ng nilalaman: una ang mga kritikal na resources para sa pangunahing screen, pagkatapos ang mga karagdagang materyal para sa malalalim na seksyon ng application.
Pag-configure ng ODR sa Xcode ay may tatlong yugto: pagkakategorya ng resources ayon sa tag, pag-configure ng mga parameter ng pag-load sa Info.plist, at programmatic na implementasyon ng mga kahilingan sa pamamagitan ng NSBundleResourceRequest. Karamihan sa trabaho ay ginagawa sa bahagi ng build ng proyekto.
// Pagsusuri ng status at pag-monitor ng progreso ng 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)% nalo-load")
}
}
}
Ang progreso ng pag-load ay sinusubaybayan sa pamamagitan ng property na progress ng klase na NSProgress na may suporta sa KVO observation. Ang application ay maaaring magpakita ng indicator ng progreso sa gumagamit habang dina-download ang resources. Pagkatapos ng pag-load, ang resources ay available sa pangunahing bundle ng application sa pamamagitan ng standard na mekanismo ng FileManager at NSDataAsset.
Ang mga quota ng ODR ay depende sa bersyon ng iOS. Simula sa iOS 13, ang device ay maaaring mag-imbak ng hanggang 20 GB ng nalo-load na resources kapag hinihingi bawat account. Ang volume na ito ay ipinamamahagi sa lahat ng naka-install na application sa device " kung ang isang application ay kumukuha ng maraming espasyo, mas kaunti ang natitira para sa iba.
Pag-monitor ng ginamit na espasyo ay ginagawa sa pamamagitan ng NSBundleResourceRequest. Ang application ay maaaring suriin ang available na ODR storage at batay dito magpasya kung aling resources ang unang i-load. Ang pagpapatupad ng fallback mechanism ay inirerekomenda: kung puno ang ODR storage, gumamit ng resources mula sa pangunahing bundle na may pinababang kalidad.
Kapag lumampas sa quota, tinatanggal ng sistema ang resources na may On-Demand na tag sa pagkakasunod-sunod ng hindi gaanong ginamit kamakailan, simula sa pinakaluma. Ang Resource Manager sa code ng application ay maaaring subaybayan ang kasalukuyang volume ng ginamit na ODR storage sa pamamagitan ng property na NSBundleResourceRequest.Dapat isaalang-alang ng developer na ang iOS ay maaaring anumang oras magpasya na tanggalin ang On-Demand resources " ang application ay dapat na maayos na pangasiwaan ang sitwasyon kung saan ang isang dating nalo-load na resource ay biglang hindi available. Inirerekomenda na mahuli ang mga error sa pag-access sa resources at muling hilingin ang mga ito sa pamamagitan ng beginAccessingResources. Para sa mga kritikal na resources kung wala ang application ay hindi maaaring gumana, gamitin ang Initial Install Tags na hindi tinatanggal ng sistema.
Ang On-Demand Resources ay nagbibigay sa developer ng flexible na tool para sa pamamahala ng laki ng application, ngunit nagpapataw ng ilang limitasyon na may kaugnayan sa availability ng network at mga patakaran sa imbakan ng iOS.
Ang pangunahing bentahe ng ODR " radikal na pagbawas ng laki ng paunang pag-install. Ang mga laro na may maraming level, mga application na may video content o malalaking set ng larawan ay maaaring mag-load ng nilalaman nang pa-portion. Ang gumagamit ay makakakuha ng access sa pangunahing functionality agad, habang ang mga karagdagang resources ay dina-download sa background.
Ang ODR ay nangangailangan ng permanenteng koneksyon sa internet para mag-load ng resources sa unang pag-access. Ang gumagamit sa lugar na may mahinang coverage ay maaaring makaranas ng mga pagkaantala at error sa pag-load. Bukod pa rito, hindi ginagarantiyahan ng Apple na ang mga nalo-load na resources ay mananatili sa device " kapag kulang sa espasyo, maaaring tanggalin ng iOS ang mga On-Demand tag nang walang babala.
Mga Madalas Itanong
Ang ODR ay nagpapahintulot sa pagdagdag at pagbabago ng resources nang hindi naglalabas ng bagong bersyon sa App Store. Sapat na i-update ang mga file sa server ng Apple sa pamamagitan ng Xcode at italaga ang mga ito sa parehong mga tag. Sa susunod na kahilingan, ang application ay makakatanggap ng kasalukuyang bersyon ng resource. Ito ay maginhawa para sa seasonal na nilalaman, pansamantalang promosyon at A/B testing ng mga bagong larawan at layout.
Ang sistema ay tinatanggal ang resources na may On-Demand na marka kapag kailangan magbakante ng espasyo para sa ibang mga application. Ang Initial Install Tags resources ay hindi tinatanggal. Ang pagkakasunod-sunod ng pagtanggal ay tinutukoy ng algorithm na LRU (Least Recently Used) " unang tinatanggal ang mga resource na pinakamatagal na hindi na-access.
Simula sa iOS 13, ang kabuuang limitasyon ng ODR storage ay 20 GB bawat Apple ID ng gumagamit. Ang laki ng isang tag ay hindi dapat lumampas sa 512 MB para sa optimal na performance ng pag-load. Kapag lumampas sa limitasyon, ang mga kahilingan ay nagtatapos sa error na NSBundleResourceRequestLowDiskSpaceError.
Oo, pagkatapos ng pag-load, ang resource ay nai-save sa lokal na cache at available sa offline mode nang walang koneksyon sa internet. Ang mga problema ay nangyayari lamang kung tinanggal ng iOS ang resource dahil sa kakulangan ng espasyo at sinubukan ng gumagamit na i-access ito nang walang network.
Ang ODR ay integrated sa imprastraktura ng App Store: ang resources ay naka-host sa CDN ng Apple, pinamamahalaan ng cache system, at hindi nangangailangan ng developer na mag-set up ng sariling server. Ang URLSession ay nangangailangan ng server infrastructure, version control, at manual na pamamahala ng cache. Ang ODR din ay awtomatikong humahawak ng pagpapatuloy ng pag-download kapag naputol ang koneksyon.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din