Temporary Directory (tmp) — adalah direktori di dalam sandbox aplikasi iOS untuk menyimpan data yang sangat singkat yang hanya diperlukan dalam sesi aplikasi saat ini. Menurut Apple File System Programming Guide (2024), sistem dapat membersihkan tmp setiap kali aplikasi berakhir atau saat perangkat di-restart. Berbeda dengan Caches Directory, file sementara di tmp tidak dimaksudkan untuk disimpan antar peluncuran — pengembang harus secara eksplisit menghapusnya setelah digunakan agar tidak memenuhi ruang disk.
Poin Utama
Temporary Directory (juga dikenal sebagai tmp) — adalah direktori di dalam sandbox aplikasi iOS, yang ditujukan untuk menyimpan data yang masa hidupnya terbatas pada sesi saat ini. Ini adalah penyimpanan paling singkat di antara semua direktori sandbox.
iOS menyediakan tmp untuk operasi yang memerlukan penyimpanan file perantara: mengunduh file sebelum dipindahkan ke Documents, membuat salinan sementara sebelum ekspor, buffering data streaming. Setelah operasi selesai, file sementara harus dihapus.
Menurut Apple Developer Documentation (2024), direktori tmp unik karena path-nya dapat berubah antar peluncuran aplikasi. iOS menghasilkan path baru ke tmp setiap kali diluncurkan — ini memastikan data dari sesi sebelumnya tidak terbaca secara tidak sengaja. Pengembang tidak boleh menyimpan path ke tmp antar peluncuran.
Penting: berbeda dengan Caches Directory, di mana data dapat bertahan beberapa kali peluncuran, tmp tidak menjamin penyimpanan data antar sesi dalam jangka panjang. Ini adalah cara paling andal untuk menyimpan data yang benar-benar sementara.
Di Swift untuk mendapatkan path ke tmp digunakan fungsi global NSTemporaryDirectory() atau FileManager.temporaryDirectory. Ini adalah API paling sederhana di antara semua direktori sandbox.
import Foundation
// Opsi 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Opsi 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C menggunakan fungsi global yang sama NSTemporaryDirectory(). Hasilnya — string dengan path lengkap ke direktori sementara aplikasi.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Perbedaan utama dari direktori lain: NSTemporaryDirectory() tidak memerlukan penentuan domain atau mask — ini adalah fungsi global. Namun path dapat berubah pada peluncuran berikutnya, jadi jangan pernah menyimpannya di UserDefaults atau penyimpanan persisten lainnya.
Temporary Directory ditujukan untuk serangkaian skenario yang ditentukan secara ketat. Pengembang sering mengacaukan tmp dengan Caches, menempatkan di tmp data yang seharusnya bertahan lebih dari satu sesi. Mari kita lihat kasus penggunaan yang benar.
File yang dibuat dalam proses ekspor data: salinan sementara laporan sebelum dikirim melalui email, arsip terkompresi sebelum diunduh, file perantara konversi format. Setelah ekspor selesai, file harus dihapus.
Buffer sementara untuk merekam audio, video, atau data streaming yang diproses secara real-time. Misalnya, merekam suara sebelum disimpan ke penyimpanan permanen atau buffering streaming video.
| Skenario | Direktori | Alasan |
|---|---|---|
| Ekspor PDF sebelum dikirim | tmp | File tidak diperlukan setelah dikirim |
| Cache gambar | Caches | Berguna antar sesi |
| Unduh file sebelum dipindahkan | tmp | Penyimpanan perantara |
| Log sesi | tmp | Hanya relevan dalam sesi |
| Edit dokumen | tmp | Versi sebelum disimpan |
Jika data hanya diperlukan di sini dan sekarang — gunakan tmp. Jika mungkin berguna di sesi berikutnya — gunakan Caches. Jika kehilangan data tidak dapat diterima — gunakan Documents.
iOS mengelola siklus hidup tmp berbeda dari direktori sandbox lainnya. Memahami siklus ini sangat penting untuk merancang penyimpanan file yang benar di aplikasi.
Setiap peluncuran aplikasi, iOS dapat mengalokasikan path baru untuk tmp. Path sebelumnya menjadi tidak dapat diakses, meskipun file fisik mungkin tetap ada di disk hingga restart perangkat. Karena alasan inilah Apple sangat menyarankan untuk tidak menyimpan path ke tmp antar sesi.
Menurut Apple Tech Note TN2150 (2024), sistem dapat membersihkan tmp dalam kasus berikut: saat restart perangkat, saat mencapai batas ruang disk, saat pembongkaran aplikasi (Offload). Berbeda dengan Caches, tmp tidak dimaksudkan untuk menyimpan data bahkan dalam beberapa peluncuran — ini adalah penyimpanan paling tidak dapat diandalkan di sandbox.
Pengembang wajib secara eksplisit menghapus file sementara setelah operasi selesai menggunakan FileManager.removeItem(at:). File yang tidak dihapus di tmp menumpuk dan memakan ruang disk — iOS tidak menjamin pembersihan otomatisnya dalam waktu dekat.
Perbandingan tmp dan Caches membantu pengembang mengambil keputusan yang tepat saat memilih direktori untuk penyimpanan. Kesalahan dalam pemilihan dapat menyebabkan hilangnya data prematur atau pemborosan ruang yang tidak perlu.
| Parameter | Temporary Directory | Caches Directory |
|---|---|---|
| Masa hidup | Hanya sesi saat ini | Antar sesi (tanpa jaminan) |
| Perubahan path | Dapat berubah setiap peluncuran | Path stabil |
| Pembersihan otomatis | Saat restart, saat pembongkaran | Saat kekurangan ruang |
| Penghapusan oleh pengembang | Wajib setelah operasi | Disarankan saat melebihi batas |
| Penggunaan | Operasi perantara | Cache persisten |
Aturan praktis: pilih tmp untuk data yang akan dihapus dalam beberapa detik atau menit setelah dibuat. Pilih Caches untuk data yang layak disimpan selama beberapa jam atau hari antar sesi, tetapi dapat dibuat ulang.
Bekerja dengan Temporary Directory membutuhkan disiplin: karena data di tmp berumur pendek dan akumulasinya dapat menyebabkan pemborosan ruang yang tidak perlu, pengembang harus mengikuti beberapa praktik utama.
FileManager.removeItem(at:) harus dipanggil segera setelah operasi dengan file sementara selesai. Gunakan defer di Swift untuk menjamin penghapusan bahkan jika terjadi kesalahan.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Bekerja dengan file sementara
try "temporary data".write(to: tempURL, atomically: true)
// ... operasi file ...
// defer dieksekusi saat keluar dari scope
Jika data mungkin diperlukan satu jam setelah dibuat — simpan di Caches atau Application Support. tmp ditujukan untuk operasi menit, bukan untuk penyimpanan.
Mematuhi aturan ini memastikan file sementara tidak menumpuk, ruang disk digunakan secara efisien, dan aplikasi menangani skenario pembersihan sistem file iOS dengan benar.
Pertanyaan yang Sering Diajukan
Biasanya path tidak berubah dalam satu sesi, tetapi iOS tidak memberikan jaminan. Dalam kasus yang jarang terjadi, sistem dapat mengubah tmp saat aplikasi beralih dari latar belakang ke status aktif. Oleh karena itu Apple merekomendasikan untuk mendapatkan path ke tmp melalui NSTemporaryDirectory() setiap kali dipanggil, daripada menyimpannya dalam variabel.
File akan menumpuk dan memakan ruang disk. iOS dapat membersihkan tmp saat restart perangkat, tetapi hingga saat itu aplikasi akan membuang-buang ruang disk. Pada akumulasi yang signifikan, pengguna dapat melihat di pengaturan penyimpanan bahwa aplikasi memakan banyak ruang.
Ya, Anda dapat menggunakan DataProtectionType dengan NSFileProtectionComplete untuk file sementara yang berisi data sensitif. Namun ingat: jika file hanya akan dibaca dalam sesi saat ini dan kemudian dihapus — enkripsi mungkin berlebihan. Nilailah kebutuhan enkripsi berdasarkan jenis data.
Gunakan ProcessInfo.processInfo.globallyUniqueString untuk menghasilkan pengidentifikasi unik atau UUID().uuidString. FileManager juga menyediakan metode urlForCreatingTemporaryFile yang secara otomatis menghasilkan nama unik di tmp. Ini menjamin tidak ada benturan saat penulisan paralel.
Secara tidak langsung — ya. Apple memperhatikan ukuran total data yang disimpan aplikasi di disk. Jika tmp berisi file yang tidak dihapus berukuran gigabyte, reviewer dapat menolak aplikasi. Batas yang disarankan untuk tmp — tidak lebih dari 100 MB setiap saat. Bersihkan tmp secara teratur dan periksa ukurannya melalui FileManager.
Kesimpulan
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