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 স্টোরেজ পরীক্ষা করতে পারে এবং সেই অনুযায়ী প্রথমে কোন রিসোর্স লোড করতে হবে তা নির্ধারণ করতে পারে। একটি ফলব্যack প্রক্রিয়া বাস্তবায়নের সুপারিশ করা হয়: যদি 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 অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন