File Provider Extension হল একটি iOS প্রক্রিয়া যা ক্লাউড পরিষেবা এবং অ্যাপগুলিকে সিস্টেম Files অ্যাপে তাদের ফাইল প্রদর্শন করতে দেয়। ব্যবহারকারী বাহ্যিক ডকুমেন্টগুলি স্থানীয় ডকুমেন্টের পাশাপাশি একটি ইউনিফাইড ইন্টারফেসে দেখে এবং অতিরিক্ত সফ্টওয়্যার ইনস্টল না করেই সেগুলি খুলতে, সরাতে এবং সম্পাদনা করতে পারে। Apple ডেভেলপার ডকুমেন্টেশন (2025) অনুযায়ী, NSFileProviderManager ইনক্রিমেন্টাল সিঙ্ক্রোনাইজেশন প্রদান করে এবং ডিভাইসে নিজস্ব ক্যাশের মাধ্যমে ফাইল সংস্করণ পরিচালনা করে।
মূল বিষয়
File Provider Extension হল একটি অ্যাপ এক্সটেনশন যা Files অ্যাপে নতুন ডকুমেন্ট উৎস যোগ করে। একটি ক্লাউড পরিষেবা — Google Drive, Dropbox, OneDrive বা কর্পোরেট স্টোরেজ — একটি আলাদা অ্যাপ না খুলেই সরাসরি সিস্টেম ইন্টারফেসে তার ফাইল কাঠামো প্রদর্শন করতে পারে।
ব্যবহারকারীরা রিমোট ফাইলের সাথে ডিভাইসে সংরক্ষিত ফাইলের মতোই কাজ করে: ফোল্ডার বিষয়বস্তু ব্রাউজ করা, ডকুমেন্ট টেনে আনা এবং ফেলা, যেকোনো সামঞ্জস্যপূর্ণ অ্যাপে সেগুলি খোলা এবং পরিবর্তনগুলি ক্লাউডে ফেরত সংরক্ষণ করা। WWDC 2025 অনুযায়ী, File Provider Extension 1000 পর্যন্ত একযোগী সিঙ্ক অপারেশন সমর্থন করে এবং ডায়নামিক অগ্রাধিকার ব্যবস্থাপনার মাধ্যমে নেটওয়ার্ক গতির সাথে খাপ খায়।
এক্সটেনশনটি ব্যাকগ্রাউন্ডে চলে — iOS এটি চালু করে যখন সিঙ্ক্রোনাইজেশন প্রয়োজন হয় এবং সম্পদ কম থাকলে জোর করে বন্ধ করতে পারে। সমস্ত অপারেশন আইডেম্পোটেন্ট হতে হবে এবং একটি চেকপয়েন্ট থেকে পুনরায় শুরু করার সমর্থন করতে হবে।
File Provider Extension-এর একটি তিন-স্তরের আর্কিটেকচার রয়েছে: Files.app সিস্টেম প্রক্রিয়া, প্রোভাইডার এক্সটেনশন এবং রিমোট সার্ভার। সিস্টেম এক্সটেনশন থেকে ডেটার অনুরোধ করে, এক্সটেনশন অনুরোধগুলিকে ক্লাউড পরিষেবা API কল-এ রূপান্তর করে এবং NSFileProviderItem-এর মাধ্যমে ফলাফল ফেরত দেয়।
প্রত্যেক আপডেটে সম্পূর্ণ ফাইল কাঠামো লোড করার পরিবর্তে, এক্সটেনশন শুধুমাত্র পরিবর্তিত আইটেম স্থানান্তর করে। NSFileProviderManager ইনক্রিমেন্টাল আপডেট পাঠানোর জন্য পদ্ধতি প্রদান করে — “ফাইল A যোগ করা হয়েছে”, “ফাইল B পরিবর্তন করা হয়েছে”, “ফোল্ডার C মুছে ফেলা হয়েছে”। এটি ট্রাফিক নাটকীয়ভাবে কমায় এবং পরিবর্তন প্রদর্শন দ্রুত করে।
Apple ইঞ্জিনিয়ারিং অনুযায়ী, ইনক্রিমেন্টাল সিঙ্ক্রোনাইজেশন সম্পূর্ণ রিলোডের তুলনায় ডেটা স্থানান্তরের পরিমাণ 60–80% কমায়। সিঙ্ক অবস্থা চিহ্নিত করতে এবং ডুপ্লিকেট অনুরোধ কমাতে NSFileProviderSyncAnchor ব্যবহার করার পরামর্শ দেওয়া হয়।
File Provider Extension অফলাইন অ্যাক্সেসের জন্য ফাইলগুলি স্থানীয়ভাবে ক্যাশ করতে পারে। যখন একটি ফাইল খোলা হয়, সিস্টেম এক্সটেনশনে একটি অনুরোধ করে, এবং এক্সটেনশন সিদ্ধান্ত নেয় যে সার্ভার থেকে কন্টেন্ট ডাউনলোড করবে নাকি আগে থেকে ক্যাশ করা সংস্করণ ফেরত দেবে। NSFileProviderItem isDownloaded এবং isUploaded ফিল্ডের মাধ্যমে ক্যাশিং স্তর নির্দেশ করে।
Apple ফাইলের আকারের উপর ভিত্তি করে ক্যাশিং নীতি কনফিগার করার পরামর্শ দেয়: ছবি এবং ডকুমেন্টের জন্য — সম্পূর্ণ ক্যাশিং, ভিডিওর জন্য — শুধুমাত্র প্রিভিউ, আর্কাইভের জন্য — ব্যবহারকারীর অনুরোধে।
NSFileProviderManager হল কেন্দ্রীয় ক্লাস যা মাধ্যমে এক্সটেনশন সিস্টেমের সাথে ইন্টারঅ্যাক্ট করে। এটি সিস্টেমকে পরিবর্তন সম্পর্কে জানাতে, নতুন আইটেম তৈরি করতে, ডাউনলোড পরিচালনা করতে এবং ত্রুটিগুলি হ্যান্ডেল করার জন্য পদ্ধতি প্রদান করে। প্রতিটি NSFileProviderManager ইনস্ট্যান্স একটি নির্দিষ্ট ডোমেনের সাথে আবদ্ধ।
signalEnumerator(for:) — সিস্টেমকে জানায় যে ফোল্ডারের বিষয়বস্তু পরিবর্তিত হয়েছে এবং পুনরায় পড়ার প্রয়োজন। reimportItem(_:) — সার্ভার-সাইড পরিবর্তনের পরে নির্দিষ্ট আইটেম পুনরায় ইম্পোর্ট করে। registerURLSessionTask:forItemWithIdentifier: — অগ্রগতি ট্র্যাকিংয়ের জন্য একটি ব্যাকগ্রাউন্ড ডাউনলোডকে নির্দিষ্ট ফাইলের সাথে যুক্ত করে।
গুরুত্বপূর্ণ সীমাবদ্ধতা: NSFileProviderManager শুধুমাত্র এক্সটেনশন প্রক্রিয়ার মধ্যে কাজ করে। প্রধান অ্যাপ ফাইল কাঠামো পরিচালনা করার জন্য সরাসরি এর পদ্ধতি কল করতে পারে না — সিঙ্ক্রোনাইজেশন এক্সটেনশন বা সিস্টেম দ্বারা শুরু হতে হবে।
let manager = NSFileProviderManager.default()
manager.signalEnumerator(for: workingSet) { error in
if let error = error {
print("Signal failed: \(error)")
}
}
ব্যাকগ্রাউন্ডে ফাইল ডাউনলোডের জন্য, NSFileProviderManager ব্যাকগ্রাউন্ড কনফিগারেশন সহ URLSession ব্যবহার করে। এক্সটেনশন একটি ডাউনলোড টাস্ক তৈরি করে এবং এটি ম্যানেজারে নিবন্ধন করে, যা এটিকে সংশ্লিষ্ট আইটেমের সাথে যুক্ত করে। সিস্টেম ব্যবহারকারীর কার্যকলাপের উপর ভিত্তি করে স্বয়ংক্রিয়ভাবে ডাউনলোডের অগ্রগতি এবং অগ্রাধিকার ট্র্যাক করে।
File Provider Extension তৈরি করা Xcode-এ File Provider Extension টেমপ্লেট সহ একটি নতুন target যোগ করার মাধ্যমে শুরু হয়। Xcode স্বয়ংক্রিয়ভাবে NSFileProviderExtension থেকে উত্তরাধিকারসূত্রে প্রাপ্ত একটি ক্লাস এবং আইটেমগুলির সাথে কাজ করার জন্য পদ্ধতির একটি ন্যূনতম সেট তৈরি করে।
ফাইল কাঠামোর প্রতিটি আইটেম — একটি ফাইল বা ফোল্ডার — NSFileProviderItem প্রোটোকল বাস্তবায়ন করে। প্রোটোকল প্রয়োজনীয় ফিল্ড সংজ্ঞায়িত করে: itemIdentifier, parentItemIdentifier, filename, typeIdentifier এবং capabilities। অতিরিক্তভাবে, আপনি আকার, পরিবর্তনের তারিখ এবং ডাউনলোড ফ্ল্যাগ নির্দিষ্ট করতে পারেন।
struct CloudItem: NSFileProviderItem {
let itemIdentifier: NSFileProviderItemIdentifier
let parentItemIdentifier: NSFileProviderItemIdentifier
let filename: String
let typeIdentifier: String
let capabilities: NSFileProviderItemCapabilities
let documentSize: NSNumber?
}
enumerator(for:) পদ্ধতি একটি অবজেক্ট ফেরত দেয় যা NSFileProviderEnumerator বাস্তবায়ন করে, যা সিস্টেমের অনুরোধে ফোল্ডারের বিষয়বস্তু প্রদান করে। iOS রুট ফোল্ডার, সাবফোল্ডার এবং একটি ওয়ার্কিং সেটের জন্য গণনার অনুরোধ করতে পারে — শেষটি সাম্প্রতিক বা পছন্দের ফাইল প্রদর্শনের জন্য ব্যবহৃত হয়।
Apple একসাথে হাজার হাজার আইটেম লোড এড়াতে NSFileProviderPage-এর মাধ্যমে পেজিনেশন সহ অ্যাসিঙ্ক্রোনাস গণনা পদ্ধতি ব্যবহার করার পরামর্শ দেয়। কর্মক্ষমতার জন্য 50–100 আইটেমের পেজগুলি সর্বোত্তম।
NSFileProviderDomain হল একটি একক এক্সটেনশনের মধ্যে বিভিন্ন অ্যাকাউন্ট আলাদা করার প্রক্রিয়া। যদি একজন ব্যবহারকারী একটি অ্যাপে একাধিক অ্যাকাউন্ট অনুমোদন করে থাকেন — ব্যক্তিগত এবং কর্পোরেট Google Drive — প্রতিটি অ্যাকাউন্ট একটি পৃথক ডোমেন তৈরি করে, যা Files অ্যাপে একটি পৃথক উৎস হিসাবে প্রদর্শিত হয়।
প্রতিটি ডোমেনের একটি অনন্য শনাক্তকারী, একটি প্রদর্শনের নাম এবং একটি অবস্থা রয়েছে। ব্যবহারকারীরা অন্যান্য অ্যাকাউন্টকে প্রভাবিত না করেই সাময়িকভাবে ডোমেন নিষ্ক্রিয় বা মুছে ফেলতে পারেন। সিস্টেম প্রতিটি সক্রিয় ডোমেনের জন্য একটি পৃথক এক্সটেনশন প্রক্রিয়া শুরু করে, যা অ্যাকাউন্টগুলির মধ্যে ডেটা বিচ্ছিন্নতা নিশ্চিত করে।
Apple-এর মতে, প্রতি এক্সটেনশনে 10টির বেশি ডোমেন না তৈরি করার পরামর্শ দেওয়া হয় — অত্যধিক সংখ্যা Files অ্যাপ চালু হওয়া ধীর করে এবং মেমরি খরচ বাড়ায়। বিপুল সংখ্যক অ্যাকাউন্টযুক্ত পরিষেবাগুলির জন্য, এক্সটেনশনের মধ্যে প্রোফাইল সুইচিং সহ একটি একক ডোমেনে সেগুলি সমষ্টিগত করা উচিত।
let domain = NSFileProviderDomain(
identifier: "work",
displayName: "Corporate Drive"
)
NSFileProviderManager.add(domain) { error in
if let error = error {
print("Failed to add domain: \(error)")
}
}
সচরাচর জিজ্ঞাসিত প্রশ্ন
যেকোনো পরিষেবা তার নিজস্ব এক্সটেনশন বাস্তবায়ন করতে পারে। সমর্থনকারী পরিষেবাগুলির মধ্যে — Google Drive, Dropbox, Microsoft OneDrive, Box, iCloud Drive এবং Nextcloud। এক্সটেনশনটি যেকোনো REST বা WebDAV স্টোরেজের জন্য সর্বজনীন।
এক্সটেনশন স্থানীয় ফাইল পরিবর্তন সম্পর্কে সিস্টেম থেকে বিজ্ঞপ্তি পায় এবং NSFileProviderManager-এর মাধ্যমে সেগুলি সার্ভারে পাঠায়। সার্ভার থেকে বিপরীত সিঙ্ক্রোনাইজেশনের জন্য, NSFileProviderSyncAnchor ব্যবহার করা হয় — শেষ আপডেটের একটি মার্কার।
হ্যাঁ, যদি ফাইলগুলি স্থানীয়ভাবে ক্যাশ করা থাকে। NSFileProviderItem ডাউনলোড করা ফাইলগুলিকে isDownloaded ফ্ল্যাগ দিয়ে চিহ্নিত করে। অফলাইন মোডে করা পরিবর্তনগুলি সংযোগ পুনরুদ্ধার হলে স্বয়ংক্রিয়ভাবে সিঙ্ক হয়।
কোনও সরাসরি সীমাবদ্ধতা নেই — আকার সার্ভারের ক্ষমতা দ্বারা নির্ধারিত হয়। Apple 100 MB পর্যন্ত ফাইল স্বয়ংক্রিয়ভাবে ক্যাশ করার এবং বড় ফাইলের জন্য অগ্রগতি বার সহ স্ট্রিমিং ডাউনলোড ব্যবহার করার পরামর্শ দেয়।
UIDocumentPickerViewController একটি মডাল উইন্ডোর মাধ্যমে একবারের ফাইল নির্বাচন প্রদান করে। File Provider Extension ব্যাকগ্রাউন্ড সিঙ্ক্রোনাইজেশন এবং দীর্ঘমেয়াদী অ্যাক্সেস সহ Files অ্যাপে একটি স্থায়ী ডকুমেন্ট উৎস এম্বেড করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন