ایپلیکیشن دستاویزات ڈائرکٹری صارف کی فائلوں کا مستقل ذخیرہ ہے جو سیشنز کے درمیان محفوظ رہنی چاہییں اور بیک اپ سے بحال کی جا سکیں۔ Apple File System Programming Guide, 2026 کے مطابق، iOS پر Documents ڈائرکٹری خود بخود iCloud بیک اپ میں شامل ہو جاتی ہے، کیش اور عارضی ڈائرکٹریوں کے برعکس۔ دستاویزات ڈائرکٹری کا صحیح استعمال یقینی بناتا ہے کہ ایپ اپ ڈیٹ یا دوبارہ انسٹالیشن کے دوران صارف کی فائلیں ضائع نہ ہوں۔
اہم نکات
context.filesDir دستی بیک اپ انتظام کے ساتھدستاویزات ڈائرکٹری ایپلیکیشن سینڈ باکس کے اندر ایک خصوصی ذخیرہ ہے، جو صارف کی فائلوں کے مستقل ذخیرہ کے لیے ڈیزائن کیا گیا ہے۔ کیش کے برعکس، اس ڈائرکٹری میں فائلیں صارف کے لیے اہم سمجھی جاتی ہیں: جگہ کم ہونے پر سسٹم انہیں حذف نہیں کرتا، ایپ اپ ڈیٹس کے دوران محفوظ رہتی ہیں اور ڈیوائس سنکرونائزیشن کے دوران بیک اپ ہوتی ہیں۔ iOS پر، Documents ڈائرکٹری Sandbox کنٹینر کا حصہ ہے اور خود بخود iCloud بیک اپ میں شامل ہو جاتی ہے۔ Android پر، کوئی براہ راست مساوی نہیں ہے — مساوی ہے context.filesDir، جو مستقل فائلوں کے لیے بھی ہے لیکن اس میں کوئی بلٹ ان بیک اپ میکانزم نہیں ہے۔
Android پر دستاویزات ڈائرکٹری اور اندرونی اسٹوریج کے درمیان فرق کم سے کم ہے: دونوں ایپ سینڈ باکس میں واقع ہیں، دونوں ان انسٹال کرنے پر حذف ہو جاتے ہیں، دونوں دوسری ایپس کے لیے ناقابل رسائی ہیں۔ بنیادی فرق معنوی ہے: Documents Directory فرض کرتی ہے کہ فائلیں صارف کے ذریعے بنائی یا درآمد کی گئی ہیں، جبکہ اندرونی اسٹوریج میں ایپ کی اندرونی فائلیں (ڈیٹا بیس، کنفیگریشنز) ہو سکتی ہیں۔ iOS پر، فرق زیادہ اہم ہے: Documents خود بخود بیک اپ ہوتا ہے، جبکہ Library/Application Support نہیں ہوتا۔ یہ اسٹوریج کی حکمت عملی کو متاثر کرتا ہے: Documents میں صرف وہی رکھیں جو صارف نئے ڈیوائس پر بحال کرنا چاہے گا، اور Application Support میں وہ اندرونی ڈیٹا رکھیں جسے ایپ دوبارہ بنا سکتی ہے۔
سینڈ باکس فن تعمیر یقینی بناتا ہے کہ دوسری ایپلیکیشنز آپ کی ایپ کی دستاویزات ڈائرکٹری تک رسائی حاصل نہیں کر سکتیں۔ iOS پر، جیل بریک کے بغیر دوسری ایپس کے Documents تک رسائی ناممکن ہے۔ Android پر، روٹ رسائی کسی بھی ایپ کے filesDir کو پڑھنے کی اجازت دیتی ہے، لہٰذا حساس ڈیٹا (ٹوکنز، خفیہ کاری کی کنجیاں) کو EncryptedSharedPreferences یا AndroidX Security لائبریری سے EncryptedFile استعمال کرکے اضافی طور پر محفوظ کیا جانا چاہیے۔
دستاویزات ڈائرکٹری میں ڈیٹا ذخیرہ کیا جانا چاہیے جو صارف کے لیے قیمتی ہو اور ایپ دوبارہ شروع کرنے یا ڈیوائس بحال کرنے کے بعد قابل رسائی ہو۔ تمام فائلیں اس ڈائرکٹری میں ذخیرہ کرنے کے لیے موزوں نہیں ہیں — انتخاب ڈیٹا کی قسم اور استعمال کے منظر نامے پر منحصر ہے۔
صارف کی فائلیں دستاویزات ڈائرکٹری کا بنیادی مواد ہیں۔ یہ کسی ایڈیٹر میں بنائے گئے ٹیکسٹ دستاویزات، ایپ کیمرے سے لی گئی تصاویر، برآمد کردہ PDF رپورٹس، آڈیو ریکارڈنگز، نوٹس ہو سکتی ہیں۔ ایسی ہر فائل صارف کے ذریعے یا اس کی درخواست پر بنائی گئی ہے اور کسی بھی وقت قابل رسائی ہونی چاہیے۔ iOS پر، Documents کی فائلیں سسٹم Files ایپ میں ظاہر ہوتی ہیں، جس سے صارف معیاری فائل مینیجر کے ذریعے ان کا انتظام کر سکتا ہے۔ Android پر، کوئی مماثل ڈسپلے نہیں ہے — ایپ کو خود محفوظ کردہ فائلوں کو دیکھنے کے لیے ایک انٹرفیس فراہم کرنا چاہیے۔
SQLite ڈیٹا بیس اور ترتیبات کی فائلیں عام طور پر دستاویزات ڈائرکٹری کے قریب ذخیرہ کی جاتی ہیں لیکن اس کے اندر نہیں۔ iOS پر، ڈیٹا بیس Library/Application Support میں رکھے جاتے ہیں، کیونکہ انہیں Files ایپ میں ظاہر نہیں ہونا چاہیے اور علیحدہ سے بیک اپ نہیں ہونا چاہیے۔ Android پر، ڈیٹا بیس ڈیفالٹ طور پر /data/data/<package>/databases/ میں Room یا SQLiteOpenHelper کے ذریعے بنائے جاتے ہیں۔ اگر ڈیٹا بیس میں صارف کا مواد (نوٹس، ڈائری، مالی ریکارڈ) ہو تو اسے سسٹم بیک اپ یقینی بنانے کے لیے filesDir میں رکھا جا سکتا ہے۔ Room آپ کو RoomDatabase.Builder کال بیک کے ذریعے ڈیٹا بیس اسٹوریج کے لیے ایک کسٹم ڈائرکٹری متعین کرنے کی اجازت دیتا ہے۔
val dbFile = File(context.filesDir, "user_database.db")
val db = Room.databaseBuilder<AppDatabase>(
context,
dbFile.absolutePath
).build()
وہ فائلیں جو صارف دوسری ایپس سے درآمد کرتا ہے یا آپ کی ایپ سے برآمد کرتا ہے، انہیں بھی دستاویزات ڈائرکٹری میں محفوظ کیا جانا چاہیے۔ iOS پر، UIDocumentPickerViewController کے ذریعے درآمد asCopy: true پیرامیٹر استعمال کرنے پر خود بخود فائل کی ایک کاپی Documents میں رکھ دیتی ہے۔ Android پر، SAF ڈائیلاگ کے ذریعے درآمد بھی ایپ سینڈ باکس میں فائل کی ایک کاپی بناتی ہے۔ ڈیٹا برآمد کرتے وقت (مثال کے طور پر، رابطوں کے ساتھ CSV فائل بنانا)، پہلے فائل کو Documents/filesDir میں محفوظ کریں، پھر صارف کو Share Sheet کے ذریعے اسے شیئر کرنے کا اختیار دیں۔ یہ یقینی بناتا ہے کہ بھیجے جانے کے بعد صارف فائل کو محفوظ کرنا بھول جائے تو بھی بعد میں استعمال کے لیے ایپ میں ایک کاپی رہ جاتی ہے۔
Android پر، دستاویزات ڈائرکٹری کا کام context.filesDir انجام دیتا ہے۔ مزید برآں، SD کارڈ پر context.externalFilesDir ڈائرکٹری دستیاب ہے، لیکن یہ ڈیٹا کی سالمیت کی ضمانت نہیں دیتی۔ آئیے ان ڈائرکٹریوں کے ساتھ کام کرنے کی اہم تکنیکوں کا جائزہ لیں۔
filesDir Android پر ایپ کی مستقل فائلوں کے لیے بنیادی ڈائرکٹری ہے۔ یہ ایپ سینڈ باکس میں واقع ہے اور ان انسٹال کرنے پر مکمل طور پر حذف ہو جاتی ہے۔ File انسٹینس حاصل کرنے کے لیے، context.filesDir استعمال کریں، جو /data/data/<package>/files/ کا راستہ لوٹاتا ہے۔ فائلیں بنانے اور پڑھنے کے لیے، معیاری Java/Kotlin File آپریشنز یا Context کے طریقے openFileInput() اور openFileOutput() استعمال کریں، جو فائل کا نام لیتے ہیں اور FileInputStream/FileOutputStream لوٹاتے ہیں۔ openFileOutput() طریقہ خود بخود filesDir میں فائل بنا دیتا ہے اگر وہ ابھی موجود نہ ہو اور رسائی کا موڈ متعین کرنے کی اجازت دیتا ہے: MODE_PRIVATE (صرف موجودہ ایپ)، MODE_APPEND (اضافہ)، یا MODE_WORLD_READABLE (متروک، API 24+ سے استعمال نہیں ہوتا)۔
val fileName = "report.pdf"
val content = "PDF content".toByteArray()
context.openFileOutput(fileName, Context.MODE_PRIVATE).use { stream ->
stream.write(content)
}
val bytes = context.openFileInput(fileName).use { stream ->
stream.readBytes()
}
Android 10+ پر، Scoped Storage ماڈل filesDir کو متاثر نہیں کرتا — ایپ کے اپنے سینڈ باکس تک مکمل رسائی برقرار رہتی ہے۔ filesDir کے اندر تمام پڑھنے اور لکھنے کے آپریشنز کے لیے اضافی اجازتوں کی ضرورت نہیں ہے۔ تاہم، اگر آپ filesDir کے ذریعے کسی دوسری ایپ کی فائلوں تک رسائی حاصل کرنے کی کوشش کرتے ہیں، تو آپ کو ایک استثناء ملے گا۔ فائلیں شیئر کرنے کے لیے، FileProvider استعمال کریں، جو فائل کو کسی دوسری ایپ میں منتقل کرنے کے لیے ایک عارضی مواد URI بناتا ہے۔ FileProvider AndroidManifest.xml میں <provider> ٹیگ کے ذریعے اعلان کیا جاتا ہے اور XML پاتھ فائل میں کنفیگر کیا جاتا ہے۔ یہ ایپس کے درمیان فائلیں منتقل کرنے کا معیاری میکانزم ہے، مثال کے طور پر ACTION_SEND کے ساتھ Intent کے ذریعے تصویر بھیجتے وقت استعمال ہوتا ہے۔
iOS پر، Documents Directory خصوصی حیثیت کے ساتھ ایپ کے Sandbox کنٹینر کا حصہ ہے۔ اس ڈائرکٹری کی فائلیں خود بخود iCloud بیک اپ میں شامل ہوتی ہیں، Files ایپ میں ظاہر ہوتی ہیں اور App Store کے ذریعے ایپ اپ ڈیٹس کے دوران محفوظ رہتی ہیں۔
Documents کا خودکار بیک اپ iOS کا ایک اہم فائدہ ہے۔ جب صارف ڈیوائس کو iTunes سے منسلک کرتا ہے یا iCloud Backup فعال کرتا ہے، تو Documents/ کی تمام فائلیں بیک اپ میں کاپی ہو جاتی ہیں۔ نئے ڈیوائس پر بحال کرتے وقت، صارف اضافی اقدامات کے بغیر اپنی تمام فائلیں حاصل کر لیتا ہے۔ تاہم، اگر ایپ Documents میں بڑی مقدار میں ڈیٹا ذخیرہ کرتی ہے تو یہ فائدہ نقصان بن جاتا ہے: بیک اپ کا وقت بڑھ جاتا ہے اور iCloud اسٹوریج جلدی ختم ہو سکتی ہے۔ لہٰذا، Documents میں صرف وہی فائلیں ذخیرہ کی جانی چاہئیں جن کی صارف کو بحالی کے دوران واقعی ضرورت ہو۔ عارضی فائلیں، کیش اور دوبارہ تخلیق کی جا سکنے والا ڈیٹا Caches یا Library/Application Support میں ہونا چاہیے۔ Apple isExcludedFromBackup وصف کے ذریعے انٹرنیٹ سے دوبارہ ڈاؤن لوڈ کی جا سکنے والی فائلوں کو بیک اپ سے خارج کرنے کی سفارش کرتا ہے۔
let fm = FileManager.default
let docsURL = fm.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let fileURL = docsURL.appendingPathComponent("notes.txt")
let text = "نوٹ کا مواد"
try text.write(to: fileURL, atomically: true, encoding: .utf8)
iCloud Drive صارف کے ڈیوائسز کے درمیان Documents کی فائلوں کو سنکرونائز کرنے کی اجازت دیتا ہے۔ سنکرونائزیشن فعال کرنے کے لیے، ایپ کو NSDocument یا UIDocument API استعمال کرنا چاہیے، جو خود بخود ورژننگ اور تنازعات کے حل کا انتظام کرتی ہیں۔ ایک متبادل طریقہ CloudKit کے ساتھ iCloud استعمال کرنا ہے، جو سنکرونائزیشن پر زیادہ لچکدار کنٹرول فراہم کرتا ہے لیکن CloudKit Dashboard پر کنفیگریشن کی ضرورت ہوتی ہے۔ iCloud Drive استعمال کرتے وقت، یقینی بنائیں کہ آپ ترمیم کے تنازعات کو صحیح طریقے سے ہینڈل کرتے ہیں (مرج یا لاسٹ رائٹ ونز) اور ایپ انٹرفیس کے ذریعے صارف کو سنکرونائزیشن کی حالت سے آگاہ کرتے ہیں۔ iCloud فوری سنکرونائزیشن کی ضمانت نہیں دیتا — فائل کے سائز اور کنکشن کے معیار کے لحاظ سے تاخیر چند سیکنڈ سے کئی منٹ تک ہو سکتی ہے۔ اہم ڈیٹا کے لیے، ٹرانزیکشنل رائٹنگ اور ورژننگ استعمال کریں تاکہ تنازع کی صورت میں فائل کے پچھلے ورژن کو بحال کیا جا سکے۔
صحیح انتخاب Documents Directory اور Cache Directory کے درمیان صارف کے ڈیٹا اسٹوریج کی بھروسے کا تعین کرتا ہے۔ انتخاب میں غلطی یا تو ڈیٹا کے نقصان (اگر اہم فائلیں کیش میں ذخیرہ ہوں) یا بیک اپ اوور فلو (اگر عارضی فائلیں Documents میں ذخیرہ ہوں) کا باعث بنتی ہے۔
| معیار | Documents Directory | Cache Directory |
|---|---|---|
| ڈیٹا سالمیت کی ضمانت | اعلیٰ — سسٹم کے ذریعے حذف نہیں ہوتا | کم — صاف کیا جا سکتا ہے |
| بیک اپ (iOS) | خود بخود iCloud میں | بیک اپ نہیں ہوتا |
| صارف کو نمائش (iOS) | Files ایپ میں | پوشیدہ |
| اپ ڈیٹ پر صفائی | صاف نہیں ہوتا | صاف کیا جا سکتا ہے |
| تجویز کردہ سائز | کوئی بھی، لیکن ترتیبات کے ذریعے کنٹرول | 100–200 MB تک |
| ڈیٹا کی قسم | صارف کی فائلیں | عارضی دوبارہ تخلیق پذیر ڈیٹا |
بہترین طریقہ کار دستاویزات ڈائرکٹری کے استعمال میں کئی اہم اصول شامل ہیں۔ پہلا، اس ڈائرکٹری سے فائلیں حذف کرنے سے پہلے ہمیشہ صارف کی تصدیق لیں۔ کیش کے برعکس، کسی دستاویز کو حذف کرنے سے صارف کے مواد کا ناقابل واپسی نقصان ہو سکتا ہے۔ دوسرا، فائل ورژننگ نافذ کریں: کسی موجودہ فائل کو اوور رائٹ کرتے وقت، _backup لاحقہ کے ساتھ پچھلا ورژن محفوظ کریں یا سنیپ شاٹ میکانزم استعمال کریں۔ تیسرا، صارف کو دستاویزات ڈائرکٹری سے فائلیں دیکھنے، نام تبدیل کرنے، حذف کرنے اور برآمد کرنے کے لیے ایک انٹرفیس فراہم کریں۔ iOS پر، Documents کی فائلیں خود بخود Files میں ظاہر ہوتی ہیں؛ Android پر، آپ کو اپنا فائل مینیجر نافذ کرنا ہوگا یا تیسرے فریق کی لائبریریاں استعمال کرنی ہوں گی۔
ایپ اپ ڈیٹس کے دوران ڈیٹا مائیگریشن پر خصوصی توجہ دیں۔ اگر نیا ورژن فائل اسٹوریج کا ڈھانچہ تبدیل کرتا ہے (مثال کے طور پر، ڈیٹا کو ایک ذیلی ڈائرکٹری سے دوسری میں منتقل کرتا ہے یا فائل فارمیٹ تبدیل کرتا ہے)، تو اپ ڈیٹ کے بعد پہلی لانچ میں ایک بار کی مائیگریشن نافذ کریں۔ ڈیٹا اسکیما کا ورژن نمبر SharedPreferences میں محفوظ کریں اور اگر وہ مماثل نہ ہوں تو مائیگریشن چلائیں۔ مائیگریشن مکمل ہونے سے پہلے پرانی فائلیں حذف نہ کریں — ناکامی کی صورت میں، صارف کو ڈیٹا نہیں کھونا چاہیے۔ اگر مائیگریشن میں فارمیٹ کی تبدیلی شامل ہے (مثال کے طور پر، JSON سے SQLite میں سوئچ کرنا)، تو اصل فائلوں کو مائیگریشن کی تاریخ کے ساتھ علیحدہ ڈائرکٹری میں بیک اپ کے طور پر محفوظ کریں۔ Apple Human Interface Guidelines کی سفارش کے مطابق، صارف کو اپ ڈیٹ کے بعد پہلے 30 دنوں کے اندر ایپ کی ترتیبات کے ذریعے تبدیلیاں واپس کرنے کے قابل ہونا چاہیے۔
اکثر پوچھے گئے سوالات
Documents Files ایپ میں ظاہر ہوتا ہے اور خود بخود iCloud میں بیک اپ ہوتا ہے۔ Application Support Files میں ظاہر نہیں ہوتا اور ڈیفالٹ طور پر بیک اپ نہیں ہوتا۔ ایپ کے اندرونی ڈیٹا کے لیے Application Support منتخب کریں جسے آپ کو صارف کو دکھانے کی ضرورت نہیں ہے۔
ہاں، اکاؤنٹ حذف کرتے وقت، صارف کو اس اکاؤنٹ سے وابستہ تمام مقامی فائلیں صاف کرنے کا اختیار دیں۔ “تمام مقامی ڈیٹا حذف کریں؟” پوچھنے والا ڈائیلاگ دکھائیں اور بتائیں کہ کون سی فائلیں متاثر ہوں گی۔ یہ GDPR کی ضرورت اور App Store اور Google Play کی پالیسیوں کی تعمیل ہے۔
iOS پر، بس ڈیوائس کو iCloud یا iTunes بیک اپ سے بحال کریں — Documents کی فائلیں خود بخود بحال ہو جاتی ہیں۔ Android پر، filesDir سے فائلوں کا بیک اپ لینے کے لیے Google Drive Backup API استعمال کریں یا کلاؤڈ سروس کے ذریعے برآمد نافذ کریں۔
iOS پر، صارف Files ایپ کے ذریعے فائلیں حذف کر سکتا ہے۔ Android پر، حذف کرنا صرف آپ کی ایپ کے انٹرفیس کے ذریعے ممکن ہے۔ حادثاتی ڈیٹا کے نقصان کو روکنے کے لیے حذف کرنے کے بعد 30 دنوں کے اندر بحالی کی صلاحیت کے ساتھ ایک دستاویز ردی کی ٹوکری نافذ کرنے کی سفارش کی جاتی ہے۔
کسی اضافی اقدام کی ضرورت نہیں — iOS اور Android App Store یا Google Play کے ذریعے اپ ڈیٹس کے دوران خود بخود دستاویزات ڈائرکٹری کو محفوظ رکھتے ہیں۔ تاہم، اسٹوریج کا ڈھانچہ تبدیل کرتے وقت، ترتیبات میں اسکیما ورژن نمبر چیک کرکے نئے ورژن کی پہلی لانچ میں ڈیٹا مائیگریشن نافذ کریں۔
خلاصہ
context.filesDir استعمال کرتا ہے — فائلیں اپ ڈیٹس کے دوران محفوظ رہتی ہیں لیکن کوئی بلٹ ان بیک اپ میکانزم نہیں ہےہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں