Documents Directory — iOS ilovasining sandbox ida joylashgan, ilova seanslari orasida saqlanishi va foydalanuvchi uchun iTunes File Sharing va iCloud orqali mavjud bo‘lishi kerak bo‘lgan foydalanuvchi ma’lumotlarini saqlash uchun mo‘ljallangan katalogdir. Apple File System Programming Guide (2024) ma’lumotlariga ko‘ra, ushbu katalog tarkibi avtomatik ravishda iCloud va iTunes zaxira nusxasiga qo‘shiladi, shuning uchun dasturchi Documents ga qanday ma’lumotlarni joylashtirishni ongli ravishda tanlashi kerak. Caches Directory dan farqli o‘laroq, Documents dagi fayllar joy yetishmasligida tizim tomonidan o‘chirilmaydi — hajmni boshqarish mas’uliyati ilova zimmasiga tushadi.
Asosiy
Documents Directory — iOS ilovasining sandbox ichidagi, foydalanuvchi ma’lumotlarini saqlash uchun mo‘ljallangan katalog bo‘lib, ishga tushirishlar orasida saqlanishi va foydalanuvchi uchun mavjud bo‘lishi kerak. Har bir ilova o‘zining izolyatsiyalangan sandbox ini oladi va Documents Caches, tmp va Library bilan birga asosiy kataloglardan biridir.
iOS qat’iy sandbox dan foydalanadi: ilova maxsus ruxsatlarsiz boshqa ilovalarning fayl tizimiga va tizim kataloglariga kira olmaydi. Documents Directory — tarkibini foydalanuvchi iTunes File Sharing orqali ko‘rishi mumkin bo‘lgan yagona katalog (Info.plist da tegishli UIFileSharingEnabled kaliti yoqilganda).
Apple WWDC 2023 ma’lumotlariga ko‘ra, App Store dagi ilovalarning 85% dan ortig‘i kamida bitta turdagi foydalanuvchi ma‘lumotlarini saqlash uchun Documents Directory dan foydalanadi — eksport qilingan PDF lardan tortib o‘yin fayllari va eksport qilingan rasmlargacha.
Dasturchi tushunishi kerak: Documents dagi fayllar iCloud va iTunes zaxira nusxasiga avtomatik ravishda qo‘shiladi. Agar ilova Documents da tiklanadigan katta hajmdagi ma’lumotlarni (masalan, rasm keshi yoki vaqtinchalik fayllar) saqlasa, bu foydalanuvchining iCloud saqlash joyining asossiz sarflanishiga olib keladi.
Swift da Documents Directory yo‘li FileManager orqali olinadi. Apple iOS ning zamonaviy imkoniyatlari bilan yaxshiroq moslik uchun string based o‘rniga URL based API dan foydalanishni tavsiya qiladi.
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
// Documents da fayl yaratish
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)
Objective-C NSSearchPathForDirectoriesInDomains dan foydalanadi — URL o‘rniga satr yo‘lini qaytaradigan eski, ammo hali ham qo‘llab-quvvatlanadigan yondashuv.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];
Swift dagi zamonaviy loyihalar FileManager.urls dan foydalanishi kerak, chunki bu usul URL qaytaradi, satr emas, bu yo‘l kodlash xatolari xavfini kamaytiradi va kodni tip jihatidan xavfsizroq qiladi.
Documents Directory foydalanuvchi tomonidan yaratilgan yoki foydalanuvchiga aniq shaklda kerak bo‘lgan ma’lumotlar uchun mo‘ljallangan. Apple ushbu katalogda joylashtirish mumkin bo‘lgan bir necha toifani ajratadi.
Foydalanuvchi yaratadigan yoki import qiladigan fayllar — matn hujjatlari, PDF lar, rasmlar, eksport qilingan hisobotlar, zaxira nusxa fayllari. Bu ma’lumotlar foydalanuvchi uchun to‘g‘ridan-to‘g‘ri qiymatga ega va ularning yo‘qolishi jiddiy bo‘ladi.
O‘yin yozuvlari, ilova holati fayllari, eksport qilingan loyihalar — foydalanuvchi ilovani qayta o‘rnatgandan so‘ng tiklashni kutadigan hamma narsa. Biroq, muhim ma’lumotlar uchun qo‘shimcha ravishda iCloud Key-Value Storage yoki iCloud sinxronizatsiyasi bilan Core Data dan foydalanish tavsiya etiladi.
| Ma’lumot turi | Documents uchun mos | Muqobil |
|---|---|---|
| PDF va matn hujjatlari | Ha | — |
| Rasm keshi | Yo‘q | Caches Directory |
| O‘yin yozuvlari | Ha | iCloud KVS |
| Loglar va disk raskadka ma’lumotlari | Yo‘q | Caches yoki tmp |
| Eksport qilingan hisobotlar | Ha | — |
Asosiy mezon: agar ma’lumotlarni tarmoqdan tiklash yoki qayta yaratish mumkin bo‘lsa — ularning joyi Caches da, Documents da emas. Documents dagi har bir gigabayt foydalanuvchining iCloud zaxira nusxasidagi bir gigabaytdir.
iOS qurilma iTunes ga ulanganda yoki iCloud bilan sinxronizatsiya qilinganda Documents Directory tarkibini avtomatik ravishda zaxira nusxaga qo‘shadi. Bu xatti-harakatni katalog darajasida o‘chirib bo‘lmaydi — faqat faylma-fayl NSURLIsExcludedFromBackupKey atributi orqali.
iOS 5.0 dan boshlab, Apple Documents da tiklanadigan katta hajmdagi ma’lumotlarni saqlaydigan ilovalarni rad eta boshladi. Apple tavsiyasi: qayta yuklab olinadigan fayllar zaxira nusxadan chiqarib tashlash bayrog‘i bilan Caches Directory da saqlanishi kerak.
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
// Faylni iCloud zaxira nusxasidan chiqarib tashlash
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)
iCloud sinxronizatsiyasi, agar ilova iCloud Documents dan foydalansa, NSUbiquitousContainer orqali ishlaydi. Bunday holda, Documents Directory dagi fayllar avtomatik ravishda foydalanuvchi qurilmalari o‘rtasida sinxronlanadi. iCloud siz ilovalar uchun sinxronizatsiya zaxira nusxa bilan cheklangan.
Documents va Caches o‘rtasidagi farq — boshlang‘ich iOS dasturchilari orasida eng keng tarqalgan noto‘g‘ri tushunchalardan biri. Asosiy farq: tizim joy bo‘shatish uchun istalgan payt Caches dan fayllarni o‘chirishi mumkin, lekin foydalanuvchining xabarisiz Documents ga hech qachon tegmaydi.
| Xarakteristika | Documents Directory | Caches Directory |
|---|---|---|
| iCloud zaxira nusxasi | Ha (standart) | Yo‘q |
| Tizim tomonidan o‘chirish | Hech qachon | Joy yetishmasligida |
| iTunes File Sharing | Ha (bayroq yoqilgan bo‘lsa) | Yo‘q |
| Vazifa | Foydalanuvchi ma’lumotlari | Kesh, vaqtinchalik ma’lumotlar |
| Ma’lumotlarni tiklash | Tiklash talab qilinadi | Tarmoqdan qayta yuklab olish mumkin |
Apple Developer Documentation (2024) ma’lumotlariga ko‘ra, Documents Directory dan noto‘g‘ri foydalanish — ilovalarni ko‘rib chiqishda rad etilishining tez-tez uchraydigan sabablaridan biri: agar ilova Documents da tiklanadigan bir necha megabaytdan ortiq ma’lumotni saqlasa, Apple ularni Caches ga ko‘chirishni yoki NSURLIsExcludedFromBackupKey ni qo‘llashni tavsiya qiladi.
Amaliy qoida: agar foydalanuvchi fayl yo‘qolishidan xafa bo‘lsa — Documents da saqla. Agar faylni qayta yuklab olish yoki yaratish mumkin bo‘lsa — Caches da saqla.
Tajribali iOS dasturchilari ilova hayotiy siklining barcha bosqichlarida Documents Directory bilan bog‘liq muammolardan qochishga yordam beradigan bir necha qoidalarni ishlab chiqdilar.
Muntazam ravishda FileManager.enumerator(at:includingPropertiesForKeys:) orqali Documents Directory hajmini tekshirib turing. Agar hajm foydalanuvchi ma’lumotlari bo‘lmagan ma’lumotlar uchun 100 MB dan oshsa — bu saqlash arxitekturasini qayta ko‘rib chiqish uchun sababdir.
Tarmoqdan qayta yuklab olinadigan barcha fayllar uchun isExcludedFromBackup = true ni o‘rnating. Bu foydalanuvchining iCloud saqlashiga yukni kamaytiradi va ilovaning App Review tomonidan rad etilish xavfini pasaytiradi.
Documents da ma’lumot formati o‘zgartirilganda migratsiyani nazarda tuting: yangi fayllar to‘g‘ri yaratilganiga ishonch hosil qilguningizcha eski fayllarni o‘chirmang. Versiyaga xos pastki kataloglardan foydalaning.
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
)
Ushbu amaliyotlarga rioya qilish foydalanuvchi ma’lumotlarini yo‘qotish xavfini kamaytiradi, iCloud zaxira nusxasi hajmini kichiklashtiradi va App Store da ko‘rib chiqishdan o‘tishni osonlashtiradi.
Tez-tez so’raladigan savollar
Ha, Files — iOS 11 dan boshlab o‘rnatilgan ilova orqali. Info.plist da UIFileSharingEnabled kaliti yoqilganda, Documents Directory tarkibi Fayllar ilovasida „Mening iPhone im“ bo‘limida ko‘rsatiladi. Foydalanuvchi fayllarni ko‘rishi, nusxalashi va o‘chirishi mumkin.
Ilovaning butun sandbox i, shu jumladan Documents Directory, Caches, tmp va Library, qurilmadan to‘liq o‘chiriladi. iCloud dagi zaxira nusxalar tiklash yoki qo‘lda o‘chirishgacha saqlanadi. Ilova qayta o‘rnatilganda toza sandbox bilan boshlaydi.
Katalogdagi barcha fayllarni aylanib chiqish va ularning hajmlarini jamlash uchun FileManager.enumerator dan foydalaning. Har bir fayl uchun resourceValues(forKeys:) orqali .fileSize atributini oling. Shu bilan bir qatorda URLResourceKey.fileSizeKey va .directoryEnumerationResults dan foydalaning.
Standart holda Core Data SQLite faylini Library/Application Support da yaratadi, Documents da emas. Bazani Documents ga ko‘chirish tavsiya etilmaydi — u iTunes File Sharing ga qo‘shiladi va foydalanuvchi uni tasodifan o‘chirishi yoki o‘zgartirishi mumkin. Istisno: agar ilova foydalanuvchiga Core Data orqali ma’lumotlarga aniq kirish imkonini bersa.
UIFileSharingEnabled (Application supports iTunes file sharing) — Info.plist dagi mantiqiy kalit. YES ga o‘rnatilganda, foydalanuvchi iTunes va Files orqali Documents Directory dan fayllarni nusxalashi mumkin. Kalitni Info.plist ga qo‘shing: UIFileSharingEnabled = YES. Faqat ilova haqiqatan ham foydalanuvchi hujjatlarini yaratsagina yoqing.
Xulosa
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.