Mobil ishlab chiqishda fayl tizimi va hujjatlar: bu nima, qanday tamoyillar va qanday ishlaydi

Muallif: IT Sectr Nashr etilgan: 2026-07-19 O'qish vaqti: 12 daq

Fayl tizimi bilan ishlash har qanday mobil ilovaning asosidir. Har bir platforma o'ziga xos kirish modelini taklif qiladi: iOS-da Sandbox ilovalarni alohida konteynerlarda izolyatsiya qiladi, Android-da esa Scoped Storage umumiy xotiraga to'g'ridan-to'g'ri kirishni cheklaydi. Google Developer Documentation (2026) ga ko'ra, Android 10 bilan Scoped Storage-ning joriy etilishi ma'lumotlarni saqlash arxitekturasini to'liq qayta ko'rib chiqishni talab qildi. Ushbu qo'llanmada ikkala platforma uchun FileManager, MediaStore API, Storage Access Framework va DocumentProvider-ni ko'rib chiqamiz.

Asosiy fikrlar

  • Sandbox — iOS-ning izolyatsiyalangan muhiti, bu yerda har bir ilova faqat o'z katalogida ishlaydi, boshqa ilovalarning ma'lumotlariga kira olmaydi.
  • Scoped Storage — MediaStore API va SAF orqali tashqi xotiraga to'g'ridan-to'g'ri kirishni cheklaydigan Android 10+ modeli.
  • FileManager — iOS-da fayl operatsiyalari uchun asosiy sinf: yaratish, o'qish, nusxalash, ko'chirish va o'chirish.
  • Storage Access Framework — Intent ACTION_OPEN_DOCUMENT yordamida hujjatlarni tanlash uchun Android tizim mexanizmi.
  • DocumentProvider — SAF orqali ilova fayllarini umumiy fayl tizimida nashr qilish uchun Android komponenti.

Mobil ilovalarda fayl tizimi nima?

Mobil ilovalarda fayl tizimi iOS va Android qurilmalarida ma'lumotlarni saqlash va kirishni belgilaydigan API-lar, xavfsizlik qoidalari va cheklovlar to'plamidir. Ish stoli operatsion tizimlaridan farqli o'laroq, mobil platformalar har bir ilovani izolyatsiya qiladi, bu foydalanuvchi ma'lumotlarini boshqa dasturlar tomonidan ruxsatsiz o'qishdan himoya qiladi.

iOS va Android o'rtasidagi arxitektura farqlari

iOS Sandbox modelidan foydalanadi, bu erda har bir ilova qat'iy cheklangan ruxsatnomalar bilan o'z konteynerida mavjud. 10-versiyadan oldin Android tashqi xotiraga to'liq kirishni ta'minladi, ammo Scoped Storage joriy etilishi bilan yondashuv iOS-ga yaqinlashdi. Asosiy farq shundaki, iOS fayl tizimini to'liq izolyatsiya qiladi, Android esa bir necha kirish darajasini taklif qiladi: shaxsiy katalog, ommaviy MediaStore va SAF orqali vaqtinchalik kirish.

Asosiy xotira turlari

Mobil ilovalar uch turdagi ma'lumot xotirasidan foydalanadi. Shaxsiy xotira — ichki fayllar va kesh uchun faqat ilova kirishi mumkin bo'lgan katalog. Umumiy xotira — MediaStore (Android) yoki Files App (iOS) orqali media fayllar. Bulutli xotira — qurilmalar o'rtasida sinxronizatsiya uchun iCloud Drive va Google Drive. Har bir turning o'lcham, fayl muddati va kirish shartlari bo'yicha o'z cheklovlari bor.

Xotira turiiOSAndroid
ShaxsiyDocuments, Library, CachesgetFilesDir(), getCacheDir()
Umumiy mediaPHPhotoLibrary tanlovchi orqaliMediaStore API (ContentResolver)
Umumiy hujjatlarUIDocumentPicker orqali Files AppStorage Access Framework (SAF)
BulutiCloud Drive (UIDocument)Google Drive API
KeshCaches katalogi, tizim tomonidan tozalanadigetCacheDir(), getExternalCacheDir()

Mobil ishlab chiqishda fayl tizimi: iOS-da Sandbox

Sandbox har bir ilovani izolyatsiya qiluvchi iOS xavfsizlik arxitekturasidir. Ilova faqat o'z sandbox ichida o'qishi va yozishi mumkin. Kontaktlar, fotosuratlar yoki boshqa ilovalarning fayllariga kirish uchun tizim tanlovchilaridan foydalanish kerak: UIImagePickerController yoki UIDocumentPickerViewController. Files App-ga kirish Info.plist-dagi UIFileSharingEnabled bayrog'i orqali sozlanadi. iOS-da mobil ishlab chiqishda fayl tizimi katalog tuzilishini tushunishni va har bir ma'lumot turi uchun to'g'ri joyni tanlashni talab qiladi.

Sandbox katalog tuzilishi

iOS sandbox bir nechta standart katalogdan iborat. Documents — foydalanuvchi fayllari uchun, iCloud Backup tarkibiga kiradi. Caches — xotira kam bo'lganda tizim o'chirishi mumkin bo'lgan vaqtinchalik ma'lumotlar uchun. Temporary — joriy seans fayllari uchun, qayta ishga tushirishda tozalanadi. Application Support — foydalanuvchidan yashirilgan ichki ilova ma'lumotlari uchun. Noto'g'ri katalogni tanlash muammolarga olib keladi: Documents-da keshlash iCloud joyini behuda sarflaydi va Apple-ning fayl tizimi ko'rsatmalarini buzadi.

swift
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 = "Содержимое файла"

// Atomik yozish shifrlash bilan
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — fayl operatsiyalari uchun asosiy API

FileManager sinfi iOS-da fayllarni boshqarish uchun to'liq usullar to'plamini taqdim etadi. FileManager.default ko'pchilik operatsiyalar uchun mos bo'lgan thread-safe singltdir. fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:) va removeItem(at:) kabi usullar asosiy stsenariylarni qamrab oladi. 1 MB dan katta fayl operatsiyalari DispatchQueue.global() orqali fon threadida bajarilishi kerak. Katta hajmlarni oqim bilan uzatish uchun butun faylni xotiraga yuklash o'rniga FileHandle dan foydalaning.

swift
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)
}

Mobil ilovalarda fayl tizimi: Android-da Scoped Storage

Android 10 ning chiqarilishi bilan Google Scoped Storage ni taqdim etdi — fayl tizimiga cheklangan kirish modeli. Ilova faqat o'z shaxsiy kataloglarida erkin o'qishi va yozishi mumkin. Media fayllar (fotosuratlar, video, audio) uchun ContentResolver orqali MediaStore API ishlatiladi. Ixtiyoriy hujjatlar uchun Intent ACTION_OPEN_DOCUMENT orqali Storage Access Framework ishlatiladi. Android 11+ da tashqi xotira ildiziga to'g'ridan-to'g'ri kirish butunlay taqiqlangan va barcha ishlab chiquvchilar yangi API-lardan foydalanishi kerak.

Media fayllar bilan ishlash uchun MediaStore API

MediaStore qurilmadagi media fayllariga kirish uchun tizim ContentProvider-idir. ContentResolver orqali ilova to'g'ridan-to'g'ri yo'llar o'rniga fayl Uri ni so'raydi. MediaStore.Files — barcha fayl turlari uchun, Images — tasvirlar uchun, Video — videolar uchun, Audio — audio yozuvlari uchun. Umumiy kataloglarga yozish DISPLAY_NAME, MIME_TYPE va RELATIVE_PATH bilan insert() orqali amalga oshiriladi. Kiritishdan so'ng ilova baytlar yoziladigan Uri ni oladi. MIME turlari muhim rol o'ynaydi — noto'g'ri tur faylni ochishda xatoga olib keladi.

kotlin
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)
    }
}

Fayl tanlash uchun Storage Access Framework

SAF ishlash vaqti ruxsatnomalarisiz fayllarni tanlash va yaratish uchun yagona interfeysni taqdim etadi. Intent ACTION_OPEN_DOCUMENT Android-da tizim fayl menejerini ochadi. Tanlashdan so'ng ilova FLAG_GRANT_READ_URI_PERMISSION orqali vaqtinchalik kirish bilan content:// Uri oladi. ACTION_CREATE_DOCUMENT foydalanuvchi tanlagan istalgan tashqi xotira joyida fayllarni saqlashga imkon beradi. SAF Android 5+ da ishlaydi va DocumentsProvider orqali ulangan bulut provayderlarining fayllariga kirishni ta'minlaydi.

kotlin
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)

Mobil ilovalarda hujjat tanlash: tizim tanlovchilari

Ikkala platforma ham foydalanuvchilarga fayllarni tanlash uchun o'rnatilgan mexanizmlarni taqdim etadi. Mobil ilovalardagi hujjatlar doimiy ruxsatnomalarsiz faylga vaqtinchalik kirish beradigan tizim tanlovchilari orqali uzatiladi. iOS-da bu UIDocumentPickerViewController, Android-da ACTION_OPEN_DOCUMENT. Mobil ilovalardagi hujjatlar mahalliy xotira va bulut xizmatlaridan tanlanishi mumkin. Foydalanuvchi faylni aniq belgilaydi va ilova cheklangan amal qilish muddati bilan Uri yoki URL oladi.

iOS-da UIDocumentPickerViewController

UIDocumentPickerViewController Files App ni ochadi va bir yoki bir nechta hujjatni tanlashga imkon beradi. Rejimlar: import (sandboxga nusxalash) va ochish (xavfsizlik doirali URL orqali kirish). Fayl filtrlash uchun UTType turlari massivi uzatiladi — masalan, .pdf va .plainText. URL ni olgandan so'ng, ilova o'qishdan oldin startAccessingSecurityScopedResource() va tugatgandan keyin stopAccessingSecurityScopedResource() ni chaqirishi kerak. stopAccessing ni chaqirmaslik tizim resurslarining oqishiga olib keladi. iOS-da mobil ilovalardagi hujjatlar fayl bilan ish tugagandan so'ng vaqtinchalik ruxsatnomalarni majburiy bo'shatishni talab qiladi.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)

// Vakilda kirishni bo'shatish
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

Android-da FileProvider va DocumentProvider

FileProvider ilovalar o'rtasida fayllarni xavfsiz almashish uchun ContentProvider ning pastki sinfidir. Belgilangan XML kataloglaridagi fayllarga asoslangan holda vaqtinchalik content:// Uri yaratadi. Boshqa ilovalar FLAG_GRANT_READ_URI_PERMISSION bilan Intent orqali kirishadi. DocumentProvider, FileProvider dan farqli o'laroq, fayllarni SAF da nashr qiladi va boshqa ilovalarga ilovangiz tarkibini fayl tizimining bir qismi sifatida ko'rishga imkon beradi. DocumentsProvider ni amalga oshirish uchun queryRoots(), queryChildDocuments() va openDocument() ni bekor qilishingiz, keyin AndroidManifest.xml da ro'yxatdan o'tkazishingiz kerak.

iCloud Drive va bulutli fayl sinxronizatsiyasi

Bulut sinxronizatsiyasi foydalanuvchilarga barcha qurilmalarida hujjatlarga kirish imkonini beradi. Mobil ilovalardagi fayl tizimi bulut qatlami bilan kuchaytiriladi: iOS-da UIDocument o'zgarishlarni avtomatik kuzatadi va ularni iCloud orqali sinxronlashtiradi. Android-da shunga o'xshash funksionallik Google Drive API yoki bulut ildizlari bilan DocumentsProvider orqali quriladi. Ishonchli qurilmalararo sinxronizatsiyani yaratish uchun mobil ishlab chiqishda fayl tizimini tushunish juda muhimdir.

UIDocument — iOS-da sinxronizatsiya

UIDocument iCloud hujjatlari bilan ishlash uchun mavhum sinfdir. U o'zgarishlarni avtomatik saqlaydi, ma'lumotlarni o'qiydi va vakilni yangilanishlar haqida xabardor qiladi. Yozish mojarosi yuz berganda, NSFileVersion mavjud versiyalar ro'yxatini taqdim etadi — ishlab chiquvchi eng oxirgi versiyani tanlashi yoki foydalanuvchiga mojaro hal qilish variantlarini ko'rsatishi mumkin. iCloud Drive uchun loyihaning Capabilities qismida Ubiquity Container ni sozlash majburiydir. NSFileCoordinator va NSFilePresenter bir vaqtning o'zida bir nechta thread yoki qurilmalardan kirishda ma'lumot poygalarining oldini oladi.

Ma'lumotlarni zaxiralash va tiklash

iOS avtomatik ravishda Documents katalogini iCloud Backup tarkibiga kiritadi. Android Auto Backup for Apps bilan ishlaydi — tizim getFilesDir(), SharedPreferences va SQLite ma'lumotlar bazalaridagi ma'lumotlarni Google Drive da saqlaydi. Kesh va tashqi fayllar zaxira nusxaga kiritilmaydi. Ikkala platforma istisnolarni sozlashga imkon beradi: iOS-da NSURLIsExcludedFromBackupKey orqali, Android-da XML zaxira nusxa qoidalari konfiguratsiyasi orqali. Shaxsiy ma'lumotlarga ega fayllarni shifrlash majburiydir — iOS-da NSDataWritingFileProtectionComplete dan foydalaning, Android-da security-crypto kutubxonasidan EncryptedFile dan foydalaning.

ParametriOSAndroid
Standart zaxira nusxaDocuments va LibrarygetFilesDir(), SharedPreferences, MB
Fayl istisnosiisExcludedFromBackupKeyXML zaxira nusxa qoidalari (fullBackupContent)
ShifrlashNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
Bulut sinxronizatsiyasiUIDocument + iCloudGoogle Drive API + SAF
Avtomatik tiklashO'rnatishdan keyin iCloud RestoreQayta o'rnatishda Auto Backup

Tez-tez beriladigan savollar

iOS-da Sandbox nima?

Sandbox iOS-da har bir ilova uchun izolyatsiyalangan muhitdir. Ilova UIDocumentPickerViewController kabi tizim tanlovchilaridan foydalanmasdan boshqa ilovalarning fayllariga kira olmaydi.

Android-da Scoped Storage nima?

Scoped Storage Android 10+ da fayl tizimiga cheklangan kirish modelidir. Ilova to'g'ridan-to'g'ri faqat o'z fayllarini o'qiydi, media uchun MediaStore API va hujjatlar uchun Storage Access Framework dan foydalanadi.

iOS-da faylni qanday tanlash mumkin?

UIDocumentPickerViewController — Files App yoki iCloud Drive dan hujjatlarni tanlash uchun tizim tanlovchisidan foydalaning. Tanlashdan so'ng vaqtinchalik kirish bilan xavfsizlik doirali URL olasiz.

Android 11+ da fayllarga qanday kirish mumkin?

Media fayllar uchun MIME turini ko'rsatib, ContentResolver orqali MediaStore API dan foydalaning. Ixtiyoriy hujjatlar uchun Intent ACTION_OPEN_DOCUMENT bilan Storage Access Framework dan foydalaning.

Android-da FileProvider nima?

FileProvider FLAG_GRANT_READ_URI_PERMISSION bilan vaqtinchalik content:// Uri orqali ilovalar o'rtasida fayllarni xavfsiz almashish uchun ContentProvider ning pastki sinfidir.

Xulosa

  • Sandbox — iOS-ning izolyatsiyalangan fayl tizimi, ilova faqat o'zining Documents, Caches va Library kataloglariga kirishi mumkin.
  • FileManager — iOS-da fayl operatsiyalari uchun asosiy API. Katta fayllarni fon threadida FileHandle orqali o'qing.
  • Scoped Storage — Android 10+ da fayl tizimi modeli, tashqi xotiraga to'g'ridan-to'g'ri kirishni MediaStore API va SAF bilan almashtiradi.
  • MediaStore API — Android-da media fayllari bilan ishlash uchun tizim ContentProvider. ContentValues bilan insert() orqali yozish amalga oshiriladi.
  • Storage Access Framework — Android-da ACTION_OPEN_DOCUMENT va ACTION_CREATE_DOCUMENT orqali universal hujjat tanlash mexanizmi.
  • UIDocumentPickerViewController — Files App va iCloud Drive ni ochadigan iOS tizim tanlovchisi. Xavfsizlik doirali URL lar bilan ishlaydi.
  • FileProvider — Vaqtinchalik content:// Uri va ishlash vaqti ruxsatnomalari orqali Android ilovalari o'rtasida xavfsiz fayl almashish mexanizmi.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish