فائل سسٹم کے ساتھ کام کرنا کسی بھی موبائل ایپلیکیشن کی بنیاد ہے۔ ہر پلیٹ فارم اپنا رسائی ماڈل پیش کرتا ہے: iOS پر Sandbox ایپلیکیشنز کو علیحدہ کنٹینرز میں الگ کرتا ہے، جبکہ Android پر Scoped Storage مشترکہ اسٹوریج تک براہ راست رسائی کو محدود کرتا ہے۔ Google Developer Documentation (2026) کے مطابق، Android 10 کے ساتھ Scoped Storage کے تعارف نے ڈیٹا اسٹوریج آرکیٹیکچر کے مکمل جائزے کی ضرورت پیش کی۔ اس گائیڈ میں ہم دونوں پلیٹ فارمز کے لیے FileManager، MediaStore API، Storage Access Framework اور DocumentProvider کا احاطہ کریں گے۔
اہم نکات
موبائل ایپلیکیشنز میں فائل سسٹم APIs، حفاظتی قوانین اور رکاوٹوں کا ایک مجموعہ ہے جو iOS اور Android آلات پر ڈیٹا کے ذخیرہ اور رسائی کی وضاحت کرتا ہے۔ ڈیسک ٹاپ آپریٹنگ سسٹمز کے برعکس، موبائل پلیٹ فارمز ہر ایپلیکیشن کو الگ کرتے ہیں تاکہ صارف کے ڈیٹا کو دوسرے پروگراموں کے ذریعے غیر مجاز پڑھنے سے بچایا جا سکے۔
iOS Sandbox ماڈل استعمال کرتا ہے، جہاں ہر ایپ سخت حدوں والی اجازتوں کے ساتھ اپنے کنٹینر میں موجود ہوتی ہے۔ ورژن 10 سے پہلے، Android بیرونی اسٹوریج تک مکمل رسائی فراہم کرتا تھا، لیکن Scoped Storage کے تعارف کے ساتھ، طریقہ iOS کے قریب آ گیا۔ اہم فرق یہ ہے کہ iOS فائل سسٹم کو مکمل طور پر الگ کرتا ہے، جبکہ Android رسائی کی کئی سطحیں پیش کرتا ہے: ایک نجی ڈائرکٹری، عوامی MediaStore اور SAF کے ذریعے عارضی رسائی۔
موبائل ایپلیکیشنز ڈیٹا اسٹوریج کی تین اقسام استعمال کرتی ہیں۔ نجی اسٹوریج — اندرونی فائلوں اور کیشے کے لیے صرف ایپ کے قابل رسائی ڈائرکٹری۔ مشترکہ اسٹوریج — MediaStore (Android) یا Files App (iOS) کے ذریعے میڈیا فائلیں۔ کلاؤڈ اسٹوریج — آلات کے درمیان مطابقت پذیری کے لیے iCloud Drive اور Google Drive۔ ہر قسم کے سائز، فائل کی زندگی اور رسائی کی شرائط پر اپنی حدود ہیں۔
| اسٹوریج کی قسم | iOS | Android |
|---|---|---|
| نجی | Documents, Library, Caches | getFilesDir(), getCacheDir() |
| مشترکہ میڈیا | PHPhotoLibrary چنندہ کے ذریعے | MediaStore API (ContentResolver) |
| مشترکہ دستاویزات | UIDocumentPicker کے ذریعے Files App | Storage Access Framework (SAF) |
| کلاؤڈ | iCloud Drive (UIDocument) | Google Drive API |
| کیشے | Caches ڈائرکٹری، نظام صاف کرتا ہے | getCacheDir(), getExternalCacheDir() |
Sandbox iOS کا حفاظتی آرکیٹیکچر ہے جو ہر ایپلیکیشن کو الگ کرتا ہے۔ ایک ایپ صرف اپنے سینڈباکس کے اندر پڑھ اور لکھ سکتی ہے۔ رابطوں، تصاویر یا دوسری ایپس کی فائلوں تک رسائی کے لیے، نظامی چنندہ استعمال کرنا ضروری ہے: UIImagePickerController یا UIDocumentPickerViewController۔ Files App تک رسائی Info.plist میں UIFileSharingEnabled فلیگ کے ذریعے ترتیب دی جاتی ہے۔ iOS پر موبائل ڈیولپمنٹ میں فائل سسٹم کے لیے ڈائرکٹری کی ساخت کو سمجھنا اور ہر ڈیٹا کی قسم کے لیے صحیح مقام کا انتخاب کرنا ضروری ہے۔
iOS سینڈباکس کئی معیاری ڈائرکٹریز پر مشتمل ہے۔ Documents — صارف کی فائلوں کے لیے، iCloud Backup میں شامل۔ Caches — عارضی ڈیٹا کے لیے جو اسٹوریج کم ہونے پر نظام حذف کر سکتا ہے۔ Temporary — موجودہ سیشن کی فائلوں کے لیے، دوبارہ شروع ہونے پر صاف ہو جاتی ہے۔ Application Support — صارف سے پوشیدہ اندرونی ایپ ڈیٹا کے لیے۔ غلط ڈائرکٹری کا انتخاب مسائل کا باعث بنتا ہے: Documents میں کیشے محفوظ کرنا iCloud کی جگہ ضائع کرتا ہے اور Apple کے فائل سسٹم رہنما اصولوں کی خلاف ورزی کرتا ہے۔
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
let fileURL = documentsURL.appendingPathComponent("notes.txt")
let text = "Содержимое файла"
// ایٹمک رائٹنگ خفیہ کاری کے ساتھ
try text.write(
to: fileURL,
atomically: true,
encoding: .utf8
)
FileManager کلاس iOS پر فائلوں کے انتظام کے لیے طریقوں کا ایک مکمل سیٹ فراہم کرتی ہے۔ FileManager.default ایک تھریڈ محفوظ سنگلٹن ہے جو زیادہ تر آپریشنز کے لیے موزوں ہے۔ fileExists(atPath:)، createDirectory(at:withIntermediateDirectories:attributes:)، copyItem(at:to:) اور removeItem(at:) جیسے طریقے بنیادی منظرناموں کا احاطہ کرتے ہیں۔ 1 MB سے بڑے فائل آپریشنز DispatchQueue.global() کے ذریعے پس منظر کے تھریڈ میں انجام دینے چاہئیں۔ بڑی مقدار میں سٹریمنگ کے لیے، پوری فائل کو میموری میں لوڈ کرنے کے بجائے FileHandle استعمال کریں۔
func readDocumentsFile(named fileName: String) -> String? {
guard let docsURL = FileManager.default.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return nil }
let fileURL = docsURL.appendingPathComponent(fileName)
return try? String(contentsOf: fileURL)
}
Android 10 کی ریلیز کے ساتھ، Google نے Scoped Storage متعارف کرایا — فائل سسٹم تک محدود رسائی کا ایک ماڈل۔ ایک ایپ صرف اپنی نجی ڈائرکٹریز میں آزادانہ طور پر پڑھ اور لکھ سکتی ہے۔ میڈیا فائلوں (تصاویر، ویڈیوز، آڈیو) کے لیے، ContentResolver کے ذریعے MediaStore API استعمال ہوتا ہے۔ صوابدیدی دستاویزات کے لیے، Intent ACTION_OPEN_DOCUMENT کے ذریعے Storage Access Framework استعمال ہوتا ہے۔ Android 11+ پر، بیرونی اسٹوریج کی جڑ تک براہ راست رسائی مکمل طور پر ممنوع ہے، اور تمام ڈویلپرز کو نئی APIs استعمال کرنی چاہئیں۔
MediaStore ڈیوائس پر میڈیا فائلوں تک رسائی کے لیے ایک نظامی ContentProvider ہے۔ ContentResolver کے ذریعے، ایپ براہ راست راستوں کے بجائے فائل Uri کی درخواست کرتی ہے۔ MediaStore.Files — تمام فائل اقسام کے لیے، Images — تصاویر کے لیے، Video — ویڈیوز کے لیے، Audio — آڈیو ریکارڈنگ کے لیے۔ مشترکہ ڈائرکٹریز میں تحریر DISPLAY_NAME، MIME_TYPE اور RELATIVE_PATH کے ساتھ insert() کے ذریعے کی جاتی ہے۔ اندراج کے بعد، ایپ ایک Uri حاصل کرتی ہے جس کے ذریعے بائٹس لکھے جاتے ہیں۔ MIME اقسام اہم کردار ادا کرتی ہیں — غلط قسم فائل کھولتے وقت خرابی کا سبب بنے گی۔
val contentValues = ContentValues().apply {
put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents/Reports")
}
val uri = contentResolver.insert(
MediaStore.Files.getContentUri("external"),
contentValues
)
uri?.let {
contentResolver.openOutputStream(it)?.use { stream ->
stream.write(pdfBytes)
}
}
SAF رن ٹائم اجازتوں کے بغیر فائلوں کو منتخب کرنے اور بنانے کے لیے ایک متحد انٹرفیس فراہم کرتا ہے۔ Intent ACTION_OPEN_DOCUMENT Android پر نظامی فائل مینیجر کھولتا ہے۔ انتخاب کے بعد، ایپ FLAG_GRANT_READ_URI_PERMISSION کے ذریعے عارضی رسائی کے ساتھ content:// Uri حاصل کرتی ہے۔ ACTION_CREATE_DOCUMENT صارف کے منتخب کردہ کسی بھی بیرونی اسٹوریج مقام پر فائلیں محفوظ کرنے کی اجازت دیتا ہے۔ SAF Android 5+ پر کام کرتا ہے اور DocumentsProvider کے ذریعے منسلک کلاؤڈ فراہم کنندگان کی فائلوں تک رسائی فراہم کرتا ہے۔
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
addCategory(Intent.CATEGORY_OPENABLE)
type = "*/*"
putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
"application/pdf",
"text/plain"
))
}
startActivityForResult(intent, REQUEST_CODE)
دونوں پلیٹ فارمز صارفین کو فائلیں منتخب کرنے کے لیے بلٹ ان میکانزم فراہم کرتے ہیں۔ موبائل ایپلیکیشنز میں دستاویزات نظامی چنندہ کے ذریعے منتقل کی جاتی ہیں جو مستقل اجازتوں کے بغیر فائل تک عارضی رسائی دیتے ہیں۔ iOS پر، یہ UIDocumentPickerViewController ہے؛ Android پر، ACTION_OPEN_DOCUMENT۔ موبائل ایپلیکیشنز میں دستاویزات مقامی اسٹوریج اور کلاؤڈ سروسز دونوں سے منتخب کی جا سکتی ہیں۔ صارف واضح طور پر فائل کی وضاحت کرتا ہے، اور ایپ محدود میعاد کے ساتھ Uri یا URL حاصل کرتی ہے۔
UIDocumentPickerViewController Files App کھولتا ہے اور ایک یا زیادہ دستاویزات منتخب کرنے کی اجازت دیتا ہے۔ موڈ: درآمد (سینڈباکس میں کاپی) اور کھولنا (سیکیورٹی اسکوپڈ URL کے ذریعے رسائی)۔ فائل فلٹرنگ کے لیے، UTType اقسام کی ایک صف منتقل کی جاتی ہے — مثال کے طور پر، .pdf اور .plainText۔ URL حاصل کرنے کے بعد، ایپ کو پڑھنے سے پہلے startAccessingSecurityScopedResource() اور ختم کرنے کے بعد stopAccessingSecurityScopedResource() کو کال کرنا چاہیے۔ stopAccessing کو کال نہ کرنا نظامی وسائل کے رساؤ کا سبب بنتا ہے۔ iOS پر موبائل ایپلیکیشنز میں دستاویزات کے لیے فائل کے ساتھ کام ختم کرنے کے بعد عارضی اجازتوں کو لازمی طور پر جاری کرنا ضروری ہے۔
let picker = UIDocumentPickerViewController(
forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)
// ڈیلیگیٹ میں رسائی جاری کرنا
func documentPicker(
_ controller: UIDocumentPickerViewController,
didPickDocumentsAt urls: [URL]
) {
guard let url = urls.first else { return }
url.startAccessingSecurityScopedResource()
defer { url.stopAccessingSecurityScopedResource() }
}
FileProvider ایپس کے درمیان محفوظ طریقے سے فائلیں شیئر کرنے کے لیے ContentProvider کا ایک ذیلی طبقہ ہے۔ یہ مخصوص XML ڈائرکٹریز کی فائلوں کی بنیاد پر عارضی content:// Uri تیار کرتا ہے۔ دوسری ایپس FLAG_GRANT_READ_URI_PERMISSION کے ساتھ Intent کے ذریعے رسائی حاصل کرتی ہیں۔ DocumentProvider، FileProvider کے برعکس، SAF میں فائلیں شائع کرتا ہے اور دوسری ایپس کو آپ کی ایپ کے مواد کو فائل سسٹم کے حصے کے طور پر براؤز کرنے کی اجازت دیتا ہے۔ DocumentsProvider کو لاگو کرنے کے لیے، آپ کو queryRoots()، queryChildDocuments() اور openDocument() کو اوور رائڈ کرنا ہوگا، پھر اسے AndroidManifest.xml میں رجسٹر کرنا ہوگا۔
کلاؤڈ مطابقت پذیری صارفین کو ان کے تمام آلات پر دستاویزات تک رسائی دیتی ہے۔ موبائل ایپلیکیشنز میں فائل سسٹم کلاؤڈ پرت کے ذریعے بڑھایا جاتا ہے: iOS پر UIDocument خود بخود تبدیلیوں کو ٹریک کرتا ہے اور iCloud کے ذریعے انہیں مطابقت پذیر کرتا ہے۔ Android پر، اسی طرح کی فعالیت Google Drive API یا کلاؤڈ جڑوں والے DocumentsProvider کے ذریعے بنائی جاتی ہے۔ کراس ڈیوائس مطابقت پذیری بنانے کے لیے موبائل ڈیولپمنٹ میں فائل سسٹم کو سمجھنا بہت ضروری ہے۔
UIDocument iCloud دستاویزات کے ساتھ کام کرنے کے لیے ایک تجریدی کلاس ہے۔ یہ خود بخود تبدیلیاں محفوظ کرتا ہے، ڈیٹا پڑھتا ہے اور ڈیلیگیٹ کو اپ ڈیٹس کے بارے میں مطلع کرتا ہے۔ تحریر کے تصادم پر، NSFileVersion دستیاب ورژنز کی فہرست فراہم کرتا ہے — ڈویلپر تازہ ترین ورژن کا انتخاب کرسکتا ہے یا صارف کو تصادم حل کرنے کے اختیارات دکھا سکتا ہے۔ iCloud Drive کے لیے پروجیکٹ کی صلاحیتوں میں Ubiquity Container کو ترتیب دینا لازمی ہے۔ NSFileCoordinator اور NSFilePresenter متعدد تھریڈز یا آلات سے بیک وقت رسائی کے دوران ڈیٹا ریس کو روکتے ہیں۔
iOS خود بخود Documents ڈائرکٹری کو iCloud Backup میں شامل کرتا ہے۔ Android Auto Backup for Apps کے ساتھ کام کرتا ہے — نظام getFilesDir()، SharedPreferences اور SQLite ڈیٹا بیسز سے ڈیٹا Google Drive میں محفوظ کرتا ہے۔ کیشے اور بیرونی فائلیں بیک اپ میں شامل نہیں ہوتیں۔ دونوں پلیٹ فارمز استثنیات ترتیب دینے کی اجازت دیتے ہیں: iOS پر NSURLIsExcludedFromBackupKey کے ذریعے، Android پر XML بیک اپ اصولوں کی ترتیب کے ذریعے۔ ذاتی ڈیٹا والی فائلوں کی خفیہ کاری لازمی ہے — iOS پر NSDataWritingFileProtectionComplete استعمال کریں، Android پر security-crypto لائبریری سے EncryptedFile استعمال کریں۔
| پیرامیٹر | iOS | Android |
|---|---|---|
| ڈیفالٹ بیک اپ | Documents اور Library | getFilesDir(), SharedPreferences, DB |
| فائل استثنا | isExcludedFromBackupKey | XML بیک اپ اصول (fullBackupContent) |
| خفیہ کاری | NSDataWritingFileProtectionComplete | EncryptedFile (security-crypto) |
| کلاؤڈ مطابقت پذیری | UIDocument + iCloud | Google Drive API + SAF |
| خودکار بحالی | انسٹالیشن کے بعد iCloud Restore | دوبارہ انسٹال پر Auto Backup |
اکثر پوچھے گئے سوالات
Sandbox iOS پر ہر ایپ کے لیے ایک الگ تھلگ ماحول ہے۔ ایپ UIDocumentPickerViewController جیسے نظامی چنندہ استعمال کیے بغیر دوسری ایپس کی فائلوں تک رسائی حاصل نہیں کر سکتی۔
Scoped Storage Android 10+ پر فائل سسٹم تک محدود رسائی کا ایک ماڈل ہے۔ ایپ براہ راست صرف اپنی فائلیں پڑھتی ہے، میڈیا کے لیے MediaStore API اور دستاویزات کے لیے Storage Access Framework استعمال کرتی ہے۔
UIDocumentPickerViewController استعمال کریں — Files App یا iCloud Drive سے دستاویزات منتخب کرنے کے لیے نظامی چنندہ۔ انتخاب کے بعد، آپ کو عارضی رسائی کے ساتھ سیکیورٹی اسکوپڈ URL ملتا ہے۔
میڈیا فائلوں کے لیے، MIME قسم کی وضاحت کرتے ہوئے ContentResolver کے ذریعے MediaStore API استعمال کریں۔ صوابدیدی دستاویزات کے لیے، Intent ACTION_OPEN_DOCUMENT کے ساتھ Storage Access Framework استعمال کریں۔
FileProvider FLAG_GRANT_READ_URI_PERMISSION کے ساتھ عارضی content:// Uri کے ذریعے ایپس کے درمیان محفوظ طریقے سے فائلیں شیئر کرنے کے لیے ContentProvider کا ایک ذیلی طبقہ ہے۔
خلاصہ
ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے
IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔