Documents Directory — ay isang direktoryo sa sandbox ng iOS application, na nilalayon para sa pag-iimbak ng data ng gumagamit na dapat mapanatili sa pagitan ng mga session ng application at ma-access ng gumagamit sa pamamagitan ng iTunes File Sharing at iCloud. Ayon sa Apple File System Programming Guide (2024), ang nilalaman ng direktoryong ito ay awtomatikong kasama sa backup ng iCloud at iTunes, kaya mahalaga para sa developer na may kamalayang pumili kung anong data ang ilalagay sa Documents. Hindi tulad ng Caches Directory, ang mga file sa Documents ay hindi tinatanggal ng system kapag kulang ang espasyo — ang responsibilidad para sa pamamahala ng laki ay nasa application.
Mga Pangunahing Punto
Documents Directory — ay isang direktoryo sa loob ng sandbox ng iOS application, na nilalayon para sa pag-iimbak ng data ng gumagamit na dapat mapanatili sa pagitan ng mga paglunsad at ma-access ng gumagamit. Ang bawat application ay nakakakuha ng sarili nitong nakahiwalay na sandbox, at ang Documents ay isa sa mga pangunahing direktoryo kasama ng Caches, tmp, at Library.
Gumagamit ang iOS ng mahigpit na sandbox: ang application ay walang access sa file system ng iba pang mga application at system directory nang walang mga espesyal na pahintulot. Documents Directory — ang tanging direktoryo na ang nilalaman ay maaaring matingnan ng gumagamit sa pamamagitan ng iTunes File Sharing (kapag na-activate ang kaukulang key na UIFileSharingEnabled sa Info.plist).
Ayon sa datos ng Apple WWDC 2023, mahigit 85% ng mga application sa App Store ang gumagamit ng Documents Directory para mag-imbak ng kahit isang uri ng data ng gumagamit — mula sa mga na-export na PDF hanggang sa mga naka-save na file ng laro at mga na-export na larawan.
Dapat maunawaan ng developer: ang mga file sa Documents ay awtomatikong kasama sa backup ng iCloud at iTunes. Kung ang application ay nag-iimbak ng malaking dami ng data na maaaring maibalik sa Documents (halimbawa, cache ng mga larawan o pansamantalang file), ito ay hahantong sa hindi makatuwirang paggamit ng espasyo sa iCloud storage ng gumagamit.
Sa Swift, ang path sa Documents Directory ay makukuha sa pamamagitan ng FileManager. Inirerekomenda ng Apple ang paggamit ng URL-based API sa halip na string-based para sa mas mahusay na compatibility sa mga modernong kakayahan ng iOS.
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
// Gumawa ng file sa Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)
Gumagamit ang Objective-C ng NSSearchPathForDirectoriesInDomains — isang mas luma ngunit suportado pa ring approach na nagbabalik ng string path sa halip na URL.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];
Ang mga modernong proyekto sa Swift ay dapat gumamit ng FileManager.urls dahil ang metodong ito ay nagbabalik ng URL, hindi string, na nagbabawas ng panganib ng mga error sa pag-encode ng path at ginagawang mas type-safe ang code.
Documents Directory ay nilalayon para sa data na nilikha ng gumagamit o kailangan ng gumagamit sa tahasang anyo. Itinatampok ng Apple ang ilang kategorya na angkop para sa direktoryong ito.
Mga file na ginagawa o ini-import ng gumagamit — mga text document, PDF, larawan, na-export na ulat, backup file. Ang data na ito ay may direktang halaga para sa gumagamit, at ang pagkawala nito ay magiging kritikal.
Mga save ng laro, mga file ng estado ng application, mga na-export na proyekto — lahat ng inaasahan ng gumagamit na maibalik pagkatapos muling i-install ang application. Gayunpaman, para sa kritikal na data, inirerekomenda ring gamitin ang iCloud Key-Value Storage o Core Data na may iCloud synchronization.
| Uri ng Data | Angkop para sa Documents | Alternatibo |
|---|---|---|
| PDF at mga text document | Oo | — |
| Cache ng mga larawan | Hindi | Caches Directory |
| Mga save ng laro | Oo | iCloud KVS |
| Mga log at data ng debug | Hindi | Caches o tmp |
| Na-export na mga ulat | Oo | — |
Ang pangunahing pamantayan: kung ang data ay maaaring maibalik mula sa network o muling likhain — ang lugar nito ay nasa Caches, hindi sa Documents. Bawat gigabyte sa Documents ay isang gigabyte sa iCloud backup ng gumagamit.
iOS ay awtomatikong isinasama ang nilalaman ng Documents Directory sa backup kapag ang device ay konektado sa iTunes o kapag nag-sync sa iCloud. Ang pag-uugaling ito ay hindi maaaring i-off sa antas ng direktoryo — tanging file-por-file sa pamamagitan ng attribute na NSURLIsExcludedFromBackupKey.
Simula sa iOS 5.0, sinimulan ng Apple na tanggihan ang mga application na nag-iimbak ng malaking dami ng data na maaaring maibalik sa Documents. Rekomendasyon ng Apple: ang mga file na maaaring i-download muli ay dapat itago sa Caches Directory na may flag ng pagbubukod mula sa backup.
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
// Ibukod ang file mula sa iCloud backup
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)
Gumagana ang iCloud synchronization sa pamamagitan ng NSUbiquitousContainer kung ang application ay gumagamit ng iCloud Documents. Sa kasong ito, ang mga file mula sa Documents Directory ay awtomatikong nasi-sync sa pagitan ng mga device ng gumagamit. Para sa mga application na walang iCloud, ang synchronization ay limitado sa backup.
Ang pagkakaiba sa pagitan ng Documents at Caches — isa sa mga pinakakaraniwang maling kuru-kuro sa mga baguhang iOS developer. Ang pangunahing pagkakaiba: ang system ay maaaring anumang oras na tanggalin ang mga file mula sa Caches upang magbakante ng espasyo, ngunit hindi kailanman ginagalaw ang Documents nang walang kaalaman ng gumagamit.
| Katangian | Documents Directory | Caches Directory |
|---|---|---|
| Backup sa iCloud | Oo (default) | Hindi |
| Pagtatanggal ng system | Hindi kailanman | Kapag kulang ang espasyo |
| iTunes File Sharing | Oo (kapag naka-activate ang flag) | Hindi |
| Layunin | Data ng gumagamit | Cache, pansamantalang data |
| Pagbawi ng data | Nangangailangan ng pagbawi | Maaaring i-download muli mula sa network |
Ayon sa Apple Developer Documentation (2024), ang hindi wastong paggamit ng Documents Directory — isa sa mga karaniwang dahilan ng pagtanggi ng application sa review: kung ang application ay nag-iimbak ng higit sa ilang megabyte ng data na maaaring maibalik sa Documents, inirerekomenda ng Apple na ilipat ang mga ito sa Caches o ilapat ang NSURLIsExcludedFromBackupKey.
Praktikal na tuntunin: kung ang gumagamit ay malulungkot sa pagkawala ng file — itago sa Documents. Kung ang file ay maaaring i-download muli o likhain — itago sa Caches.
Ang mga bihasang iOS developer ay bumuo ng ilang mga patakaran na tumutulong upang maiwasan ang mga problema sa Documents Directory sa lahat ng yugto ng lifecycle ng application — mula sa pag-develop hanggang sa pag-publish sa App Store.
Regular na suriin ang laki ng Documents Directory sa pamamagitan ng FileManager.enumerator(at:includingPropertiesForKeys:). Kung ang laki ay lumampas sa 100 MB para sa data na hindi data ng gumagamit — ito ay dahilan upang muling isaalang-alang ang arkitektura ng imbakan.
Para sa lahat ng file na maaaring i-download muli mula sa network, itakda ang isExcludedFromBackup = true. Binabawasan nito ang karga sa iCloud storage ng gumagamit at binabawasan ang panganib ng pagtanggi ng application ng App Review.
Kapag binabago ang format ng data sa Documents, maglaan ng migration: huwag tanggalin ang mga lumang file hangga't hindi ka sigurado na ang mga bago ay naayos nang tama. Gumamit ng mga subdirectory na tiyak sa bersyon.
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
)
Ang pagsunod sa mga kasanayang ito ay nagbabawas ng panganib ng pagkawala ng data ng gumagamit, nagpapaliit ng laki ng iCloud backup, at nagpapadali sa pagdaan sa review sa App Store.
Mga Madalas Itanong
Oo, sa pamamagitan ng Files — ang built-in na iOS application mula sa bersyon 11. Kapag na-activate ang key na UIFileSharingEnabled sa Info.plist, ang nilalaman ng Documents Directory ay ipinapakita sa application na Files sa seksyong “Sa Aking iPhone”. Maaaring tingnan, kopyahin, at tanggalin ng gumagamit ang mga file.
Ang buong sandbox ng application, kabilang ang Documents Directory, Caches, tmp, at Library, ay ganap na tinatanggal mula sa device. Ang mga backup sa iCloud ay nananatili hanggang sa pagbawi o manu-manong pagtanggal. Kapag muling na-install, ang application ay magsisimula sa malinis na sandbox.
Gamitin ang FileManager.enumerator upang lakarin ang lahat ng file sa direktoryo at buuin ang kanilang mga laki. Para sa bawat file, kunin ang attribute na .fileSize sa pamamagitan ng resourceValues(forKeys:). Bilang alternatibo, gamitin ang URLResourceKey.fileSizeKey at .directoryEnumerationResults.
Bilang default, ang Core Data ay lumilikha ng SQLite file sa Library/Application Support, hindi sa Documents. Ang paglipat ng database sa Documents ay hindi inirerekomenda — ito ay isasama sa iTunes File Sharing at maaaring aksidenteng tanggalin o baguhin ng gumagamit. Pagbubukod: kung ang application ay tahasang nagbibigay sa gumagamit ng access sa data sa pamamagitan ng Core Data.
UIFileSharingEnabled (Application supports iTunes file sharing) — isang boolean key sa Info.plist. Kapag nakatakda sa YES, ang gumagamit ay maaaring kumopya ng mga file mula sa Documents Directory sa pamamagitan ng iTunes at Files. Idagdag ang key sa Info.plist: UIFileSharingEnabled = YES. I-activate lamang kung ang application ay talagang lumilikha ng mga dokumento ng gumagamit.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din