On-Demand Resources: এটি কী, অনুরোধ পদ্ধতি এবং রিসোর্স সংরক্ষণ

লেখক: IT Sectr প্রকাশিত: 2026-04-17 পড়ার সময়: 9 মিনিট

On-Demand Resources হল Apple-এর অ্যাপ্লিকেশন কন্টেন্ট বিলম্বিত লোড করার প্রযুক্তি। সমস্ত রিসোর্স ইনস্টলেশন প্যাকেজে অন্তর্ভুক্ত করার পরিবর্তে, ডেভেলপাররা সেগুলি App Store সার্ভারে হোস্ট করে এবং প্রয়োজন অনুযায়ী অনুরোধ করে। Apple ODR Guide অনুসারে, এটি প্রাথমিক ইনস্টলেশনের আকার হ্রাস করে এবং অ্যাপ্লিকেশন সংস্করণ আপডেট না করেই নতুন কন্টেন্ট যুক্ত করার অনুমতি দেয়।

মূল পয়েন্ট

  • On-Demand Resources — অ্যাপ্লিকেশন ইনস্টলেশনের পরে চাহিদা অনুযায়ী রিসোর্স লোড করার একটি প্রক্রিয়া
  • রিসোর্স Apple সার্ভারে সংরক্ষিত থাকে এবং NSBundleResourceRequest এর মাধ্যমে অনুরোধ করা হয়
  • ট্যাগ অ্যাপ্লিকেশনের কার্যকরী ব্লক অনুযায়ী রিসোর্স গ্রুপ করে
  • প্রিফেচিং UX উন্নত করতে আগে থেকেই রিসোর্স লোড করার অনুমতি দেয়
  • স্টোরেজ কোটা সীমিত এবং ডেভেলপারের মনিটরিং প্রয়োজন

iOS এ On-Demand Resources কী

On-Demand Resources (ODR) হল iOS, tvOS এবং macOS-এ নির্মিত একটি কন্টেন্ট ম্যানেজমেন্ট সিস্টেম। এটি ডেভেলপারকে অ্যাপ্লিকেশন রিসোর্স বাধ্যতামূলক (ইনস্টলেশন প্যাকেজে অন্তর্ভুক্ত) এবং চাহিদা অনুযায়ী (App Store-এ সংরক্ষিত এবং প্রয়োজন অনুযায়ী ডাউনলোড) এ বিভক্ত করার অনুমতি দেয়।

ODR-এর মূল ধারণা

ODR সিস্টেম তিনটি মূল সত্তার সাথে কাজ করে: ট্যাগ, রিসোর্স প্যাকেজ এবং অনুরোধ। ট্যাগ হল একটি স্ট্রিং শনাক্তকারী যা ফাইলের একটি সেট গ্রুপ করে। রিসোর্স প্যাকেজ হল একটি ডেটা সেট যা একটি ট্যাগের সাথে সংযুক্ত। অনুরোধ হল NSBundleResourceRequest-এর একটি প্রোগ্রামেটিক কল যা প্যাকেজ লোডিং শুরু করে।

রিসোর্স অনুরোধের জীবনচক্র

রিসোর্স লোডিং বিভিন্ন ধাপের মধ্য দিয়ে যায়: নির্দিষ্ট ট্যাগ সহ অনুরোধ শুরু করা, স্থানীয় স্টোরেজে উপলব্ধতা পরীক্ষা করা, অনুপস্থিত থাকলে Apple সার্ভার থেকে ডাউনলোড করা, প্রস্তুত হলে অ্যাপ্লিকেশনকে জানানো এবং ব্যবহারের পরে রিসোর্স মুক্ত করা। সিস্টেম স্বয়ংক্রিয়ভাবে ক্যাশিং এবং অব্যবহৃত রিসোর্স অপসারণ পরিচালনা করে।

ধাপসিস্টেমের কার্যসম্পাদনের সময়
শুরু করাট্যাগ সহ NSBundleResourceRequest তৈরি করাতাৎক্ষণিক
ক্যাশ পরীক্ষাস্থানীয় স্টোরেজে রিসোর্স খোঁজা0.1–0.5 সেকেন্ড
ডাউনলোডApple CDN থেকে ডাউনলোডআকারের উপর নির্ভর করে
জানানোকমপ্লিশন হ্যান্ডলার বা ডেলিগেট কল করাতাৎক্ষণিক
মুক্ত করাসিস্টেম দ্বারা অপসারণযোগ্য হিসাবে রিসোর্স চিহ্নিত করাiOS অনুরোধে

iOS এ ODR কীভাবে কাজ করে

ODR প্রক্রিয়া একটি ব্যাকগ্রাউন্ড সার্ভিসের উপর ভিত্তি করে যা App Store ক্লাউড স্টোরেজ থেকে রিসোর্স অনুরোধ পরিচালনা করে। যখন অ্যাপ্লিকেশন একটি ট্যাগ অনুরোধ করে, সিস্টেম পরীক্ষা করে যে রিসোর্স স্থানীয় ক্যাশে আছে কিনা। যদি না থাকে — তাহলে এটি বিঘ্নিত সংযোগের জন্য পুনরায় শুরু করার সমর্থন সহ ব্যাকগ্রাউন্ড URL সেশনের মাধ্যমে ডাউনলোড শুরু করে।

NSBundleResourceRequest এর মাধ্যমে অনুরোধ পরিচালনা

swift
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 কম ব্যাটারিতে লোডিং বিলম্বিত বা বিরতি দিতে পারে।

  • উচ্চ অগ্রাধিকার — এখনই প্রয়োজনীয় রিসোর্সের জন্য তাৎক্ষণিক লোডিং
  • নিম্ন অগ্রাধিকার — প্রিফেচিং এবং প্রাথমিক ক্যাশিংয়ের জন্য বিলম্বিত লোডিং
  • ব্যাকগ্রাউন্ড — শুধুমাত্র সক্রিয় Wi-Fi এবং পর্যাপ্ত ব্যাটারি সহ লোডিং

রিসোর্সের ধরন এবং ODR ট্যাগ

ODR রিসোর্স এর মধ্যে ছবি, ভিডিও, অডিও ফাইল, স্প্রাইট, লেভেল ডেটা এবং অ্যাপ্লিকেশন চালু করার জন্য গুরুত্বপূর্ণ নয় এমন অন্য যেকোনো ফাইল অন্তর্ভুক্ত থাকতে পারে। প্রতিটি রিসোর্স এক বা একাধিক ট্যাগের সাথে যুক্ত থাকে যা এর কার্যকরী ব্লকের সদস্যতা নির্ধারণ করে।

Xcode এ কন্টেন্ট ট্যাগিং

Xcode-এ, ট্যাগ Target Membership ট্যাবে Resource Tags ইন্সপেক্টরের মাধ্যমে কনফিগার করা হয়। ডেভেলপার প্রতিটি প্রজেক্ট ফাইলের জন্য নির্দিষ্ট করে যে এটি মূল বান্ডেলে অন্তর্ভুক্ত কিনা বা ট্যাগ দ্বারা লোড করা হয়েছে। একটি ফাইল একাধিক ট্যাগের অন্তর্ভুক্ত হতে পারে, যা অ্যাপ্লিকেশনের বিভিন্ন বিভাগ জুড়ে রিসোর্স পুনরায় ব্যবহারের অনুমতি দেয়।

xml
<!-- 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 দ্বারা মুছে ফেলা যেতে পারে।

বিভাগ ছাড়াও, প্রতিটি ট্যাগের ডাউনলোড অগ্রাধিকার থাকতে পারে। উচ্চ অগ্রাধিকার ট্যাগ নিম্ন অগ্রাধিকার ট্যাগের আগে লোড হয়, এমনকি যদি সেগুলি পরে অনুরোধ করা হয়। এটি ডেভেলপারকে কন্টেন্ট প্রদর্শনের ক্রম নিয়ন্ত্রণ করতে দেয়: প্রথমে মূল স্ক্রিনের জন্য গুরুত্বপূর্ণ রিসোর্স, তারপর অ্যাপ্লিকেশনের গভীর বিভাগের জন্য অতিরিক্ত উপকরণ।

  • প্রাথমিক ইনস্টলেশন ট্যাগ — প্রথম ইনস্টলেশনের সময় লোড হয়, সিস্টেম দ্বারা সরানো হয় না
  • প্রিফেচড ট্যাগ — UX উন্নত করতে ইনস্টলেশনের পরে ব্যাকগ্রাউন্ডে ডাউনলোড হয়
  • চাহিদা অনুযায়ী ট্যাগ — প্রোগ্রামেটিকভাবে অনুরোধ করা হয়, স্টোরেজ কম হলে iOS দ্বারা মুছে ফেলা যেতে পারে

Xcode এ On-Demand Resources কনফিগার করা

ODR সেটআপ Xcode-এ তিনটি ধাপ অন্তর্ভুক্ত করে: ট্যাগ অনুযায়ী রিসোর্স শ্রেণীবদ্ধ করা, Info.plist-এ ডাউনলোড প্যারামিটার কনফিগার করা এবং NSBundleResourceRequest এর মাধ্যমে প্রোগ্রামেটিক অনুরোধ বাস্তবায়ন। বেশিরভাগ কাজ বিল্ড পাশে করা হয়।

Target Membership-এ শ্রেণীবিভাগ

swift
// 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 এর মাধ্যমে পুনরায় অনুরোধ করার সুপারিশ করা হয়। গুরুত্বপূর্ণ রিসোর্সের জন্য যেগুলি ছাড়া অ্যাপ্লিকেশন কাজ করতে পারে না, প্রাথমিক ইনস্টলেশন ট্যাগ ব্যবহার করুন যা সিস্টেম দ্বারা সরানো হয় না।

ODR-এর সুবিধা এবং সীমাবদ্ধতা

On-Demand Resources ডেভেলপারকে অ্যাপ্লিকেশনের আকার পরিচালনার জন্য একটি নমনীয় সরঞ্জাম দেয়, তবে নেটওয়ার্ক উপলব্ধতা এবং iOS স্টোরেজ নীতির সাথে সম্পর্কিত বেশ কয়েকটি সীমাবদ্ধতা আরোপ করে।

ODR ব্যবহারের সুবিধা

ODR-এর প্রধান সুবিধা হল প্রাথমিক ইনস্টলেশনের আকারে ব্যাপক হ্রাস। একাধিক স্তরের গেম, ভিডিও কন্টেন্ট সহ অ্যাপ্লিকেশন বা বড় ছবির সেট অংশে কন্টেন্ট লোড করতে পারে। ব্যবহারকারী অবিলম্বে মৌলিক কার্যকারিতা অ্যাক্সেস পায়, যখন অতিরিক্ত রিসোর্স ব্যাকগ্রাউন্ডে ডাউনলোড হয়।

প্রযুক্তির সীমাবদ্ধতা

ODR-এর প্রথম অ্যাক্সেসে রিসোর্স লোড করার জন্য ধ্রুবক ইন্টারনেট সংযোগ প্রয়োজন। দুর্বল কভারেজ সহ এলাকায় ব্যবহারকারীরা বিলম্ব এবং ডাউনলোড ত্রুটির সম্মুখীন হতে পারে। এছাড়াও, Apple গ্যারান্টি দেয় না যে ডাউনলোড করা রিসোর্স ডিভাইসে থাকবে — স্টোরেজ কম হলে, iOS সতর্কতা ছাড়াই On-Demand ট্যাগ মুছে ফেলতে পারে।

  • নেটওয়ার্ক প্রয়োজনীয়তা — প্রথম রিসোর্স অনুরোধের জন্য ইন্টারনেট সংযোগ প্রয়োজন
  • স্বয়ংক্রিয় মুছে ফেলা — ডিভাইস স্টোরেজ কম হলে iOS ক্যাশ সাফ করতে পারে
  • ডিবাগিং জটিলতা — লোডিং সমস্যা পুনরুত্পাদনের জন্য বিভিন্ন নেটওয়ার্ক অবস্থার সিমুলেশন প্রয়োজন
  • ট্যাগের আকার — Apple সর্বোত্তম কর্মক্ষমতার জন্য প্রতি ট্যাগ 512 MB অতিক্রম না করার সুপারিশ করে
  • ত্রুটি পরিচালনা — অ্যাপ্লিকেশনকে লোডিং ব্যর্থতা সঠিকভাবে পরিচালনা করতে এবং অনুরোধ পুনরায় করতে হবে

সচরাচর জিজ্ঞাসা

অ্যাপ্লিকেশন আপডেট না করেই গতিশীলভাবে কন্টেন্ট যোগ করার জন্য ODR ব্যবহার করা যাবে কি?

ODR App Store-এ নতুন সংস্করণ প্রকাশ না করেই রিসোর্স যোগ এবং পরিবর্তন করার অনুমতি দেয়। কেবল Xcode-এর মাধ্যমে Apple সার্ভারে ফাইল আপডেট করুন এবং সেগুলি একই ট্যাগে বরাদ্দ করুন। পরবর্তী অনুরোধে, অ্যাপ্লিকেশন রিসোর্সের সর্বশেষ সংস্করণ পাবে। এটি মৌসুমী কন্টেন্ট, অস্থায়ী প্রচার এবং নতুন ছবি ও লেআউটের A/B পরীক্ষার জন্য সুবিধাজনক।

স্থান কম হলে iOS কীভাবে ODR রিসোর্স মুছে ফেলা পরিচালনা করে?

সিস্টেম অন্যান্য অ্যাপ্লিকেশনের জন্য স্থান খালি করার প্রয়োজন হলে On-Demand ট্যাগযুক্ত রিসোর্স মুছে ফেলে। প্রাথমিক ইনস্টলেশন ট্যাগ রিসোর্স মুছে ফেলা হয় না। মুছে ফেলার ক্রম LRU (Least Recently Used) অ্যালগরিদম দ্বারা নির্ধারিত হয় — প্রথমে সেসব রিসোর্স মুছে ফেলা হয় যেগুলি সবচেয়ে দীর্ঘ সময় ধরে অ্যাক্সেস করা হয়নি।

একটি অ্যাপ্লিকেশনের জন্য সর্বোচ্চ ODR রিসোর্স আকার কত?

iOS 13 থেকে, মোট ODR স্টোরেজ সীমা প্রতি Apple ID ব্যবহারকারীর জন্য 20 GB। সর্বোত্তম ডাউনলোড কর্মক্ষমতার জন্য একটি ট্যাগের আকার 512 MB অতিক্রম করা উচিত নয়। সীমা অতিক্রম করলে, অনুরোধ NSBundleResourceRequestLowDiskSpaceError-এর সাথে ব্যর্থ হয়।

প্রাথমিক ডাউনলোডের পরে ODR কি অফলাইন মোডে কাজ করে?

হ্যাঁ, ডাউনলোড করার পরে, রিসোর্স স্থানীয় ক্যাশে সংরক্ষিত হয় এবং ইন্টারনেট সংযোগ ছাড়াই অফলাইন মোডে উপলব্ধ থাকে। সমস্যা তখনই দেখা দেয় যদি iOS কম স্টোরেজের কারণে রিসোর্স মুছে ফেলে এবং ব্যবহারকারী নেটওয়ার্ক ছাড়াই এটি অ্যাক্সেস করার চেষ্টা করে।

ODR কীভাবে URLSession এর মাধ্যমে সাধারণ ফাইল ডাউনলোড থেকে আলাদা?

ODR App Store পরিকাঠামোর সাথে একীভূত: রিসোর্স Apple-এর CDN-এ হোস্ট করা হয়, ক্যাশিং সিস্টেম দ্বারা পরিচালিত হয় এবং ডেভেলপারকে নিজস্ব সার্ভার সেটআপ করার প্রয়োজন হয় না। URLSession-এর সার্ভার পরিকাঠামো, সংস্করণ নিয়ন্ত্রণ এবং ম্যানুয়াল ক্যাশ পরিচালনার প্রয়োজন। ODR সংযোগ বিঘ্নিত হলে স্বয়ংক্রিয়ভাবে ডাউনলোড পুনরায় শুরু করাও পরিচালনা করে।

সারসংক্ষেপ

  • On-Demand Resources — iOS এবং tvOS অ্যাপ্লিকেশনে বিলম্বিত কন্টেন্ট লোডিংয়ের একটি প্রযুক্তি
  • সিস্টেম রিসোর্স গ্রুপিং ট্যাগ এবং NSBundleResourceRequest এর মাধ্যমে অনুরোধের উপর ভিত্তি করে
  • সমস্ত ফাইলের ধরন সমর্থিত: ছবি, ভিডিও, অডিও, স্প্রাইট এবং লেভেল ডেটা
  • ট্যাগ বিভাগ — প্রাথমিক ইনস্টলেশন, প্রিফেচড এবং চাহিদা অনুযায়ী বিভিন্ন স্টোরেজ নীতি সহ
  • স্টোরেজ সীমা — প্রতি Apple ID 20 GB, প্রতি ট্যাগ 512 MB পর্যন্ত
  • ইনস্টলেশনের আকার মূল বান্ডেল থেকে Apple সার্ভারে রিসোর্স স্থানান্তর করে হ্রাস করা হয়
  • সুপারিশ — গেম, মিডিয়া-কন্টেন্ট অ্যাপ্লিকেশন এবং বহু-স্তরের কাঠামো প্রকল্পের জন্য ODR ব্যবহার করুন

আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব

IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।

প্রকল্প নিয়ে আলোচনা করুন

আরও পড়ুন