Temporary Directory (tmp) — ay isang direktoryo sa sandbox ng iOS application para sa pag-iimbak ng napakaikling data na kailangan lamang sa kasalukuyang session ng application. Ayon sa Apple File System Programming Guide (2024), maaaring linisin ng system ang tmp sa bawat pagtatapos ng application o sa pag-restart ng device. Hindi tulad ng Caches Directory, ang mga pansamantalang file sa tmp ay hindi para sa pag-iimbak sa pagitan ng mga paglunsad — dapat na tahasang tanggalin ng developer ang mga ito pagkatapos gamitin upang hindi kumain ng espasyo sa disk.
Mga Pangunahing Punto
Temporary Directory (kilala rin bilang tmp) — ay isang direktoryo sa loob ng sandbox ng iOS application, na nilayon para sa pag-iimbak ng data na ang habang-buhay ay limitado sa kasalukuyang session. Ito ang pinakamaikling imbakan sa lahat ng direktoryo ng sandbox.
Ang iOS ay nagbibigay ng tmp para sa mga operasyon na nangangailangan ng pansamantalang pag-iimbak ng file: pag-download ng file bago ilipat sa Documents, paggawa ng pansamantalang kopya bago i-export, pag-buffer ng streaming data. Pagkatapos makumpleto ang operasyon, dapat tanggalin ang mga pansamantalang file.
Ayon sa Apple Developer Documentation (2024), ang tmp directory ay natatangi dahil ang path nito ay maaaring magbago sa pagitan ng mga paglunsad ng application. Ang iOS ay lumilikha ng bagong path sa tmp sa bawat paglunsad — ito ay nagsisiguro na ang data mula sa nakaraang session ay hindi aksidenteng mababasa. Hindi dapat i-save ng developer ang path sa tmp sa pagitan ng mga paglunsad.
Mahalaga: hindi tulad ng Caches Directory, kung saan ang data ay maaaring mabuhay ng maraming paglunsad, hindi ginagarantiyahan ng tmp ang pag-iimbak ng data sa pagitan ng mga session sa pangmatagalan. Ito ang pinaka-maaasahang paraan upang mag-imbak ng tunay na pansamantalang data.
Sa Swift para makuha ang path sa tmp ay ginagamit ang global function na NSTemporaryDirectory() o FileManager.temporaryDirectory. Ito ang pinakasimpleng API sa lahat ng direktoryo ng sandbox.
import Foundation
// Opsyon 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Opsyon 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Ang Objective-C ay gumagamit ng parehong global function na NSTemporaryDirectory(). Ang resulta — isang string na may kumpletong path sa pansamantalang direktoryo ng application.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Ang pangunahing pagkakaiba sa ibang mga direktoryo: NSTemporaryDirectory() ay hindi nangangailangan ng pagtukoy ng domain o mask — ito ay isang global function. Gayunpaman, ang path ay maaaring magbago sa susunod na paglunsad, kaya huwag itong i-save sa UserDefaults o iba pang persistent storage.
Temporary Directory ay nilayon para sa isang mahigpit na tinukoy na hanay ng mga sitwasyon. Madalas na napagkakamalan ng mga developer ang tmp sa Caches, na naglalagay sa tmp ng data na dapat mabuhay nang higit sa isang session. Tingnan natin ang mga tamang kaso ng paggamit.
Mga file na nilikha sa proseso ng pag-export ng data: pansamantalang kopya ng ulat bago ipadala sa email, naka-compress na archive bago i-download, pansamantalang file ng conversion ng format. Pagkatapos makumpleto ang pag-export, dapat tanggalin ang file.
Mga pansamantalang buffer para sa pag-record ng audio, video o streaming data na pinoproseso sa real-time. Halimbawa, pag-record ng boses bago i-save sa permanenteng imbakan o pag-buffer ng video stream habang nag-streaming.
| Sitwasyon | Direktoryo | Paliwanag |
|---|---|---|
| Pag-export PDF bago ipadala | tmp | Hindi kailangan ang file pagkatapos ipadala |
| Cache ng mga larawan | Caches | Kapaki-pakinabang sa pagitan ng mga session |
| Pag-download ng file bago ilipat | tmp | Pansamantalang imbakan |
| Log ng session | tmp | May kaugnayan lamang sa session |
| Pag-edit ng dokumento | tmp | Bersyon bago i-save |
Kung ang data ay kailangan lamang dito at ngayon — gamitin ang tmp. Kung maaaring kailanganin sa susunod na session — gamitin ang Caches. Kung hindi katanggap-tanggap ang pagkawala ng data — gamitin ang Documents.
iOS ay namamahala sa siklo ng buhay ng tmp nang iba kaysa sa ibang mga direktoryo ng sandbox. Ang pag-unawa sa siklong ito ay kritikal para sa tamang disenyo ng pag-iimbak ng file sa application.
Sa bawat paglunsad ng application, ang iOS ay maaaring maglaan ng bagong path para sa tmp. Ang dating path ay nagiging hindi ma-access, bagaman ang mga pisikal na file ay maaaring manatili sa disk hanggang sa pag-restart ng device. Ito ang dahilan kung bakit mahigpit na inirerekomenda ng Apple na huwag i-save ang path sa tmp sa pagitan ng mga session.
Ayon sa Apple Tech Note TN2150 (2024), maaaring linisin ng system ang tmp sa mga sumusunod na kaso: sa pag-restart ng device, sa pag-abot sa limitasyon ng espasyo sa disk, sa pag-offload ng application. Hindi tulad ng Caches, ang tmp ay hindi nilayon para sa pag-iimbak ng data kahit sa maraming paglunsad — ito ang pinaka-hindi maaasahang imbakan sa sandbox.
Ang developer ay obligadong tahasang tanggalin ang mga pansamantalang file pagkatapos makumpleto ang operasyon gamit ang FileManager.removeItem(at:). Ang mga hindi natanggal na file sa tmp ay naiipon at kumakain ng espasyo sa disk — hindi ginagarantiyahan ng iOS ang kanilang awtomatikong paglilinis sa malapit na hinaharap.
Ang paghahambing ng tmp at Caches ay tumutulong sa mga developer na gumawa ng tamang desisyon sa pagpili ng direktoryo para sa imbakan. Ang pagkakamali sa pagpili ay maaaring humantong sa maagang pagkawala ng data o hindi kinakailangang pag-aaksaya ng espasyo.
| Parameter | Temporary Directory | Caches Directory |
|---|---|---|
| Haba ng buhay | Tanging kasalukuyang session | Sa pagitan ng mga session (walang garantiya) |
| Pagbabago ng path | Maaaring magbago bawat paglunsad | Matatag na path |
| Awtomatikong paglilinis | Sa restart, sa offload | Sa kakulangan ng espasyo |
| Pagtatanggal ng developer | Kinakailangan pagkatapos ng operasyon | Inirerekomenda kapag lumampas sa limitasyon |
| Paggamit | Mga pansamantalang operasyon | Patuloy na cache |
Praktikal na patakaran: piliin ang tmp para sa data na tatanggalin sa loob ng ilang segundo o minuto pagkatapos gawin. Piliin ang Caches para sa data na sulit na itago sa loob ng ilang oras o araw sa pagitan ng mga session, ngunit maaaring muling likhain.
Ang pagtatrabaho sa Temporary Directory ay nangangailangan ng disiplina: dahil ang data sa tmp ay panandalian at ang akumulasyon nito ay maaaring humantong sa hindi kinakailangang pag-aaksaya ng espasyo, ang developer ay dapat sumunod sa ilang pangunahing kasanayan.
FileManager.removeItem(at:) ay dapat tawagan kaagad pagkatapos makumpleto ang operasyon sa pansamantalang file. Gamitin ang defer sa Swift upang garantiyahan ang pagtatanggal kahit na magkaroon ng error.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Magtrabaho sa pansamantalang file
try "temporary data".write(to: tempURL, atomically: true)
// ... operasyon sa file ...
// ang defer ay isinasagawa kapag lumabas sa scope
Kung ang data ay maaaring kailanganin isang oras pagkatapos gawin — i-save ito sa Caches o Application Support. Ang tmp ay para sa mga minutong operasyon, hindi para sa pag-iimbak.
Ang pagsunod sa mga patakarang ito ay nagsisiguro na ang mga pansamantalang file ay hindi naiipon, ang espasyo sa disk ay ginagamit nang mahusay, at ang application ay wastong humahawak sa anumang sitwasyon ng paglilinis ng iOS file system.
Mga Madalas Itanong
Karaniwan ay hindi nagbabago ang path sa loob ng isang session, ngunit ang iOS ay hindi nagbibigay ng garantiya. Sa mga bihirang kaso, maaaring baguhin ng system ang tmp kapag lumipat ang application mula sa background patungo sa aktibong estado. Kaya naman inirerekomenda ng Apple na kunin ang path sa tmp sa pamamagitan ng NSTemporaryDirectory() sa bawat tawag, sa halip na i-save ito sa isang variable.
Mga file ay maiipon at kukuha ng espasyo sa disk. Maaaring linisin ng iOS ang tmp sa pag-restart ng device, ngunit hanggang sa panahong iyon ay aaksayahin ng application ang espasyo sa disk. Sa malaking akumulasyon, makikita ng user sa mga setting ng storage na ang application ay kumukuha ng maraming espasyo.
Oo, maaari mong gamitin ang DataProtectionType na may NSFileProtectionComplete para sa mga pansamantalang file na naglalaman ng sensitibong data. Ngunit tandaan: kung ang file ay babasahin lamang sa kasalukuyang session at pagkatapos ay tatanggalin — ang pag-encrypt ay maaaring labis. Suriin ang pangangailangan para sa pag-encrypt batay sa uri ng data.
Gamitin ang ProcessInfo.processInfo.globallyUniqueString para sa pagbuo ng natatanging identifier o UUID().uuidString. Nagbibigay din ang FileManager ng paraang urlForCreatingTemporaryFile na awtomatikong lumilikha ng natatanging pangalan sa tmp. Ito ay nagsisiguro ng kawalan ng banggaan sa parallel na pagsulat.
Hindi direkta — oo. Apple ay binibigyang pansin ang kabuuang laki ng data na iniimbak ng application sa disk. Kung ang tmp ay naglalaman ng mga hindi natanggal na file na gigabytes, maaaring tanggihan ng reviewer ang application. Ang inirerekomendang limitasyon para sa tmp — hindi hihigit sa 100 MB sa anumang oras. Regular na linisin ang tmp at suriin ang laki nito sa pamamagitan ng FileManager.
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