FileManager Foundation فریم ورک کی ایک کلاس ہے جو iOS، macOS اور دیگر Apple پلیٹ فارمز پر فائل سسٹم کے ساتھ کام کرنے کے لیے انٹرفیس فراہم کرتی ہے۔ یہ فائلوں اور ڈائریکٹریز کو بنانے، پڑھنے، منتقل کرنے اور حذف کرنے کے ساتھ ساتھ میٹا ڈیٹا اور رسائی کی اجازتوں کو منظم کرنے کی اجازت دیتی ہے۔ iOS میں، تمام FileManager آپریشنز ایپ Sandbox تک محدود ہیں۔ Apple ڈویلپر دستاویزات (2026) کے مطابق، FileManager تھریڈ سیف ہے اور بیک گراؤنڈ تھریڈز سے استعمال کیا جا سکتا ہے، لیکن تمام فائل سسٹم آپریشنز سینڈ باکس اور Security-Scoped Bookmarks رسائی کی اجازتوں کو مدنظر رکھتے ہوئے انجام دینے چاہئیں۔
اہم نکات
FileManager Foundation فریم ورک کی ایک سنگلٹن کلاس ہے جو تمام Apple پلیٹ فارمز پر فائل سسٹم کے ساتھ تعامل کے لیے ایک متحد API فراہم کرتی ہے۔ یہ FileManager.default کے ذریعے یا حسب ضرورت ڈیلیگیٹ کے ساتھ ایک انسٹنس بنا کر دستیاب ہے۔
کلاس کی اہم صلاحیتوں میں شامل ہیں: فائل کے وجود کی جانچ (fileExists)، ڈائریکٹریز بنانا (createDirectory)، کاپی اور منتقل کرنا (copyItem، moveItem)، حذف کرنا (removeItem)، خصوصیات حاصل کرنا (attributesOfItem) اور ڈائریکٹری کے مواد (contentsOfDirectory)۔ FileManager ڈیٹا سیریلائزیشن کے لیے NSData، String اور JSONEncoder/Decoder سے قریبی تعلق رکھتا ہے۔
FileManager تھریڈ سیف ہے: Apple مختلف تھریڈز سے محفوظ میتھڈ کالز کی ضمانت دیتا ہے۔ تاہم، فائل سسٹم آپریشنز بڑی فائلوں پر سست ہو سکتے ہیں، اس لیے Apple انہیں بیک گراؤنڈ قطار (DispatchQueue.global) پر انجام دینے اور پیشرفت رپورٹ کرنے کے لیے FileManagerDelegate میتھڈز کو کال کرنے کی سفارش کرتا ہے۔
let fileManager = FileManager.default
let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first!
let fileURL = documentsURL.appendingPathComponent("data.plist")
if fileManager.fileExists(atPath: fileURL.path) {
print("File exists at \(fileURL.path)")
}
ہر iOS ایپ میں Sandbox کے اندر FileManager کے ذریعے قابل رسائی تین مرکزی ڈائریکٹریز ہوتی ہیں: Documents، Library اور tmp۔ ہر ایک کا اپنا مقصد اور بیک اپ اصول ہیں جو App Store کے جائزے کو پاس کرنے کے لیے پیروی کرنا ضروری ہے۔
Documents — صارف کے ڈیٹا کے لیے جو لانچ کے درمیان برقرار رہنا چاہیے اور iCloud میں بیک اپ ہونا چاہیے۔ Library — ایپ فائلوں کے لیے: کیشز (Caches)، سیٹنگز (Preferences)، ڈیٹا بیس (Application Support)۔ tmp — عارضی فائلوں کے لیے جو سسٹم ایپ لانچ کے درمیان کسی بھی وقت حذف کر سکتا ہے۔
| ڈائریکٹری | FileManager URL | بیک اپ | استعمال |
|---|---|---|---|
| Documents | .documentDirectory | ہاں | صارف کا ڈیٹا، فائلیں، ایکسپورٹ |
| Library/Caches | .cachesDirectory | نہیں | تصویری کیشز، عارضی ڈیٹا |
| Library/Preferences | .libraryDirectory + "Preferences" | ہاں | UserDefaults، ایپ سیٹنگز |
| Library/Application Support | .applicationSupportDirectory | ہاں | ڈیٹا بیس، CoreData، Realm |
| tmp | .tmpDirectory (NSTemporaryDirectory) | نہیں | عارضی سیشن فائلیں |
Apple کا اصول: اگر فائل انٹرنیٹ سے بازیافت یا دوبارہ بنائی جا سکتی ہے — اسے Caches میں ذخیرہ کیا جانا چاہیے (بغیر بیک اپ کے)۔ اگر فائل میں صارف کا ڈیٹا ہے — Documents (بیک اپ کے ساتھ)۔ غلط فائل کی جگہ کا تعین ایپ مسترد ہونے کی عام وجوہات میں سے ایک ہے، کیونکہ Apple Storage اور iCloud Backup Guidelines کی تعمیل چیک کرتا ہے۔
FileManager خود فائل کے مواد کو پڑھنے کے طریقے فراہم نہیں کرتا — اس کے لیے NSData(contentsOf)، String(contentsOf) یا FileHandle میتھڈز استعمال کریں۔ FileManager فائلوں کے انتظام کے لیے ذمہ دار ہے: وجود کی جانچ، منتقلی، کاپی، حذف۔
ڈیٹا لکھنے کے لیے createFile(atPath:contents:attributes:) میتھڈ یا اعلیٰ سطحی API — data.write(to:)، JSONEncoder.encode اور PropertyListEncoder استعمال کریں۔ FileManager بڑی فائلوں کے سٹریمنگ پڑھنے اور لکھنے کے لیے FileHandle بھی فراہم کرتا ہے، جو پوری فائل کو میموری میں لوڈ نہیں کرتا۔
struct UserSettings: Codable {
let username: String
let isDarkMode: Bool
let fontSize: Int
}
let settings = UserSettings(
username: "developer",
isDarkMode: true,
fontSize: 16
)
// Documents میں JSON لکھیں
let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted
let data = try encoder.encode(settings)
let url = documentsURL.appendingPathComponent("settings.json")
try data.write(to: url, options: .atomic)
// JSON پڑھیں
let loadedData = try Data(contentsOf: url)
let loadedSettings = try JSONDecoder()
.decode(UserSettings.self, from: loadedData)
لکھتے وقت، options: .atomic استعمال کریں — یہ یقینی بناتا ہے کہ لکھنے میں ناکامی پر فائل خراب نہیں ہوگی: ڈیٹا پہلے ایک عارضی فائل میں محفوظ کیا جاتا ہے، پھر جوہری طور پر ہدف کے راستے پر منتقل کیا جاتا ہے۔ بڑی فائلوں کو پڑھنے کے لیے، .readingMode کے ساتھ FileHandle استعمال کریں اور میموری کی کھپت کو کنٹرول کرتے ہوئے ڈیٹا کو ٹکڑوں میں پڑھیں۔
FileManager مکمل ڈائریکٹری مینجمنٹ کے لیے طریقے فراہم کرتا ہے: createDirectory (withIntermediateDirectories کے ذریعے تمام درمیانی فولڈرز بنانا)، contentsOfDirectory (فائل کی فہرست حاصل کرنا)، enumeratorAt (تکراری گشت) اور subpathsOfDirectory (ڈائریکٹری کے اندر تمام راستے)۔
enumeratorAt میتھڈ ایک DirectoryEnumerator لوٹاتا ہے، جو تمام مواد کو میموری میں لوڈ کیے بغیر بڑی ڈائریکٹریز کو مؤثر طریقے سے گشت کرنے کی اجازت دیتا ہے۔ یہ skipDescendants کے ذریعے فلٹرنگ کو سپورٹ کرتا ہے اور اضافی فائل سسٹم استفسار کے بغیر ہر آئٹم کی خصوصیات فراہم کرتا ہے۔
// تکراری ڈائریکٹری گشت
if let enumerator = fileManager.enumerator(
at: documentsURL,
includingPropertiesForKeys: [.fileSizeKey, .isDirectoryKey]
) {
for case let fileURL as URL in enumerator {
let attrs = try fileURL.resourceValues(
for: [.fileSizeKey, .isDirectoryKey]
)
if attrs.isDirectory == false {
let size = attrs.fileSize ?? 0
print("File: \(fileURL.lastPathComponent), Size: \(size) bytes")
}
}
}
ڈائریکٹری کو حذف کرنے کے لیے removeItem(at:) استعمال کریں۔ انتباہ: iOS میں ڈائریکٹری کو حذف کرنا ناقابل واپسی ہے — فائلیں macOS کی طرح ردی کی ٹوکری میں نہیں جاتیں۔ حذف کرنے سے پہلے، یقینی بنائیں کہ آپ کو اس ڈائریکٹری کی فائلوں کی مزید ضرورت نہیں ہے، اور آپریشن کو بیک گراؤنڈ تھریڈ پر انجام دیں، کیونکہ بہت سی فائلوں کو حذف کرنا یوزر انٹرفیس کو روک سکتا ہے۔
FileManager URLForUbiquityContainerIdentifier میتھڈ کے ذریعے iCloud Drive کے ساتھ ضم ہوتا ہے، جو ایپ کے لیے iCloud ڈائریکٹری کا URL لوٹاتا ہے۔ اس کے لیے پروجیکٹ میں iCloud کی صلاحیت کو فعال کرنا اور مناسب entitlement شامل کرنا ضروری ہے۔
iCloud فائلیں خود بخود مطابقت پذیر ہوتی ہیں، لیکن FileManager دستی کنٹرول کے لیے طریقے فراہم کرتا ہے: startDownloadingUbiquitousItem ڈاؤن لوڈ پر مجبور کرتا ہے، evictUbiquitousItem مقامی کاپی ہٹاتا ہے، اور urlOfItem(at:) iCloud فائل کے لیے مقامی URL لوٹاتا ہے۔ NSMetadataQuery iCloud میں فائلوں کی تلاش کے لیے استعمال ہوتا ہے۔
اہم حد: iCloud Drive Documents ڈائریکٹری میں فائلوں کے لیے تعاون یافتہ نہیں ہے — صرف ubiquityContainer میں فائلوں کے لیے۔ Documents کو iCloud کے ذریعے مطابقت پذیر کرنے کی کوشش نہ کریں؛ اس کے لیے چھوٹے ڈیٹا کے لیے NSUbiquitousKeyValueStore یا پیچیدہ ڈھانچے کے لیے CloudKit کے ساتھ Core Data استعمال کریں۔
FileManager آپریشنز مہنگے ہو سکتے ہیں، خاص طور پر سست فلیش میموری والے آلات پر۔ Apple کی اہم سفارشات میں تمام فائل آپریشنز کو بیک گراؤنڈ قطاروں میں انجام دینا، fileExistsAtPath کالز کی تعداد کو کم کرنا اور نتائج کو کیش کرنا شامل ہیں۔
fileExists میتھڈ ایک stat() سسٹم کال کرتا ہے، جو نسبتاً سست ہے۔ اگر آپ پڑھنے سے پہلے فائل کے وجود کی جانچ کرتے ہیں، تو براہ راست اسے پڑھنے کی کوشش کرنا اور غلطی کو ہینڈل کرنا بہتر ہے — یہ وہی stat کرتا ہے لیکن دوہری سسٹم کال سے بچاتا ہے۔ بلک جانچ کے لیے، resourceValues کے ساتھ enumeratorAt استعمال کریں۔
بڑے ڈیٹا والیوم کے ساتھ کام کو بہتر بنانے کے لیے:
Apple Instruments فائل آپریشنز کی پروفائلنگ کے لیے File Activity ٹیمپلیٹ فراہم کرتا ہے۔ اسے رکاوٹوں کی نشاندہی کرنے کے لیے استعمال کریں — مثال کے طور پر، لوپ میں بار بار fileExists کالز یا مین تھریڈ پر لکھنے کے آپریشنز۔ سب سے عام کارکردگی کے مسائل کا تعلق ایپ معطل ہونے پر بڑی فائلوں کے مطابقت پذیر لکھنے سے ہے۔
اکثر پوچھے گئے سوالات
FileManager Apple فائل سسٹم کے ساتھ کام کرنے کے لیے Foundation فریم ورک کی ایک کلاس ہے۔ یہ فائلوں اور ڈائریکٹریز کو بنانے، پڑھنے، منتقل کرنے اور حذف کرنے کے لیے API فراہم کرتی ہے۔ iOS میں، اس کا کام Security-Scoped Bookmarks کے علاوہ ایپ Sandbox تک محدود ہے۔
Documents — iCloud بیک اپ کے ساتھ صارف ڈیٹا۔ Library/Caches — بغیر بیک اپ کے کیشز۔ Library/Application Support — ڈیٹا بیس۔ tmp — عارضی فائلیں۔ App Group Container — ایک ہی گروپ کی ایپس کے درمیان مشترکہ ڈیٹا کے لیے۔
FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first کو کال کریں۔ یہ میتھڈ موجودہ ایپ کے Sandbox کے اندر Documents ڈائریکٹری کے مکمل راستے کے ساتھ URL لوٹاتا ہے۔ وجود کی جانچ کے لیے fileExists(atPath:) استعمال کریں۔
نہیں، iOS Sandbox دوسری ایپلیکیشنز کے فائل سسٹم تک رسائی کو روکتا ہے۔ مستثنیات: App Groups (ایک ہی ڈویلپر کی ایپس کے لیے مشترکہ ڈائریکٹری) اور Security-Scoped Bookmarks (UIDocumentPicker اور iCloud Drive کے ذریعے فائل تک رسائی)۔
لکھتے وقت .atomic آپشن استعمال کریں — ڈیٹا پہلے ایک عارضی فائل میں محفوظ کیا جاتا ہے، پھر جوہری طور پر ہدف کے راستے پر منتقل کیا جاتا ہے۔ یہ لکھنے میں ناکامی پر فائل کی خرابی کو روکتا ہے۔ بڑے ڈیٹا کے لیے، 1-2 MB کے ٹکڑوں میں لکھنے کے ساتھ FileHandle استعمال کریں۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔
مزید پڑھیں