On-Demand Resources ایپل کی ایپلیکیشن مواد کو موخر لوڈ کرنے کی ٹیکنالوجی ہے۔ تمام وسائل کو انسٹالیشن پیکیج میں شامل کرنے کے بجائے، ڈیولپرز انہیں 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 کسی بھی وقت مانگ پر وسائل کو حذف کرنے کا فیصلہ کر سکتا ہے — ایپلیکیشن کو ان حالات کو درست طریقے سے سنبھالنا چاہیے جہاں پہلے لوڈ کردہ وسیلہ اچانک ناقابل دستیاب ہو جاتا ہے۔ وسائل تک رسائی کی غلطیوں کو روکنے اور beginAccessingResources کے ذریعے دوبارہ درخواست کرنے کی سفارش کی جاتی ہے۔ اہم وسائل کے لیے جن کے بغیر ایپلیکیشن کام نہیں کر سکتی، ابتدائی انسٹالیشن ٹیگ استعمال کریں جو نظام کے ذریعے نہیں ہٹائے جاتے۔
On-Demand Resources ڈیولپر کو ایپلیکیشن کے سائز کے انتظام کے لیے ایک لچکدار آلہ فراہم کرتے ہیں، لیکن نیٹ ورک کی دستیابی اور iOS ذخیرہ پالیسیوں سے متعلق کئی حدود عائد کرتے ہیں۔
ODR کا اہم فائدہ ابتدائی انسٹالیشن کے سائز میں نمایاں کمی ہے۔ متعدد سطحوں والے کھیل، ویڈیو مواد والی ایپلیکیشنز یا بڑے تصویری سیٹ حصوں میں مواد لوڈ کر سکتے ہیں۔ صارف کو فوری طور پر بنیادی فعالیت تک رسائی ملتی ہے، جبکہ اضافی وسائل پس منظر میں ڈاؤن لوڈ ہوتے ہیں۔
ODR کو پہلی رسائی پر وسائل لوڈ کرنے کے لیے مسلسل انٹرنیٹ کنکشن کی ضرورت ہوتی ہے۔ کم کوریج والے علاقوں میں صارفین کو تاخیر اور ڈاؤن لوڈ کی غلطیوں کا سامنا کرنا پڑ سکتا ہے۔ اس کے علاوہ، Apple اس بات کی ضمانت نہیں دیتا کہ ڈاؤن لوڈ کردہ وسائل آلہ پر رہیں گے — جب ذخیرہ کم ہوتا ہے، iOS بغیر انتباہ کے مانگ پر ٹیگ حذف کر سکتا ہے۔
اکثر پوچھے گئے سوالات
ODR App Store میں نیا ورژن شائع کیے بغیر وسائل شامل کرنے اور تبدیل کرنے کی اجازت دیتا ہے۔ بس Xcode کے ذریعے Apple سرور پر فائلوں کو اپ ڈیٹ کریں اور انہیں ایک ہی ٹیگ تفویض کریں۔ اگلی درخواست پر، ایپلیکیشن وسائل کا تازہ ترین ورژن حاصل کرے گی۔ یہ موسمی مواد، عارضی پروموشنز اور نئی تصاویر اور لے آؤٹ کے A/B ٹیسٹنگ کے لیے آسان ہے۔
نظام دوسری ایپلیکیشنز کے لیے جگہ خالی کرنے کی ضرورت ہونے پر مانگ پر ٹیگ کردہ وسائل کو حذف کر دیتا ہے۔ ابتدائی انسٹالیشن ٹیگ کے وسائل حذف نہیں ہوتے۔ حذف کرنے کی ترتیب 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں