Temporary Directory (tmp) — is een map in de sandbox van een iOS-app voor de opslag van zeer kortstondige gegevens die alleen in de huidige sessie van de app nodig zijn. Volgens Apple File System Programming Guide (2024) kan het systeem tmp wissen bij elke beëindiging van de app of bij het opnieuw opstarten van het apparaat. In tegenstelling tot Caches Directory zijn tijdelijke bestanden in tmp niet bedoeld voor opslag tussen starts — de ontwikkelaar moet ze expliciet verwijderen na gebruik om schijfruimte te besparen.
Belangrijkste
Temporary Directory (ook bekend als tmp) — is een map in de sandbox van de iOS-app, bedoeld voor de opslag van gegevens waarvan de levensduur beperkt is tot de huidige sessie. Dit is de kortstondigste opslag van alle sandbox-mappen.
iOS biedt tmp voor bewerkingen die tussenliggende bestandsopslag vereisen: het downloaden van een bestand voordat het naar Documents wordt verplaatst, het maken van een tijdelijke kopie voor export, het bufferen van streaminggegevens. Na voltooiing van de bewerking moeten tijdelijke bestanden worden verwijderd.
Volgens Apple Developer Documentation (2024) is de tmp-map uniek omdat het pad kan veranderen tussen starts van de app. iOS genereert bij elke start een nieuw pad naar tmp — dit garandeert dat gegevens uit de vorige sessie niet per ongeluk worden gelezen. De ontwikkelaar mag het pad naar tmp nooit opslaan tussen starts.
Belangrijk: in tegenstelling tot Caches Directory, waar gegevens meerdere starts kunnen overleven, garandeert tmp geen opslag van gegevens tussen sessies op de lange termijn. Dit is de meest betrouwbare manier om echt tijdelijke gegevens op te slaan.
In Swift wordt voor het verkrijgen van het pad naar tmp de globale functie NSTemporaryDirectory() of FileManager.temporaryDirectory gebruikt. Dit is de eenvoudigste API van alle sandbox-mappen.
import Foundation
// Optie 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Optie 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C gebruikt dezelfde globale functie NSTemporaryDirectory(). Het resultaat is een string met het volledige pad naar de tijdelijke map van de app.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Het belangrijkste verschil met andere mappen: NSTemporaryDirectory() vereist geen opgave van domein of masker — het is een globale functie. Het pad kan echter veranderen bij de volgende start, dus sla het nooit op in UserDefaults of andere persistente opslag.
Temporary Directory is bedoeld voor een strikt gedefinieerde set scenario’s. Ontwikkelaars verwarren tmp vaak met Caches en plaatsen in tmp gegevens die langer dan één sessie moeten blijven. Laten we de juiste gebruiksscenario’s bekijken.
Bestanden die worden aangemaakt tijdens het exporteren van gegevens: een tijdelijke kopie van een rapport voordat het wordt gemaild, een gecomprimeerd archief voor download, een tussenliggend bestand voor formaatconversie. Na voltooiing van de export moet het bestand worden verwijderd.
Tijdelijke buffers voor het opnemen van audio, video of streaminggegevens die in realtime worden verwerkt. Bijvoorbeeld het opnemen van spraak voordat het in permanente opslag wordt opgeslagen of het bufferen van een videostream tijdens het streamen.
| Scenario | Map | Motivatie |
|---|---|---|
| Export PDF voor verzending | tmp | Bestand niet nodig na verzending |
| Cache van afbeeldingen | Caches | Nuttig tussen sessies |
| Download bestand voor verplaatsing | tmp | Tussenliggende opslag |
| Logs van sessie | tmp | Alleen actueel in sessie |
| Bewerken document | tmp | Versie voor opslag |
Als gegevens alleen hier en nu nodig zijn — gebruik tmp. Als ze in de volgende sessie van pas kunnen komen — gebruik Caches. Als gegevensverlies onaanvaardbaar is — gebruik Documents.
iOS beheert de levenscyclus van tmp anders dan andere sandbox-mappen. Inzicht in deze cyclus is van cruciaal belang voor het correct ontwerpen van bestandsopslag in de app.
Bij elke start van de app kan iOS een nieuw pad voor tmp toewijzen. Het vorige pad wordt ontoegankelijk, hoewel fysieke bestanden op de schijf kunnen blijven tot het apparaat opnieuw wordt opgestart. Om deze reden raadt Apple ten zeerste aan om het pad naar tmp niet tussen sessies op te slaan.
Volgens Apple Tech Note TN2150 (2024) kan het systeem tmp in de volgende gevallen wissen: bij het opnieuw opstarten van het apparaat, bij het bereiken van de schijfruimtelimiet, bij het offloaden van de app. In tegenstelling tot Caches is tmp niet bedoeld voor het bewaren van gegevens, zelfs niet voor meerdere starts — dit is de minst betrouwbare opslag in de sandbox.
De ontwikkelaar is verplicht om tijdelijke bestanden expliciet te verwijderen na voltooiing van de bewerking met FileManager.removeItem(at:). Niet-verwijderde bestanden in tmp hopen zich op en nemen schijfruimte in beslag — iOS garandeert niet dat ze binnenkort automatisch worden gewist.
Vergelijking van tmp en Caches helpt ontwikkelaars de juiste beslissing te nemen bij het kiezen van een map voor opslag. Een fout in de keuze kan leiden tot voortijdig gegevensverlies of onnodig ruimtegebruik.
| Parameter | Temporary Directory | Caches Directory |
|---|---|---|
| Levensduur | Alleen huidige sessie | Tussen sessies (zonder garantie) |
| Padwijziging | Kan elke start veranderen | Stabiel pad |
| Automatisch wissen | Bij herstart, bij offload | Bij ruimtegebrek |
| Verwijderen door ontwikkelaar | Verplicht na bewerking | Aanbevolen bij overschrijding limiet |
| Gebruik | Tussenliggende bewerkingen | Persistente cache |
Praktische regel: kies tmp voor gegevens die binnen enkele seconden of minuten na aanmaak worden verwijderd. Kies Caches voor gegevens die het waard zijn om enkele uren of dagen tussen sessies te bewaren, maar die opnieuw kunnen worden aangemaakt.
Werken met Temporary Directory vereist discipline: omdat gegevens in tmp kortstondig zijn en ophoping kan leiden tot onnodig ruimtegebruik, moet de ontwikkelaar een aantal belangrijke praktijken volgen.
FileManager.removeItem(at:) moet onmiddellijk worden aangeroepen na voltooiing van de bewerking met het tijdelijke bestand. Gebruik defer in Swift om verwijdering te garanderen, zelfs bij een fout.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Werken met tijdelijk bestand
try "temporary data".write(to: tempURL, atomically: true)
// ... bestandsbewerking ...
// defer wordt uitgevoerd bij verlaten van scope
Als gegevens een uur na aanmaak nodig kunnen zijn — sla ze dan op in Caches of Application Support. tmp is bedoeld voor minuutbewerkingen, niet voor opslag.
Het naleven van deze regels garandeert dat tijdelijke bestanden zich niet ophopen, schijfruimte efficiënt wordt gebruikt en de app correct omgaat met elk opschoningsscenario van het iOS-bestandssysteem.
Veelgestelde vragen
Meestal verandert het pad niet binnen één sessie, maar iOS geeft geen garanties. In zeldzame gevallen kan het systeem tmp wijzigen wanneer de app van de achtergrond naar de actieve status gaat. Daarom raadt Apple aan om het pad naar tmp via NSTemporaryDirectory() bij elke aanroep op te vragen, in plaats van het in een variabele op te slaan.
Bestanden hopen zich op en nemen schijfruimte in beslag. iOS kan tmp wissen bij het opnieuw opstarten van het apparaat, maar tot die tijd verspilt de app schijfruimte. Bij aanzienlijke ophoping kan de gebruiker in de opslaginstellingen zien dat de app veel ruimte in beslag neemt.
Ja, je kunt DataProtectionType met NSFileProtectionComplete gebruiken voor tijdelijke bestanden met gevoelige gegevens. Onthoud echter: als het bestand alleen binnen de huidige sessie wordt gelezen en vervolgens wordt verwijderd — kan versleuteling overbodig zijn. Beoordeel de noodzaak van versleuteling op basis van het type gegevens.
Gebruik ProcessInfo.processInfo.globallyUniqueString voor het genereren van een unieke identificatie of UUID().uuidString. FileManager biedt ook de methode urlForCreatingTemporaryFile die automatisch een unieke naam in tmp genereert. Dit garandeert geen conflicten bij parallel schrijven.
Indirect — ja. Apple let op de totale hoeveelheid gegevens die de app op de schijf opslaat. Als tmp gigabytes aan niet-verwijderde bestanden bevat, kan de reviewer de app afwijzen. De aanbevolen limiet voor tmp — niet meer dan 100 MB op elk moment. Maak tmp regelmatig schoon en controleer de grootte via FileManager.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook