On-Demand Resources Apple की एप्लिकेशन सामग्री के विलंबित लोडिंग की तकनीक है। सभी संसाधनों को इंस्टॉलेशन पैकेज में शामिल करने के बजाय, डेवलपर्स उन्हें App Store सर्वर पर होस्ट करते हैं और आवश्यकतानुसार अनुरोध करते हैं। Apple ODR Guide के अनुसार, यह प्रारंभिक इंस्टॉलेशन आकार को कम करता है और एप्लिकेशन संस्करण को अपडेट किए बिना नई सामग्री जोड़ने की अनुमति देता है।
मुख्य बिंदु
On-Demand Resources (ODR) iOS, tvOS और macOS में निर्मित एक सामग्री प्रबंधन प्रणाली है। यह डेवलपर को एप्लिकेशन संसाधनों को अनिवार्य (इंस्टॉलेशन पैकेज में शामिल) और मांग पर (App Store में संग्रहीत और आवश्यकतानुसार डाउनलोड) में विभाजित करने की अनुमति देता है।
ODR प्रणाली तीन प्रमुख इकाइयों के साथ काम करती है: टैग, संसाधन पैकेज और अनुरोध। टैग एक स्ट्रिंग पहचानकर्ता है जो फ़ाइलों के समूह को एकत्रित करता है। संसाधन पैकेज एक डेटा सेट है जो एक टैग से जुड़ा होता है। अनुरोध NSBundleResourceRequest का एक प्रोग्रामेटिक कॉल है जो पैकेज लोडिंग शुरू करता है।
संसाधन लोडिंग कई चरणों से गुज़रती है: निर्दिष्ट टैग के साथ अनुरोध की शुरुआत, स्थानीय भंडारण में उपलब्धता की जाँच, अनुपस्थित होने पर Apple सर्वर से डाउनलोड, तैयार होने पर एप्लिकेशन को सूचना और उपयोग के बाद संसाधन को मुक्त करना। सिस्टम स्वचालित रूप से कैशिंग और अप्रयुक्त संसाधनों को हटाने का प्रबंधन करता है।
| चरण | सिस्टम कार्रवाई | निष्पादन समय |
|---|---|---|
| आरंभीकरण | टैग के साथ NSBundleResourceRequest बनाना | तत्काल |
| कैश जाँच | स्थानीय भंडारण में संसाधन की खोज | 0.1–0.5 सेकंड |
| डाउनलोड | Apple CDN से डाउनलोड | आकार पर निर्भर |
| सूचना | कम्प्लीशन हैंडलर या डेलिगेट को कॉल करना | तत्काल |
| मुक्त करना | संसाधन को सिस्टम द्वारा हटाने योग्य चिह्नित करना | iOS अनुरोध पर |
ODR प्रणाली एक पृष्ठभूमि सेवा पर आधारित है जो App Store क्लाउड स्टोरेज से संसाधन अनुरोधों का प्रबंधन करती है। जब एप्लिकेशन एक टैग का अनुरोध करता है, तो सिस्टम जाँचता है कि क्या संसाधन स्थानीय कैश में मौजूद है। यदि नहीं — तो यह बाधित कनेक्शन के लिए फिर से शुरू करने की सुविधा के साथ पृष्ठभूमि URL सत्र के माध्यम से डाउनलोड शुरू करता है।
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 कम बैटरी होने पर लोडिंग में देरी या रोक सकता है।
ODR संसाधन में चित्र, वीडियो, ऑडियो फ़ाइलें, स्प्राइट, स्तर डेटा और एप्लिकेशन लॉन्च के लिए महत्वपूर्ण न होने वाली कोई भी अन्य फ़ाइलें शामिल हो सकती हैं। प्रत्येक संसाधन एक या अधिक टैग से बंधा होता है जो कार्यात्मक ब्लॉक में उसकी सदस्यता निर्धारित करते हैं।
Xcode में, टैग Target Membership टैब में Resource Tags इंस्पेक्टर के माध्यम से कॉन्फ़िगर किए जाते हैं। डेवलपर प्रत्येक प्रोजेक्ट फ़ाइल के लिए निर्दिष्ट करता है कि वह मुख्य बंडल में शामिल है या टैग द्वारा लोड किया गया है। एक फ़ाइल कई टैग से संबंधित हो सकती है, जिससे विभिन्न एप्लिकेशन अनुभागों में संसाधनों का पुन: उपयोग संभव होता है।
<!-- Info.plist में Resource Tags कॉन्फ़िगरेशन का उदाहरण -->
<key>NSBundleResourceRequestTags</key>
<dict>
<key>level-3</key>
<array>
<string>levels/level3.scnassets</string>
<string>textures/level3_tex.png</string>
</array>
</dict>
Apple तीन ODR टैग श्रेणियों में अंतर करता है, जो इस बात पर आधारित हैं कि संसाधन को डिवाइस पर कितने समय तक रहना चाहिए। प्रारंभिक इंस्टॉलेशन टैग एप्लिकेशन के साथ लोड होते हैं और सिस्टम द्वारा कभी हटाए नहीं जाते। प्रीफ़ेच टैग ऑर्डर इंस्टॉलेशन के तुरंत बाद पृष्ठभूमि प्रीलोडिंग क्रम निर्धारित करता है। मुख्य टैग मांग पर अनुरोधित किए जाते हैं और जब स्थान कम होता है तो iOS द्वारा हटाए जा सकते हैं।
श्रेणियों के अलावा, प्रत्येक टैग की डाउनलोड प्राथमिकता हो सकती है। उच्च प्राथमिकता वाले टैग निम्न प्राथमिकता वाले टैग से पहले लोड होते हैं, भले ही वे बाद में अनुरोधित किए गए हों। यह डेवलपर को सामग्री प्रकट होने के क्रम को नियंत्रित करने की अनुमति देता है: पहले मुख्य स्क्रीन के लिए महत्वपूर्ण संसाधन, फिर एप्लिकेशन के गहरे अनुभागों के लिए अतिरिक्त सामग्री।
ODR सेटअप Xcode में तीन चरण शामिल करता है: टैग द्वारा संसाधनों को वर्गीकृत करना, Info.plist में डाउनलोड पैरामीटर कॉन्फ़िगर करना और NSBundleResourceRequest के माध्यम से प्रोग्रामेटिक अनुरोध कार्यान्वयन। अधिकांश कार्य बिल्ड पक्ष पर किया जाता है।
// 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)% लोड हुआ")
}
}
}
डाउनलोड प्रगति KVO अवलोकन समर्थन के साथ NSProgress वर्ग के progress गुण के माध्यम से ट्रैक की जाती है। एप्लिकेशन संसाधन डाउनलोडिंग के दौरान उपयोगकर्ता को लोडिंग संकेतक प्रदर्शित कर सकता है। डाउनलोड पूरा होने के बाद, संसाधन मानक FileManager और NSDataAsset प्रणालियों के माध्यम से मुख्य एप्लिकेशन बंडल में उपलब्ध होते हैं।
ODR कोटा iOS संस्करण पर निर्भर करता है। iOS 13 से शुरू होकर, एक डिवाइस प्रति खाता 20 GB तक मांग पर संसाधन संग्रहीत कर सकता है। यह स्थान डिवाइस पर स्थापित सभी एप्लिकेशन के बीच साझा किया जाता है — यदि एक एप्लिकेशन बहुत अधिक स्थान लेता है, तो दूसरों के लिए कम बचता है।
उपयोग किए गए स्थान की निगरानी NSBundleResourceRequest के माध्यम से की जाती है। एप्लिकेशन उपलब्ध ODR स्टोरेज की जाँच कर सकता है और तदनुसार तय कर सकता है कि कौन से संसाधन पहले लोड करने हैं। फ़ॉलबैक प्रणाली लागू करने की अनुशंसा की जाती है: यदि ODR स्टोरेज भरा है, तो मुख्य बंडल से कम गुणवत्ता वाले संसाधनों का उपयोग करें।
जब कोटा पार हो जाता है, तो सिस्टम सबसे कम हाल ही में उपयोग किए गए क्रम में मांग पर टैग किए गए संसाधनों को हटाता है, सबसे पुराने से शुरू करके। एप्लिकेशन कोड में संसाधन प्रबंधक NSBundleResourceRequest गुण के माध्यम से वर्तमान ODR स्टोरेज उपयोग को ट्रैक कर सकता है।डेवलपर्स को ध्यान रखना चाहिए कि iOS किसी भी समय On-Demand संसाधनों को हटाने का निर्णय ले सकता है — एप्लिकेशन को उन स्थितियों को सही ढंग से संभालना चाहिए जहाँ पहले से लोड किया गया संसाधन अचानक अनुपलब्ध हो जाता है। संसाधन एक्सेस त्रुटियों को इंटरसेप्ट करने और beginAccessingResources के माध्यम से उन्हें फिर से अनुरोध करने की अनुशंसा की जाती है। महत्वपूर्ण संसाधनों के लिए जिनके बिना एप्लिकेशन काम नहीं कर सकता, प्रारंभिक इंस्टॉलेशन टैग का उपयोग करें जो सिस्टम द्वारा नहीं हटाए जाते।
On-Demand Resources डेवलपर को एप्लिकेशन आकार प्रबंधित करने का एक लचीला उपकरण देते हैं, लेकिन नेटवर्क उपलब्धता और iOS भंडारण नीतियों से संबंधित कई सीमाएँ लगाते हैं।
ODR का मुख्य लाभ प्रारंभिक इंस्टॉलेशन आकार में भारी कमी है। कई स्तरों वाले गेम, वीडियो सामग्री वाले एप्लिकेशन या बड़े छवि सेट भागों में सामग्री लोड कर सकते हैं। उपयोगकर्ता को तुरंत बुनियादी कार्यक्षमता तक पहुँच मिलती है, जबकि अतिरिक्त संसाधन पृष्ठभूमि में डाउनलोड होते हैं।
ODR को पहली बार एक्सेस करने पर संसाधनों को लोड करने के लिए निरंतर इंटरनेट कनेक्शन की आवश्यकता होती है। खराब कवरेज वाले क्षेत्रों में उपयोगकर्ताओं को देरी और डाउनलोड त्रुटियों का सामना करना पड़ सकता है। इसके अलावा, Apple गारंटी नहीं देता कि डाउनलोड किए गए संसाधन डिवाइस पर रहेंगे — जब स्थान कम होता है, तो iOS बिना चेतावनी के On-Demand टैग हटा सकता है।
अक्सर पूछे जाने वाले प्रश्न
ODR App Store में नया संस्करण प्रकाशित किए बिना संसाधनों को जोड़ने और संशोधित करने की अनुमति देता है। बस Xcode के माध्यम से Apple सर्वर पर फ़ाइलों को अपडेट करें और उन्हें समान टैग असाइन करें। अगले अनुरोध पर, एप्लिकेशन को संसाधन का नवीनतम संस्करण प्राप्त होगा। यह मौसमी सामग्री, अस्थायी प्रचार और नई छवियों और लेआउट के A/B परीक्षण के लिए सुविधाजनक है।
सिस्टम जब अन्य एप्लिकेशन के लिए स्थान खाली करने की आवश्यकता होती है, तो On-Demand टैग किए गए संसाधनों को हटा देता है। प्रारंभिक इंस्टॉलेशन टैग संसाधन नहीं हटाए जाते। हटाने का क्रम LRU (Least Recently Used) एल्गोरिदम द्वारा निर्धारित किया जाता है — सबसे पहले वे संसाधन हटाए जाते हैं जिन्हें सबसे लंबे समय से एक्सेस नहीं किया गया है।
iOS 13 से, कुल ODR स्टोरेज सीमा प्रति Apple ID उपयोगकर्ता 20 GB है। इष्टतम डाउनलोड प्रदर्शन के लिए एकल टैग का आकार 512 MB से अधिक नहीं होना चाहिए। जब सीमा पार हो जाती है, तो अनुरोध NSBundleResourceRequestLowDiskSpaceError के साथ विफल हो जाते हैं।
हाँ, डाउनलोड करने के बाद, संसाधन स्थानीय कैश में सहेजा जाता है और इंटरनेट कनेक्शन के बिना ऑफ़लाइन मोड में उपलब्ध होता है। समस्याएँ केवल तब उत्पन्न होती हैं जब iOS ने कम स्टोरेज के कारण संसाधन हटा दिया हो और उपयोगकर्ता बिना नेटवर्क के उस तक पहुँचने का प्रयास करता है।
ODR App Store बुनियादी ढाँचे के साथ एकीकृत है: संसाधन Apple के CDN पर होस्ट किए जाते हैं, कैशिंग सिस्टम द्वारा प्रबंधित किए जाते हैं और डेवलपर को अपना स्वयं का सर्वर स्थापित करने की आवश्यकता नहीं होती है। URLSession को सर्वर बुनियादी ढाँचे, संस्करण नियंत्रण और मैन्युअल कैश प्रबंधन की आवश्यकता होती है। ODR कनेक्शन बाधित होने पर डाउनलोड फिर से शुरू करने को भी स्वचालित रूप से संभालता है।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें