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 کا مواد فائلز ایپ میں "میرے آئی فون پر" سیکشن میں ظاہر ہوتا ہے۔ صارف فائلوں کو دیکھ، کاپی اور حذف کر سکتا ہے۔
ایپ کا پورا سینڈ باکس، بشمول 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 ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں