Temporary Directory (tmp) ist ein Verzeichnis in der iOS-App-Sandbox zur Speicherung extrem kurzlebiger Daten, die nur innerhalb der aktuellen App-Sitzung benötigt werden. Laut dem Apple File System Programming Guide (2024) kann das System tmp bei jeder App-Beendigung oder beim Neustart des Geräts löschen. Im Gegensatz zum Caches Directory sind temporäre Dateien in tmp nicht für die Aufbewahrung zwischen Starts vorgesehen — Entwickler müssen sie nach der Verwendung explizit löschen, um keinen Speicherplatz zu verschwenden.
Wichtige Punkte
Temporary Directory (auch als tmp bekannt) ist ein Verzeichnis innerhalb der iOS-App-Sandbox, das für die Speicherung von Daten konzipiert ist, deren Lebensdauer auf die aktuelle Sitzung beschränkt ist. Es ist der kurzlebigste Speicher unter allen Sandbox-Verzeichnissen.
iOS stellt tmp für Vorgänge bereit, die Zwischenspeicherung von Dateien erfordern: Herunterladen einer Datei vor dem Verschieben nach Documents, Erstellen einer temporären Kopie vor dem Export, Puffern von Streaming-Daten. Nach Abschluss des Vorgangs müssen die temporären Dateien gelöscht werden.
Laut der Apple Developer Documentation (2024) ist das tmp-Verzeichnis einzigartig, da sich sein Pfad zwischen App-Starts ändern kann. iOS generiert bei jedem Start einen neuen tmp-Pfad — dies stellt sicher, dass Daten aus der vorherigen Sitzung nicht versehentlich gelesen werden. Entwickler sollten den tmp-Pfad niemals zwischen Starts speichern.
Wichtig: Im Gegensatz zum Caches Directory, in dem Daten mehrere Starts überdauern können, garantiert tmp nicht, dass Daten zwischen Sitzungen langfristig erhalten bleiben. Es ist der zuverlässigste Weg, wirklich temporäre Daten zu speichern.
In Swift wird zum Abrufen des Pfads zu tmp die globale Funktion NSTemporaryDirectory() oder FileManager.temporaryDirectory verwendet. Dies sind die einfachsten APIs unter allen Sandbox-Verzeichnissen.
import Foundation
// Option 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Option 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C verwendet dieselbe globale Funktion NSTemporaryDirectory(). Das Ergebnis ist eine Zeichenfolge mit dem vollständigen Pfad zum temporären Verzeichnis der App.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Ein wesentlicher Unterschied zu anderen Verzeichnissen: NSTemporaryDirectory() erfordert keine Angabe einer Domain oder Suchmaske — es ist eine globale Funktion. Der Pfad kann sich jedoch beim nächsten Start ändern, daher speichern Sie ihn niemals in UserDefaults oder einem anderen persistenten Speicher.
Temporary Directory ist für eine streng definierte Menge von Szenarien vorgesehen. Entwickler verwechseln häufig tmp mit Caches und legen in tmp Daten ab, die länger als eine Sitzung bestehen bleiben sollten. Sehen wir uns die korrekten Anwendungsfälle an.
Dateien, die während des Datenexports erstellt werden: eine temporäre Kopie eines Berichts vor dem Versenden per E-Mail, ein komprimiertes Archiv vor dem Hochladen, eine Zwischendatei zur Formatkonvertierung. Nach Abschluss des Exports muss die Datei gelöscht werden.
Temporäre Puffer zum Aufzeichnen von Audio, Video oder Streaming-Daten, die in Echtzeit verarbeitet werden. Zum Beispiel Sprachaufzeichnung vor dem Speichern im permanenten Speicher oder Videostream-Pufferung während des Streamings.
| Szenario | Verzeichnis | Begründung |
|---|---|---|
| Export von PDF vor dem Senden | tmp | Datei nach dem Senden nicht mehr benötigt |
| Cache von Bildern | Caches | Nützlich zwischen Sitzungen |
| Download einer Datei vor Verschiebung | tmp | Zwischenspeicherung |
| Sitzungsprotokolle | tmp | Nur während der Sitzung relevant |
| Bearbeiten eines Dokuments | tmp | Version vor dem Speichern |
Wenn Daten nur hier und jetzt benötigt werden — verwenden Sie tmp. Wenn sie in der nächsten Sitzung nützlich sein könnten — verwenden Sie Caches. Wenn Datenverlust inakzeptabel ist — verwenden Sie Documents.
iOS verwaltet den Lebenszyklus von tmp anders als andere Sandbox-Verzeichnisse. Das Verständnis dieses Zyklus ist entscheidend für die richtige Gestaltung der Dateispeicherung in der App.
Bei jedem Start der App kann iOS einen neuen Pfad für tmp zuweisen. Der vorherige Pfad wird unzugänglich, obwohl die physischen Dateien bis zum Neustart des Geräts auf der Festplatte verbleiben können. Aus diesem Grund empfiehlt Apple dringend, den tmp-Pfad nicht zwischen Sitzungen zu speichern.
Laut Apple Tech Note TN2150 (2024) kann das System tmp in folgenden Fällen löschen: Geräteneustart, Erreichen der Speicherplatzgrenze, Auslagern der App (Offload). Im Gegensatz zu Caches ist tmp nicht dazu gedacht, Daten auch nur über mehrere Starts hinweg zu speichern — es ist der unzuverlässigste Speicher in der Sandbox.
Entwickler müssen temporäre Dateien nach Abschluss eines Vorgangs mit FileManager.removeItem(at:) explizit löschen. Nicht gelöschte Dateien in tmp sammeln sich an und verschwenden Speicherplatz — iOS garantiert keine automatische Bereinigung in naher Zukunft.
Der Vergleich von tmp und Caches hilft Entwicklern, die richtige Entscheidung bei der Wahl eines Verzeichnisses für die Speicherung zu treffen. Eine falsche Wahl kann entweder zu vorzeitigem Datenverlust oder unnötigem Platzverbrauch führen.
| Parameter | Temporary Directory | Caches Directory |
|---|---|---|
| Lebensdauer | Nur aktuelle Sitzung | Zwischen Sitzungen (ohne Garantie) |
| Pfadänderung | Kann sich bei jedem Start ändern | Stabiler Pfad |
| Automatische Bereinigung | Bei Neustart, bei Auslagerung | Bei Speichermangel |
| Löschung durch Entwickler | Erforderlich nach Vorgang | Empfohlen bei Überschreitung des Limits |
| Verwendung | Zwischenvorgänge | Persistenter Cache |
Eine praktische Regel: Wählen Sie tmp für Daten, die innerhalb von Sekunden oder Minuten nach der Erstellung gelöscht werden. Wählen Sie Caches für Daten, die über Stunden oder Tage zwischen Sitzungen hinweg nützlich sind, aber neu generiert werden können.
Die Arbeit mit Temporary Directory erfordert Disziplin: Da Daten in tmp kurzlebig sind und ihre Ansammlung zu Platzverschwendung führen kann, sollten Entwickler mehrere wichtige Praktiken befolgen.
FileManager.removeItem(at:) sollte sofort nach Abschluss eines Vorgangs mit einer temporären Datei aufgerufen werden. Verwenden Sie defer in Swift, um das Löschen auch bei Auftreten eines Fehlers zu gewährleisten.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Work with temp file
try "temporary data".write(to: tempURL, atomically: true)
// ... file operation ...
// defer executes when scope exits
Wenn Daten eine Stunde nach der Erstellung noch benötigt werden könnten — speichern Sie sie in Caches oder Application Support. tmp ist für minutenlange Vorgänge konzipiert, nicht für die Speicherung.
Die Einhaltung dieser Regeln stellt sicher, dass temporäre Dateien nicht überhandnehmen, Speicherplatz effizient genutzt wird und die App alle Bereinigungsszenarien des iOS-Dateisystems korrekt behandelt.
Häufig gestellte Fragen
Normalerweise ändert sich der Pfad innerhalb einer Sitzung nicht, aber iOS gibt keine Garantie dafür. In seltenen Fällen kann das System tmp ändern, wenn die App vom Hintergrund in den Vordergrund wechselt. Aus diesem Grund empfiehlt Apple, NSTemporaryDirectory() jedes Mal aufzurufen, wenn Sie den Pfad benötigen, anstatt ihn in einer Variable zu speichern.
Dateien sammeln sich an und belegen Speicherplatz. iOS kann tmp beim Neustart des Geräts löschen, aber bis dahin verschwendet die App Speicherplatz. Bei erheblicher Ansammlung kann der Benutzer in den Speichereinstellungen sehen, dass die App viel Platz belegt.
Ja, Sie können DataProtectionType mit NSFileProtectionComplete für temporäre Dateien mit sensiblen Daten verwenden. Beachten Sie jedoch: Wenn die Datei nur innerhalb der aktuellen Sitzung gelesen und dann gelöscht wird, kann die Verschlüsselung übertrieben sein. Bewerten Sie die Notwendigkeit einer Verschlüsselung basierend auf dem Datentyp.
Verwenden Sie ProcessInfo.processInfo.globallyUniqueString zur Generierung einer eindeutigen Kennung oder UUID().uuidString. FileManager bietet auch die Methode urlForCreatingTemporaryFile, die automatisch einen eindeutigen Namen in tmp generiert. Dies garantiert keine Kollisionen bei parallelen Schreibvorgängen.
Indirekt — ja. Apple achtet auf die Gesamtmenge der Daten, die die App auf der Festplatte speichert. Wenn tmp Gigabyte an nicht gelöschten Dateien enthält, kann der Prüfer die App ablehnen. Das empfohlene Limit für tmp beträgt zu keinem Zeitpunkt mehr als 100 MB. Bereinigen Sie tmp regelmäßig und überprüfen Sie seine Größe über FileManager.
Zusammenfassung
Wir entwickeln eine mobile Applikation schlüsselfertig
IT Sectr entwickelt seit 2017 iOS- und Android-Apps für Startups und Unternehmen. Wir beraten Sie und schlagen die beste Lösung vor.
Lesen Sie auch