Documents Directory হলো একটি iOS অ্যাপ স্যান্ডবক্সের ডিরেক্টরি যা ব্যবহারকারীর ডেটা সংরক্ষণের জন্য ডিজাইন করা হয়েছে যা অ্যাপ সেশনের মধ্যে স্থায়ী হওয়া উচিত এবং iTunes File Sharing ও iCloud-এর মাধ্যমে ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য হওয়া উচিত। Apple File System Programming Guide (2024) অনুসারে, এই ডিরেক্টরির বিষয়বস্তু স্বয়ংক্রিয়ভাবে iCloud এবং iTunes ব্যাকআপে অন্তর্ভুক্ত হয়, তাই ডেভেলপারকে সচেতনভাবে বেছে নিতে হবে Documents-এ কোন ডেটা রাখতে হবে। Caches Directory-এর বিপরীতে, Documents-এর ফাইলগুলি স্থানের অভাবে সিস্টেম দ্বারা মুছে ফেলা হয় না — আকার পরিচালনার দায়িত্ব অ্যাপের উপর বর্তায়।
মূল বিষয়
Documents Directory হলো iOS অ্যাপ স্যান্ডবক্সের ভিতরে একটি ডিরেক্টরি যা ব্যবহারকারীর ডেটা সংরক্ষণের জন্য ডিজাইন করা হয়েছে যা লঞ্চের মধ্যে স্থায়ী হওয়া উচিত এবং ব্যবহারকারীর কাছে অ্যাক্সেসযোগ্য হওয়া উচিত। প্রতিটি অ্যাপ তার নিজস্ব বিচ্ছিন্ন স্যান্ডবক্স পায় এবং Documents হল Caches, tmp এবং Library-এর পাশাপাশি মূল ডিরেক্টরিগুলির মধ্যে একটি।
iOS একটি কঠোর স্যান্ডবক্স ব্যবহার করে: একটি অ্যাপের বিশেষ অনুমতি ছাড়া অন্যান্য অ্যাপের ফাইল সিস্টেম বা সিস্টেম ডিরেক্টরিতে অ্যাক্সেস নেই। Documents Directory হল একমাত্র ডিরেক্টরি যার বিষয়বস্তু ব্যবহারকারী iTunes File Sharing-এর মাধ্যমে দেখতে পারেন (যখন Info.plist-এ UIFileSharingEnabled কী সক্রিয় থাকে)।
Apple WWDC 2023 অনুসারে, App Store-এ 85% এরও বেশি অ্যাপ ব্যবহারকারীর ডেটার অন্তত একটি প্রকার সংরক্ষণের জন্য Documents Directory ব্যবহার করে — রপ্তানি করা PDF থেকে শুরু করে সংরক্ষিত গেম ফাইল এবং রপ্তানি করা ছবি পর্যন্ত।
ডেভেলপারের জন্য বোঝা গুরুত্বপূর্ণ: Documents-এর ফাইলগুলি স্বয়ংক্রিয়ভাবে অন্তর্ভুক্ত হয় iCloud এবং iTunes ব্যাকআপে। যদি একটি অ্যাপ Documents-এ বড় পরিমাণে পুনরুদ্ধারযোগ্য ডেটা সংরক্ষণ করে (যেমন, ইমেজ ক্যাশে বা অস্থায়ী ফাইল), তাহলে এটি ব্যবহারকারীর iCloud স্টোরেজ স্থানের অপ্রয়োজনীয় ব্যবহারের দিকে নিয়ে যায়।
Swift-এ, Documents Directory-তে পাথ FileManager-এর মাধ্যমে পাওয়া যায়। Apple আধুনিক iOS ক্ষমতার সাথে আরও ভাল সামঞ্জস্যের জন্য স্ট্রিং-ভিত্তিক API-এর পরিবর্তে URL-ভিত্তিক API ব্যবহার করার পরামর্শ দেয়।
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
// Documents-এ ফাইল তৈরি করুন
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)
Objective-C NSSearchPathForDirectoriesInDomains ব্যবহার করে — একটি পুরানো কিন্তু এখনও সমর্থিত পদ্ধতি যা URL-এর পরিবর্তে একটি স্ট্রিং পাথ ফেরত দেয়।
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];
Swift-এ আধুনিক প্রকল্পগুলির FileManager.urls ব্যবহার করা উচিত, কারণ এই পদ্ধতি স্ট্রিং-এর পরিবর্তে URL ফেরত দেয়, যা পাথ এনকোডিং ত্রুটির ঝুঁকি হ্রাস করে এবং কোডকে আরও টাইপ-নিরাপদ করে তোলে।
Documents Directory ব্যবহারকারী দ্বারা তৈরি বা ব্যবহারকারীর জন্য স্পষ্টভাবে প্রয়োজনীয় ডেটার জন্য উদ্দিষ্ট। Apple এই ডিরেক্টরির জন্য উপযুক্ত বেশ কয়েকটি বিভাগ হাইলাইট করে।
ফাইল যা ব্যবহারকারী তৈরি বা আমদানি করে — টেক্সট ডকুমেন্ট, PDF, ছবি, রপ্তানি করা রিপোর্ট, ব্যাকআপ ফাইল। এই ডেটার ব্যবহারকারীর জন্য সরাসরি মূল্য রয়েছে এবং এর ক্ষতি গুরুতর হবে।
গেম সেভ, অ্যাপ অবস্থা ফাইল, রপ্তানি করা প্রকল্প — ব্যবহারকারী অ্যাপ পুনরায় ইনস্টল করার পরে পুনরুদ্ধার করার আশা করে। তবে, গুরুত্বপূর্ণ ডেটার জন্য iCloud Key-Value Storage বা iCloud সিঙ্ক সহ Core Data অতিরিক্ত ব্যবহার করার পরামর্শ দেওয়া হয়।
| ডেটার ধরন | Documents-এর জন্য উপযুক্ত | বিকল্প |
|---|---|---|
| PDF এবং টেক্সট ডকুমেন্ট | হ্যাঁ | — |
| ইমেজ ক্যাশে | না | Caches Directory |
| গেম সেভ | হ্যাঁ | iCloud KVS |
| লগ এবং ডিবাগ ডেটা | না | Caches বা tmp |
| রপ্তানি করা রিপোর্ট | হ্যাঁ | — |
মূল মানদণ্ড: যদি ডেটা নেটওয়ার্ক থেকে পুনরায় ডাউনলোড করা বা পুনরায় তৈরি করা যায় — তবে এটি Caches-এ থাকা উচিত, Documents-এ নয়। Documents-এ প্রতিটি গিগাবাইট ব্যবহারকারীর iCloud ব্যাকআপে একটি গিগাবাইট।
iOS স্বয়ংক্রিয়ভাবে Documents Directory-র বিষয়বস্তু ব্যাকআপে অন্তর্ভুক্ত করে যখন ডিভাইস iTunes-এর সাথে সংযুক্ত হয় বা iCloud-এর সাথে সিঙ্ক করে। এই আচরণ ডিরেক্টরি স্তরে নিষ্ক্রিয় করা যায় না — শুধুমাত্র ফাইল প্রতি NSURLIsExcludedFromBackupKey অ্যাট্রিবিউটের মাধ্যমে।
iOS 5.0 থেকে শুরু করে, Apple Documents-এ বড় পরিমাণে পুনরুদ্ধারযোগ্য ডেটা সংরক্ষণ করে এমন অ্যাপগুলি প্রত্যাখ্যান করা শুরু করে। Apple-এর পরামর্শ: যে ফাইলগুলি পুনরায় ডাউনলোড করা যাবে, সেগুলি ব্যাকআপ বর্জন ফ্ল্যাগ সহ Caches Directory-তে সংরক্ষণ করা উচিত।
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
// ফাইলটিকে iCloud ব্যাকআপ থেকে বাদ দিন
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)
iCloud সিঙ্ক্রোনাইজেশন NSUbiquitousContainer-এর মাধ্যমে কাজ করে যদি অ্যাপ iCloud Documents ব্যবহার করে। এই ক্ষেত্রে, Documents Directory-র ফাইলগুলি স্বয়ংক্রিয়ভাবে ব্যবহারকারীর ডিভাইসগুলির মধ্যে সিঙ্ক হয়। iCloud ছাড়া অ্যাপগুলির জন্য, সিঙ্ক্রোনাইজেশন ব্যাকআপের মধ্যে সীমাবদ্ধ।
Documents এবং Caches-এর মধ্যে পার্থক্য হল শিক্ষানবিস iOS ডেভেলপারদের মধ্যে সবচেয়ে সাধারণ ভুল ধারণাগুলির মধ্যে একটি। প্রধান পার্থক্য: সিস্টেম স্থান খালি করার জন্য যেকোনো সময় Caches থেকে ফাইল মুছে ফেলতে পারে, কিন্তু ব্যবহারকারীর জানা ছাড়া Documents কখনও স্পর্শ করে না।
| বৈশিষ্ট্য | Documents Directory | Caches Directory |
|---|---|---|
| iCloud ব্যাকআপ | হ্যাঁ (ডিফল্টভাবে) | না |
| সিস্টেম দ্বারা মুছে ফেলা | কখনও না | স্থানের অভাবে |
| iTunes File Sharing | হ্যাঁ (ফ্ল্যাগ সক্রিয় থাকলে) | না |
| উদ্দেশ্য | ব্যবহারকারীর ডেটা | ক্যাশে, অস্থায়ী ডেটা |
| ডেটা পুনরুদ্ধার | পুনরুদ্ধার প্রয়োজন | পুনরায় ডাউনলোড করা যাবে |
Apple Developer Documentation (2024) অনুসারে, Documents Directory-র অনুপযুক্ত ব্যবহার পর্যালোচনার সময় অ্যাপ প্রত্যাখ্যানের সাধারণ কারণগুলির মধ্যে একটি: যদি একটি অ্যাপ Documents-এ কয়েক মেগাবাইটের বেশি পুনরুদ্ধারযোগ্য ডেটা সংরক্ষণ করে, Apple এটি Caches-এ স্থানান্তর বা NSURLIsExcludedFromBackupKey প্রয়োগ করার পরামর্শ দেয়।
একটি ব্যবহারিক নিয়ম: যদি ব্যবহারকারী ফাইল হারিয়ে বিরক্ত হবেন — এটি Documents-এ সংরক্ষণ করুন। যদি ফাইলটি পুনরায় ডাউনলোড বা পুনরায় তৈরি করা যায় — এটি Caches-এ সংরক্ষণ করুন।
অভিজ্ঞ iOS ডেভেলপাররা বেশ কয়েকটি নিয়ম তৈরি করেছেন যা অ্যাপ জীবনচক্রের সমস্ত পর্যায়ে Documents Directory-র সাথে সমস্যা এড়াতে সাহায্য করে — উন্নয়ন থেকে App Store প্রকাশনা পর্যন্ত।
নিয়মিত FileManager.enumerator(at:includingPropertiesForKeys:) এর মাধ্যমে Documents Directory-র আকার পরীক্ষা করুন। যদি অ-ব্যবহারকারী ডেটার জন্য আকার 100 MB ছাড়িয়ে যায় — তবে এটি স্টোরেজ আর্কিটেকচার পুনর্বিবেচনার একটি কারণ।
যে কোনো ফাইলের জন্য যা পুনরায় ডাউনলোড করা যায়, isExcludedFromBackup = true সেট করুন। এটি ব্যবহারকারীর iCloud স্টোরেজের উপর ভার কমায় এবং App Review প্রত্যাখ্যানের ঝুঁকি হ্রাস করে।
Documents-এ ডেটা ফর্ম্যাট পরিবর্তন করার সময়, মাইগ্রেশনের পরিকল্পনা করুন: পুরানো ফাইলগুলি মুছবেন না যতক্ষণ না আপনি নিশ্চিত হন যে নতুন ফাইলগুলি সঠিকভাবে তৈরি করা হয়েছে। সংস্করণ-নির্দিষ্ট সাবডিরেক্টরি ব্যবহার করুন।
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
at: versionDir,
withIntermediateDirectories: true
)
এই অনুশীলনগুলি অনুসরণ করলে ব্যবহারকারীর ডেটা হারানোর ঝুঁকি হ্রাস পায়, iCloud ব্যাকআপ আকার কমে এবং App Store পর্যালোচনা সহজ হয়।
সচরাচর জিজ্ঞাস্য
হ্যাঁ, Files-এর মাধ্যমে — iOS 11 থেকে শুরু করে বিল্ট-ইন iOS অ্যাপ। যখন Info.plist-এ UIFileSharingEnabled কী সক্রিয় থাকে, তখন Documents Directory-র বিষয়বস্তু ফাইল অ্যাপে "আমার iPhone-এ" বিভাগে প্রদর্শিত হয়। ব্যবহারকারী ফাইলগুলি দেখতে, অনুলিপি করতে এবং মুছতে পারে।
অ্যাপের সম্পূর্ণ স্যান্ডবক্স, Documents Directory, Caches, tmp এবং Library সহ, ডিভাইস থেকে সম্পূর্ণরূপে মুছে যায়। iCloud-এ ব্যাকআপ পুনরুদ্ধার বা ম্যানুয়াল মুছে ফেলা পর্যন্ত সংরক্ষিত থাকে। পুনরায় ইনস্টল করার পরে, অ্যাপ একটি পরিষ্কার স্যান্ডবক্স দিয়ে শুরু করে।
ডিরেক্টরির সমস্ত ফাইল অতিক্রম করতে এবং তাদের আকার যোগ করতে FileManager.enumerator ব্যবহার করুন। প্রতিটি ফাইলের জন্য, resourceValues(forKeys:) এর মাধ্যমে .fileSize অ্যাট্রিবিউট পান। বিকল্পভাবে, URLResourceKey.fileSizeKey এবং .directoryEnumerationResults ব্যবহার করুন।
ডিফল্টভাবে, Core Data SQLite ফাইল Library/Application Support-এ তৈরি করে, Documents-এ নয়। ডেটাবেস Documents-এ সরানোর পরামর্শ দেওয়া হয় না — এটি iTunes File Sharing-এ অন্তর্ভুক্ত হবে এবং ব্যবহারকারী দুর্ঘটনাক্রমে এটি মুছে বা পরিবর্তন করতে পারে। ব্যতিক্রম হল যদি অ্যাপ স্পষ্টভাবে ব্যবহারকারীকে Core Data-এর মাধ্যমে ডেটা অ্যাক্সেস দেয়।
UIFileSharingEnabled (Application supports iTunes file sharing) Info.plist-এ একটি বুলিয়ান কী। YES-এ সেট করলে, ব্যবহারকারীরা iTunes এবং Files-এর মাধ্যমে Documents Directory থেকে ফাইল কপি করতে পারে। Info.plist-এ কী যোগ করুন: UIFileSharingEnabled = YES। এটি কেবল তখনই সক্রিয় করুন যদি অ্যাপ সত্যিই ব্যবহারকারীর নথি তৈরি করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন