File Provider Extension একটি iOS প্রক্রিয়া যা অ্যাপ্লিকেশনগুলিকে বিল্ট-ইন Files অ্যাপের মাধ্যমে বাহ্যিক উৎস থেকে ফাইলগুলিতে অ্যাক্সেস প্রদান করতে দেয়। Apple Developer Documentation, 2024 অনুসারে, File Provider Extension ক্লাউড স্টোরেজ, সার্ভার এবং কাস্টম ফাইল সিস্টেম থেকে ফাইলগুলিকে Files.app-এ সরাসরি প্রদর্শন করতে সক্ষম করে — সেগুলি স্থানীয়ভাবে আমদানি করার প্রয়োজন ছাড়াই। ব্যবহারকারী তাদের শারীরিক অবস্থান নির্বিশেষে ফাইলগুলির সাথে কাজ করার জন্য একটি ইউনিফাইড ইন্টারফেস পান।
মূল পয়েন্ট
File Provider Extension iOS এবং macOS-এ একটি অ্যাপ এক্সটেনশন যা একটি অ্যাপ্লিকেশনকে সিস্টেম Files অ্যাপের মাধ্যমে বাহ্যিক উৎস থেকে ফাইলগুলিতে অ্যাক্সেস প্রদান করতে দেয়। এটি iOS 11-এ চালু হয়েছিল এবং Document Provider প্রক্রিয়াটি প্রতিস্থাপন করেছিল, যার সাথে সিঙ্ক্রোনাইজেশন, অনুসন্ধান এবং ট্যাগের জন্য সমর্থন যুক্ত করা হয়েছিল।
File Provider Extension-এর প্রধান কাজ হল বাহ্যিক স্টোরেজ (ক্লাউড সার্ভার, কর্পোরেট NAS, FTP) এবং Files.app-এর মধ্যে একটি সেতু হিসাবে কাজ করা। ব্যবহারকারী ফাইল এবং ফোল্ডারগুলিকে দেখেন যেন সেগুলি স্থানীয়ভাবে সংরক্ষিত আছে, যদিও ডেটা আসলে একটি দূরবর্তী সার্ভারে থাকতে পারে। এক্সটেনশনটি পটভূমিতে কাজ করে, প্রয়োজন অনুসারে বিষয়বস্তু সিঙ্ক্রোনাইজ করে।
WWDC 2024 অনুসারে, Apple সক্রিয়ভাবে FileProvider API বিকাশ করছে: ইনক্রিমেন্টাল সিঙ্ক্রোনাইজেশনের জন্য সমর্থন যুক্ত করা হয়েছে, বড় ডিরেক্টরির জন্য কর্মক্ষমতা উন্নত করা হয়েছে এবং ব্যাচ অপারেশন এখন উপলব্ধ। এটি File Provider Extension-কে Apple ইকোসিস্টেমে বাহ্যিক ফাইল সংহত করার পছন্দের উপায় করে তোলে।
আর্কিটেকচার File Provider Extension-এর দুটি উপাদান রয়েছে: প্রধান এক্সটেনশন (ফাইল প্রদানকারী প্রকার) এবং প্রমাণীকরণ এবং কনফিগারেশনের জন্য একটি ঐচ্ছিক UI এক্সটেনশন। প্রধান এক্সটেনশন NSFileProviderExtension প্রোটোকল প্রয়োগ করে এবং Files.app থেকে সমস্ত অনুরোধ পরিচালনা করে।
import FileProvider
class CloudFileProvider: NSFileProviderExtension {
override func item(for identifier: NSFileProviderItemIdentifier) throws -> NSFileProviderItem {
guard let item = storage
.item(for: identifier) else {
throw NSError(domain: NSFileProviderErrorDomain,
code: NSFileProviderError.noSuchItem.rawValue)
}
return item
}
override func urlForItem(with identifier: NSFileProviderItemIdentifier) -> URL {
return fileCoordinator.urlForItem(with: identifier)
}
}
যখন একজন ব্যবহারকারী Files.app খোলে এবং আপনার প্রদানকারী নির্বাচন করে, সিস্টেম একটি পটভূমি প্রক্রিয়ায় এক্সটেনশন শুরু করে। এক্সটেনশনের কোনো UI নেই — এটি একটি হেডলেস প্রক্রিয়া যা পড়া, লেখা, নাম পরিবর্তন এবং ফাইল মুছে ফেলার অনুরোধগুলি পরিচালনা করে। সমস্ত অপারেশন NSFileProviderManager-এর মাধ্যমে অ্যাসিঙ্ক্রোনাসভাবে সম্পাদিত হয়।
গুরুত্বপূর্ণ সূক্ষ্মতা: File Provider Extension একটি পৃথক প্রক্রিয়ায় বাস করে এবং মেমরি কম হলে সিস্টেম দ্বারা শেষ করা যেতে পারে। তাই, প্রদানকারীকে পুনরায় চালু করার পরে অবস্থা পুনরুদ্ধার করতে সক্ষম হতে হবে, স্থায়ী স্টোরেজে শনাক্তকারী এবং সিঙ্ক ক্যাশ সংরক্ষণ করতে হবে।
NSFileProviderItem একটি প্রোটোকল যা প্রদানকারী শ্রেণিবিন্যাসে একটি পৃথক ফাইল বা ফোল্ডার বর্ণনা করে। প্রতিটি আইটেমের একটি অনন্য শনাক্তকারী, নাম, প্রকার (ফাইল বা ফোল্ডার), তৈরি এবং সংশোধনের তারিখ, আকার এবং ফ্ল্যাগ (অফলাইনে উপলব্ধ, কেবল পঠনযোগ্য) থাকে।
| বৈশিষ্ট্য | প্রকার | বর্ণনা |
|---|---|---|
| itemIdentifier | NSFileProviderItemIdentifier | প্রদানকারী সিস্টেমে আইটেমের অনন্য ID |
| parentItemIdentifier | NSFileProviderItemIdentifier | প্যarent ফোল্ডারের ID (রুট — .rootContainer) |
| filename | String | এক্সটেনশন সহ ফাইলের নাম |
| typeIdentifier | String (UTType) | সামগ্রীর প্রকার নির্ধারণের জন্য ইউনিফর্ম টাইপ আইডেন্টিফায়ার |
| capabilities | NSFileProviderItemCapabilities | ফ্ল্যাগ: মুছে ফেলা, নাম পরিবর্তন, ট্যাগ যুক্ত করা |
প্রোটোকলটি NSFileProviderItemProtocol-এর মাধ্যমে বর্ধিত ক্ষমতাও সমর্থন করে: ট্যাগ (রঙিন লেবেল), আইকন, সংস্করণ নিয়ন্ত্রণ এবং কাস্টম কর্ম। বড় ফাইলের জন্য, NSFileProviderService-এর মাধ্যমে পুনরায় শুরুযোগ্য স্থানান্তর সমর্থন প্রয়োগ করা হয়।
WWDC 2023 অনুসারে, Apple সম্পূর্ণ অবজেক্টের পরিবর্তে শুধুমাত্র পরিবর্তিত বৈশিষ্ট্যগুলি আপডেট করতে ক্লোজার (NSFileProviderItemFields) ব্যবহার করার পরামর্শ দেয়। এটি ব্যাচ আপডেটের সময় সিঙ্ক্রোনাইজেশনকে উল্লেখযোগ্যভাবে গতি বাড়ায় — উদাহরণস্বরূপ, যখন শুধুমাত্র ফাইলগুলির একটি গ্রুপের আকার পরিবর্তিত হয়।
NSFileProviderManager এক্সটেনশন জীবনচক্র পরিচালনার জন্য কেন্দ্রীয় ক্লাস। এটি সিস্টেমকে পরিবর্তন সম্পর্কে সংকেত দেওয়া, সহযোগী দ্বন্দ্ব পরিচালনা এবং ডাউনলোড পরিচালনার জন্য পদ্ধতি সরবরাহ করে। ম্যানেজার স্বয়ংক্রিয়ভাবে সক্রিয় স্থানান্তর ট্র্যাক করে এবং ব্যবহারকারীর কাছে দৃশ্যমান ফাইলগুলিকে অগ্রাধিকার দেয়।
class SyncManager {
let providerManager = NSFileProviderManager.default
func signalUpdate(for item: NSFileProviderItemIdentifier) {
providerManager.signalEnumerator(
for: item.parentItemIdentifier
) { error in
if let error = error {
Logger.sync.error(
"Failed to signal: \(error.localizedDescription)"
)
}
}
}
func uploadItem(at url: URL, itemId: NSFileProviderItemIdentifier) {
providerManager.registerURLBasedItem(
with: itemId,
url: url
)
}
}
সিঙ্ক ইঞ্জিন হল সেই লজিক যা ডেভেলপার স্বাধীনভাবে প্রয়োগ করে। Apple কোনো অন্তর্নির্মিত সিঙ্ক্রোনাইজেশন প্রক্রিয়া সরবরাহ করে না — শুধুমাত্র পরিবর্তন সম্পর্কে সিস্টেমকে অবহিত করার জন্য API। প্রদানকারী নিজেই সিদ্ধান্ত নেয় কীভাবে সার্ভার থেকে ফাইল ডাউনলোড করতে হবে, সেগুলি স্থানীয়ভাবে ক্যাশ করতে হবে এবং সম্পাদনা দ্বন্দ্ব সমাধান করতে হবে।
দ্বন্দ্ব: সিস্টেম NSFileProviderSyncAnchor-এর মাধ্যমে সংস্করণ দ্বন্দ্ব সনাক্তকরণ সমর্থন করে। যখন একটি ফাইল একই সাথে স্থানীয় এবং দূরবর্তীভাবে পরিবর্তিত হয়, প্রদানকারী শেষ সিঙ্ক্রোনাইজড সংস্করণ নির্ধারণ করতে সিঙ্ক অ্যাঙ্কর ব্যবহার করে এবং শেষ লেখকের জয় কৌশল বা দ্বন্দ্বপূর্ণ কপি তৈরি করে দ্বন্দ্ব সমাধান করে।
File Provider Extension একটি কঠোর iOS স্যান্ডবক্সের মধ্যে কাজ করে। এক্সটেনশনের হোস্ট অ্যাপের ফাইল সিস্টেমে সরাসরি অ্যাক্সেস নেই, এবং বিপরীতভাবে, অ্যাপ সরাসরি প্রদানকারীর ফাইল পড়তে পারে না। সমস্ত ডেটা বিনিময় Files.app সিস্টেম API-এর মাধ্যমে হয়।
ব্যবহারকারীর ফাইলগুলিতে অ্যাক্সেস কেবল স্পষ্ট মিথস্ক্রিয়ার মাধ্যমে সম্ভব: ব্যবহারকারী একটি অ্যাপ্লিকেশনে Files.app থেকে একটি ফাইল খোলে, এবং সিস্টেম একটি বিচ্ছিন্ন কন্টেইনারে ফাইলের একটি অস্থায়ী কপি তৈরি করে। প্রাপ্ত অ্যাপ এই কপির সাথে কাজ করে, প্রদানকারীর স্টোরেজে মূলের সাথে নয়।
Apple Security Guide, 2024 অনুসারে, প্রদানকারীকে ট্রান্সমিশনের সময় ডেটা এনক্রিপশন (TLS 1.3) প্রয়োগ করতে হবে এবং ক্যাশ করা ফাইলগুলির জন্য ঐচ্ছিকভাবে ডিস্ক এনক্রিপশন যুক্ত করতে পারে। ব্যবহারকারী প্রমাণীকরণ একটি পৃথক FileProviderUI উপাদানের মাধ্যমে সম্পাদিত হয়, যা নিরাপদ ক্রেডেনশিয়াল ইনপুটের জন্য এক্সটেনশন স্যান্ডবক্সের বাইরে চলে।
মূল সীমাবদ্ধতা: এক্সটেনশন নির্বিচারে কোড চালাতে পারে না — এটি কেবল NSFileProviderManager-এর মাধ্যমে অনুরোধগুলি প্রক্রিয়া করে। ফাইল অপারেশনের বাইরে কোনো লজিক প্রধান অ্যাপে প্রয়োগ করতে হবে এবং অ্যাপ গ্রুপ বা XPC পরিষেবাগুলির মাধ্যমে কল করতে হবে।
সচরাচর জিজ্ঞাসা
File Provider Extension Files অ্যাপের সাথে বাহ্যিক ফাইল স্টোরেজ সংহত করার জন্য একটি অ্যাপ এক্সটেনশন। এটি ক্লাউড পরিষেবা, FTP, NAS এবং অন্যান্য উৎস থেকে ফাইলগুলি স্থানীয়ভাবে কপি না করেই প্রদর্শন করতে দেয়।
File Provider (iOS 11+) Document Provider-কে প্রতিস্থাপন করেছে, পটভূমি সিঙ্ক্রোনাইজেশন, Spotlight অনুসন্ধান সমর্থন, ট্যাগ এবং উন্নত কর্মক্ষমতা যুক্ত করেছে। Document Provider iOS 11-এর সাথে অপ্রচলিত হয়ে গিয়েছিল এবং iOS 14-এ সরিয়ে ফেলা হয়েছিল।
সিঙ্ক্রোনাইজেশন ডেভেলপার দ্বারা NSFileProviderManager-এর মাধ্যমে প্রয়োগ করা হয়। এক্সটেনশন signalEnumerator-এর মাধ্যমে সিস্টেমকে পরিবর্তন সম্পর্কে সংকেত দেয়, এবং সিস্টেম আপডেট করা আইটেমের তালিকার অনুরোধ করে। সংস্করণ দ্বন্দ্ব NSFileProviderSyncAnchor-এর মাধ্যমে সমাধান করা হয়।
হ্যাঁ, File Provider Extension প্রধান অ্যাপ চলমান ছাড়াই একটি স্বাধীন প্রক্রিয়া হিসাবে কাজ করতে পারে। এটি একটি হেডলেস এক্সটেনশন যা iOS Files.app-এর অনুরোধে শুরু করে। তবে, প্রমাণীকরণ এবং প্রাথমিক সেটআপ সাধারণত প্রধান অ্যাপের মাধ্যমে সম্পাদিত হয়।
এক্সটেনশনের Xcode-এ File Provider সামর্থ্য এবং সেইসাথে entitlement com.apple.developer.file-provider প্রয়োজন। নেটওয়ার্ক অ্যাক্সেসের জন্য, Network সামর্থ্য যুক্ত করা হয়। অন্যান্য সমস্ত অধিকার iOS স্যান্ডবক্স দ্বারা কঠোরভাবে সীমাবদ্ধ।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন