Documents Directory — egy könyvtár az iOS alkalmazás homokozójában, amely a felhasználói adatok tárolására szolgál, amelyeket az alkalmazás munkamenetei között meg kell őrizni, és a felhasználó számára elérhetővé kell tenni iTunes File Sharing és iCloud segítségével. Az Apple File System Programming Guide (2024) szerint ennek a könyvtárnak a tartalma automatikusan bekerül az iCloud és iTunes biztonsági mentésbe, ezért a fejlesztőnek tudatosan kell választania, hogy milyen adatokat helyezzen el a Documents-ben. A Caches Directory-val ellentétben a Documents-ben lévő fájlokat a rendszer nem törli, ha helyhiány van — a méret kezeléséért az alkalmazás a felelős.
Főbb pontok
Documents Directory — egy könyvtár az iOS alkalmazás homokozójában, amely a felhasználói adatok tárolására szolgál, amelyeket az indítások között meg kell őrizni és a felhasználó számára elérhetővé kell tenni. Minden alkalmazás saját elkülönített homokozót kap, és a Documents az egyik kulcsfontosságú könyvtár a Caches, tmp és Library mellett.
Az iOS szigorú homokozót használ: az alkalmazásnak nincs hozzáférése más alkalmazások fájlrendszeréhez és rendszerkönyvtáraihoz különleges engedélyek nélkül. A Documents Directory — az egyetlen könyvtár, amelynek tartalmát a felhasználó megtekintheti az iTunes File Sharing segítségével (a megfelelő UIFileSharingEnabled kulcs bekapcsolásakor az Info.plist-ben).
Az Apple WWDC 2023 adatai szerint az App Store-ban lévő alkalmazások több mint 85%-a használja a Documents Directory-t legalább egyfajta felhasználói adat tárolására — az exportált PDF-ektől a mentett játékfájlokig és exportált képekig.
A fejlesztőnek meg kell értenie: a Documents-ben lévő fájlok automatikusan bekerülnek az iCloud és iTunes biztonsági mentésbe. Ha az alkalmazás nagy mennyiségű helyreállítható adatot tárol a Documents-ben (például képgyorsítótárat vagy ideiglenes fájlokat), ez a felhasználó iCloud tárhelyének indokolatlan elfoglalásához vezet.
Swift-ben a Documents Directory útvonalát a FileManager segítségével szerezheted meg. Az Apple az URL-alapú API használatát ajánloja a string-alapú helyett a modernebb iOS képességekkel való jobb kompatibilitás érdekében.
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
// Fájl létrehozása a Documents-ben
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)
Az Objective-C a NSSearchPathForDirectoriesInDomains használja — egy régebbi, de még mindig támogatott megközelítés, amely string útvonalat ad vissza URL helyett.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];
A Swift-ben lévő modern projekteknek a FileManager.urls-t kell használniuk, mert ez a metódus URL-t ad vissza, nem stringet, ami csökkenti az útvonal kódolásából származó hibák kockázatát és típusbiztonságosabbá teszi a kódot.
Documents Directory a felhasználó által létrehozott vagy a felhasználó számára explicit formában szükséges adatok számára lett kialakítva. Az Apple több kategóriát emel ki, amelyek alkalmasak erre a könyvtárra.
Fájlok, amelyeket a felhasználó létrehoz vagy importál — szöveges dokumentumok, PDF-ek, képek, exportált jelentések, biztonsági mentési fájlok. Ezek az adatok közvetlen értékkel bírnak a felhasználó számára, és elvesztésük kritikus lenne.
Játékmentések, alkalmazás állapotának fájljai, exportált projektek — minden, amit a felhasználó elvár helyreállítani az alkalmazás újratelepítése után. A kritikus adatokhoz azonban ajánlott az iCloud Key-Value Storage vagy az iCloud szinkronizálással rendelkező Core Data használata is.
| Adattípus | Alkalmas a Documents számára | Alternatíva |
|---|---|---|
| PDF és szöveges dokumentumok | Igen | — |
| Képek gyorsítótára | Nem | Caches Directory |
| Játékmentések | Igen | iCloud KVS |
| Naplók és hibakeresési adatok | Nem | Caches vagy tmp |
| Exportált jelentések | Igen | — |
A legfontosabb kritérium: ha az adatok visszaállíthatók a hálózatról vagy újra létrehozhatók — a helyük a Caches-ben van, nem a Documents-ben. Minden gigabájt a Documents-ben egy gigabájt a felhasználó iCloud biztonsági mentésében.
iOS automatikusan beleteszi a Documents Directory tartalmát a biztonsági mentésbe, amikor az eszközt csatlakoztatják az iTunes-hoz vagy amikor szinkronizálnak az iCloud-dal. Ez a viselkedés nem kapcsolható ki könyvtár szinten — csak fájlonként az NSURLIsExcludedFromBackupKey attribútum segítségével.
iOS 5.0-tól kezdve az Apple elutasítani kezdte azokat az alkalmazásokat, amelyek nagy mennyiségű helyreállítható adatot tárolnak a Documents-ben. Apple ajánlás: az újra letölthető fájlokat a Caches Directory-ban kell tárolni, a biztonsági mentésből való kizárási jelzővel.
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
// Fájl kizárása az iCloud biztonsági mentésből
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)
Az iCloud szinkronizálás az NSUbiquitousContainer-on keresztül működik, ha az alkalmazás iCloud Documents-t használ. Ebben az esetben a Documents Directory fájljai automatikusan szinkronizálódnak a felhasználó eszközei között. Az iCloud nélküli alkalmazásoknál a szinkronizálás a biztonsági mentésre korlátozódik.
A Documents és a Caches közötti különbség — az egyik leggyakoribb tévhit a kezdő iOS fejlesztők körében. A fő különbség: a rendszer bármikor törölheti a Caches fájljait a hely felszabadítása érdekében, de soha nem nyúl a Documents-hoz a felhasználó tudta nélkül.
| Jellemző | Documents Directory | Caches Directory |
|---|---|---|
| iCloud biztonsági mentés | Igen (alapértelmezett) | Nem |
| Törlés a rendszer által | Soha | Helyhiány esetén |
| iTunes File Sharing | Igen (jelző bekapcsolásakor) | Nem |
| Cél | Felhasználói adatok | Gyorsítótár, ideiglenes adatok |
| Adatok helyreállítása | Helyreállítást igényel | Újra letölthető a hálózatról |
Az Apple Developer Documentation (2024) szerint a Documents Directory helytelen használata — az alkalmazások elutasításának gyakori oka a felülvizsgálat során: ha az alkalmazás több mint néhány megabájt helyreállítható adatot tárol a Documents-ben, az Apple ajánlja őket áthelyezni a Caches-be vagy alkalmazni az NSURLIsExcludedFromBackupKey-t.
Gyakorlati szabály: ha a felhasználó szomorú lesz a fájl elvesztésekor — tárold a Documents-ben. Ha a fájl újra letölthető vagy előállítható — tárold a Caches-ben.
A tapasztalt iOS fejlesztők számos szabályt dolgoztak ki, amelyek segítenek elkerülni a Documents Directory-val kapcsolatos problémákat az alkalmazás életciklusának minden szakaszában — a fejlesztéstől az App Store-beli kiadásig.
Rendszeresen ellenőrizd a Documents Directory méretét a FileManager.enumerator(at:includingPropertiesForKeys:) segítségével. Ha a méret meghaladja a 100 MB-ot olyan adatok esetén, amelyek nem felhasználói adatok — ez ok a tárolási architektúra újragondolására.
Minden olyan fájlhoz, amely újra letölthető a hálózatról, állítsd be az isExcludedFromBackup = true értéket. Ez csökkenti a felhasználó iCloud tárhelyének terhelését és csökkenti az alkalmazás App Review általi elutasításának kockázatát.
Az adatformátum megváltoztatásakor a Documents-ben előre lásd el a migrációt: ne töröld a régi fájlokat, amíg nem győződtél meg arról, hogy az újak helyesen lettek létrehozva. Használj verzió-specifikus alkönyvtárakat.
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
)
E gyakorlatok betartása csökkenti a felhasználói adatok elvesztésének kockázatát, kisebbé teszi az iCloud biztonsági mentés méretét, és megkönnyíti az App Store felülvizsgálatának átjutását.
Gyakran ismételt kérdések
Igen, a Files — a beépített iOS alkalmazás a 11-es verziótól kezdve. Az UIFileSharingEnabled kulcs bekapcsolásakor az Info.plist-ben a Documents Directory tartalma megjelenik a Files alkalmazás „Az iPhone-omon“ szakaszában. A felhasználó megtekintheti, másolhatja és törölheti a fájlokat.
Az alkalmazás teljes homokozója, beleértve a Documents Directory-t, Caches, tmp és Library-t, teljesen eltávolításra kerül az eszközről. Az iCloud biztonsági mentései a helyreállításig vagy kézi törlésig megmaradnak. Újratelepítéskor az alkalmazás tiszta homokozóval indul.
Használd a FileManager.enumerator-t a könyvtár összes fájljának bejárásához és méretösszegzéséhez. Minden fájlhoz szerezd meg a .fileSize attribútumot a resourceValues(forKeys:) segítségével. Alternatívként használd az URLResourceKey.fileSizeKey és .directoryEnumerationResults értékeket.
Alapértelmezés szerint a Core Data a SQLite fájlt a Library/Application Support-ban hozza létre, nem a Documents-ben. Az adatbázis áthelyezése a Documents-be nem ajánlott — bekerül az iTunes File Sharing-ba és a felhasználó véletlenül törölheti vagy módosíthatja. Kivétel: ha az alkalmazás kifejezetten hozzáférést biztosít a felhasználónak az adatokhoz a Core Data-n keresztül.
UIFileSharingEnabled (Application supports iTunes file sharing) — egy logikai kulcs az Info.plist-ben. YES-re állítva a felhasználó másolhat fájlokat a Documents Directory-ból az iTunes-on és a Files-on keresztül. Add hozzá a kulcsot az Info.plist-hez: UIFileSharingEnabled = YES. Csak akkor kapcsold be, ha az alkalmazás ténylegesen felhasználói dokumentumokat hoz létre.
Összefoglaló
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is