Documents Directory — adalah direktori di dalam sandbox aplikasi iOS yang ditujukan untuk menyimpan data pengguna yang harus dipertahankan antar sesi aplikasi dan dapat diakses oleh pengguna melalui iTunes File Sharing dan iCloud. Menurut Apple File System Programming Guide (2024), konten direktori ini secara otomatis disertakan dalam pencadangan iCloud dan iTunes, oleh karena itu pengembang harus secara sadar memilih data apa yang akan ditempatkan di Documents. Berbeda dengan Caches Directory, file di Documents tidak dihapus oleh sistem saat ruang tidak mencukupi — tanggung jawab pengelolaan ukuran ada pada aplikasi.
Poin Utama
Documents Directory — adalah direktori di dalam sandbox aplikasi iOS, ditujukan untuk menyimpan data pengguna yang harus dipertahankan antar peluncuran dan dapat diakses oleh pengguna. Setiap aplikasi mendapatkan sandbox terisolasi sendiri, dan Documents adalah salah satu direktori kunci bersama Caches, tmp, dan Library.
iOS menggunakan sandbox yang ketat: aplikasi tidak memiliki akses ke sistem file aplikasi lain dan direktori sistem tanpa izin khusus. Documents Directory — satu-satunya direktori yang kontennya dapat dilihat oleh pengguna melalui iTunes File Sharing (saat mengaktifkan kunci UIFileSharingEnabled yang sesuai di Info.plist).
Menurut data Apple WWDC 2023, lebih dari 85% aplikasi di App Store menggunakan Documents Directory untuk menyimpan setidaknya satu jenis data pengguna — dari PDF yang diekspor hingga file game yang disimpan dan gambar yang diekspor.
Pengembang harus memahami: file di Documents secara otomatis disertakan dalam pencadangan iCloud dan iTunes. Jika aplikasi menyimpan data dalam jumlah besar yang dapat dipulihkan di Documents (misalnya, cache gambar atau file sementara), ini akan menyebabkan penggunaan ruang penyimpanan iCloud pengguna yang tidak perlu.
Di Swift, jalur ke Documents Directory diperoleh melalui FileManager. Apple merekomendasikan penggunaan API berbasis URL daripada berbasis string untuk kompatibilitas yang lebih baik dengan kemampuan iOS modern.
import Foundation
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
for: .documentDirectory,
in: .userDomainMask
).first else { return }
// Buat file di Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)
Objective-C menggunakan NSSearchPathForDirectoriesInDomains — pendekatan yang lebih lama namun masih didukung yang mengembalikan jalur string, bukan URL.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];
Proyek modern di Swift harus menggunakan FileManager.urls karena metode ini mengembalikan URL, bukan string, yang mengurangi risiko kesalahan pengkodean jalur dan membuat kode lebih aman secara tipe.
Documents Directory ditujukan untuk data yang dibuat oleh pengguna atau diperlukan pengguna dalam bentuk eksplisit. Apple menyoroti beberapa kategori yang cocok untuk direktori ini.
File yang dibuat atau diimpor pengguna — dokumen teks, PDF, gambar, laporan yang diekspor, file cadangan. Data ini memiliki nilai langsung bagi pengguna, dan kehilangannya akan sangat berarti.
Simpanan game, file status aplikasi, proyek yang diekspor — semua yang diharapkan pengguna untuk dipulihkan setelah menginstal ulang aplikasi. Namun, untuk data penting, disarankan juga menggunakan iCloud Key-Value Storage atau Core Data dengan sinkronisasi iCloud.
| Tipe Data | Cocok untuk Documents | Alternatif |
|---|---|---|
| PDF dan dokumen teks | Ya | — |
| Cache gambar | Tidak | Caches Directory |
| Simpanan game | Ya | iCloud KVS |
| Log dan data debug | Tidak | Caches atau tmp |
| Laporan yang diekspor | Ya | — |
Kriteria utama: jika data dapat dipulihkan dari jaringan atau dibuat ulang — tempatnya di Caches, bukan di Documents. Setiap gigabyte di Documents adalah gigabyte di cadangan iCloud pengguna.
iOS secara otomatis menyertakan konten Documents Directory dalam pencadangan saat perangkat terhubung ke iTunes atau saat sinkronisasi dengan iCloud. Perilaku ini tidak dapat dinonaktifkan di tingkat direktori — hanya per file melalui atribut NSURLIsExcludedFromBackupKey.
Mulai iOS 5.0, Apple mulai menolak aplikasi yang menyimpan data dalam jumlah besar yang dapat dipulihkan di Documents. Rekomendasi Apple: file yang dapat diunduh ulang harus disimpan di Caches Directory dengan flag pengecualian dari cadangan.
import Foundation
let documentsURL = FileManager.default
.urls(for: .documentDirectory, in: .userDomainMask)
.first!
// Kecualikan file dari cadangan iCloud
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true
var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)
Sinkronisasi iCloud bekerja melalui NSUbiquitousContainer jika aplikasi menggunakan iCloud Documents. Dalam kasus ini, file dari Documents Directory secara otomatis disinkronkan antar perangkat pengguna. Untuk aplikasi tanpa iCloud, sinkronisasi terbatas pada pencadangan.
Perbedaan antara Documents dan Caches — salah satu kesalahpahaman paling umum di kalangan pengembang iOS pemula. Perbedaan utama: sistem dapat kapan saja menghapus file dari Caches untuk membebaskan ruang, tetapi tidak pernah menyentuh Documents tanpa sepengetahuan pengguna.
| Karakteristik | Documents Directory | Caches Directory |
|---|---|---|
| Cadangan iCloud | Ya (default) | Tidak |
| Penghapusan oleh sistem | Tidak pernah | Saat ruang tidak mencukupi |
| iTunes File Sharing | Ya (saat flag diaktifkan) | Tidak |
| Tujuan | Data pengguna | Cache, data sementara |
| Pemulihan data | Memerlukan pemulihan | Dapat diunduh ulang dari jaringan |
Menurut Apple Developer Documentation (2024), penggunaan Documents Directory yang tidak tepat — salah satu alasan umum penolakan aplikasi saat review: jika aplikasi menyimpan lebih dari beberapa megabyte data yang dapat dipulihkan di Documents, Apple merekomendasikan untuk memindahkannya ke Caches atau menerapkan NSURLIsExcludedFromBackupKey.
Aturan praktis: jika pengguna akan sedih saat kehilangan file — simpan di Documents. Jika file dapat diunduh atau dibuat ulang — simpan di Caches.
Pengembang iOS berpengalaman telah menyusun beberapa aturan yang membantu menghindari masalah dengan Documents Directory di semua tahap siklus hidup aplikasi — dari pengembangan hingga publikasi di App Store.
Secara teratur periksa ukuran Documents Directory melalui FileManager.enumerator(at:includingPropertiesForKeys:). Jika ukuran melebihi 100 MB untuk data yang bukan data pengguna — ini adalah alasan untuk mempertimbangkan kembali arsitektur penyimpanan.
Untuk semua file yang dapat diunduh ulang dari jaringan, atur isExcludedFromBackup = true. Ini mengurangi beban pada penyimpanan iCloud pengguna dan mengurangi risiko penolakan aplikasi oleh App Review.
Saat mengubah format data di Documents, sediakan migrasi: jangan hapus file lama sampai Anda yakin file baru telah dibuat dengan benar. Gunakan subdirektori khusus versi.
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
)
Mematuhi praktik ini mengurangi risiko kehilangan data pengguna, memperkecil ukuran cadangan iCloud, dan memudahkan proses review di App Store.
Pertanyaan yang Sering Diajukan
Ya, melalui Files — aplikasi bawaan iOS sejak versi 11. Saat mengaktifkan kunci UIFileSharingEnabled di Info.plist, konten Documents Directory ditampilkan di aplikasi File di bagian “Di iPhone Saya”. Pengguna dapat melihat, menyalin, dan menghapus file.
Seluruh sandbox aplikasi, termasuk Documents Directory, Caches, tmp, dan Library, sepenuhnya dihapus dari perangkat. Cadangan di iCloud tetap ada hingga pemulihan atau penghapusan manual. Saat menginstal ulang, aplikasi memulai dengan sandbox bersih.
Gunakan FileManager.enumerator untuk menelusuri semua file di direktori dan menjumlahkan ukurannya. Untuk setiap file, dapatkan atribut .fileSize melalui resourceValues(forKeys:). Alternatifnya, gunakan URLResourceKey.fileSizeKey dan .directoryEnumerationResults.
Secara default, Core Data membuat file SQLite di Library/Application Support, bukan di Documents. Memindahkan basis data ke Documents tidak disarankan — akan disertakan dalam iTunes File Sharing dan pengguna dapat secara tidak sengaja menghapus atau mengubahnya. Pengecualian: jika aplikasi secara eksplisit memberikan akses pengguna ke data melalui Core Data.
UIFileSharingEnabled (Application supports iTunes file sharing) — kunci boolean di Info.plist. Saat diatur ke YES, pengguna dapat menyalin file dari Documents Directory melalui iTunes dan Files. Tambahkan kunci ke Info.plist: UIFileSharingEnabled = YES. Aktifkan hanya jika aplikasi benar-benar membuat dokumen pengguna.
Ringkasan
Kami akan mengembangkan aplikasi seluler turnkey
IT Sectr membuat aplikasi iOS dan Android untuk startup dan bisnis sejak 2017. Kami akan memberi saran dan mengusulkan solusi terbaik.
Baca juga