Caches Directory ist ein Verzeichnis in der Sandbox der iOS-App, das für die Speicherung temporärer Daten konzipiert ist, die aus dem Netzwerk wiederhergestellt oder neu geladen werden können. Laut Apple File System Basics (2024) kann das System Dateien aus dem Caches Directory jederzeit löschen, um Speicherplatz freizugeben. Die App muss das Fehlen dieser Dateien korrekt behandeln und sie bei Bedarf wiederherstellen. Im Gegensatz zum Documents Directory werden Daten aus Caches nicht in iCloud- und iTunes-Backups einbezogen, was die Belastung des Cloud-Speichers des Benutzers reduziert.
Wichtige Punkte
Caches Directory ist ein Verzeichnis innerhalb der iOS-App-Sandbox, das für die Speicherung von Daten optimiert ist, die bei Bedarf wiederhergestellt werden können. Im Gegensatz zum Documents Directory ist Caches nicht für Benutzerdaten gedacht, sondern ein temporärer Speicher zur Beschleunigung der App-Leistung.
iOS verwendet das Caches Directory zum Speichern von zwischengespeicherten Netzwerkantworten, vorgeladenen Bildern, serialisierten Objekten und Daten, die die App wiederherstellen kann. Entwickler sollten sich nicht auf die langfristige Datenspeicherung in diesem Verzeichnis verlassen.
Laut Apple WWDC 2020 verwenden etwa 40% der iOS-Apps das Caches Directory zum Speichern von zwischengespeicherten Bildern und Netzwerkdaten, während 25% der Entwickler fälschlicherweise Daten in Caches ablegen, die in Documents oder Application Support gehören, weil sie die Unterschiede zwischen diesen Verzeichnissen nicht verstehen.
Eine kritische Eigenschaft von Caches: Die App muss Situationen korrekt behandeln, in denen eine Cache-Datei vom System gelöscht wurde. Wenn das Entfernen des Caches die App-Funktionalität beeinträchtigt, werden die Daten im falschen Verzeichnis gespeichert.
In Swift wird der Pfad zum Caches Directory mit der Standardmethode FileManager mit .cachesDirectory abgerufen. Dies ist eine einfache Operation, die in praktisch jeder iOS-App verwendet wird, die mit Netzwerkdaten arbeitet.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Save cached JSON
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C verwendet NSSearchPathForDirectoriesInDomains mit NSCachesDirectory. Obwohl Apple die Swift-API empfiehlt, bleibt Objective-C-Code mit Caches Directory funktionsfähig und wird unterstützt.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift-Projekte sollten die URL-basierte API bevorzugen: Sie ist typsicher und lässt sich besser in moderne Frameworks wie SwiftUI und Combine integrieren.
Caches Directory ist optimal für mehrere Datenkategorien, die die App zur Leistungssteigerung verwendet, aber es ist nicht die alleinige Quelle der Wahrheit. Die richtige Auswahl der Daten für die Zwischenspeicherung wirkt sich direkt auf die UX und die App-Leistung aus.
JSON-Antworten von APIs, Newsfeed-Daten, Objektlisten — alles, was die App erneut vom Server herunterladen kann. Verwenden Sie URLCache für automatisches Caching von HTTP-Antworten oder speichern Sie serialisierte Objekte manuell.
Aus dem Netzwerk heruntergeladene Bilder sind der häufigste Anwendungsfall für das Caches Directory. Bibliotheken wie SDWebImage und Kingfisher speichern zwischengespeicherte Bilder standardmäßig in Caches.
| Datentyp | Geeignet für Caches | Aufbewahrungsdauer |
|---|---|---|
| JSON API-Antworten | Ja | Bis zur Systembereinigung |
| Bilder aus dem Netzwerk | Ja | Bis zur Systembereinigung |
| Debug-Logs | Bedingt | Besser in tmp |
| Spielstände | Nein | Nur Documents |
| App-Konfigurationen | Nein | Application Support |
Wenn Daten nicht wiederhergestellt werden können, gehören sie nicht in Caches. Dies ist das einfachste Kriterium: Stellen Sie sich vor, das System löscht morgen alle Dateien aus Caches. Wenn die App weiterhin korrekt funktioniert, werden die Daten richtig gespeichert.
iOS verwaltet die Bereinigung des Caches Directory automatisch, aber die genauen Auslöser und Algorithmen sind von Apple nicht dokumentiert. Bekannt ist, dass das System Dateien aus Caches löschen kann, wenn der Speicherplatz knapp ist, sowie wenn die Funktion zum Auslagern ungenutzter Apps aktiv ist.
Der Bereinigungsprozess ist für die App transparent: Das System löscht Dateien ohne Benachrichtigung. Die App muss vor dem Lesen die Existenz der Datei überprüfen und sie bei Fehlen neu erstellen. Sich nicht auf langfristige Speicherung zu verlassen, ist eine wichtige Anforderung bei der Arbeit mit Caches.
Laut Apples Artikel „File System Basics“ (2024) sollte die App nicht erwarten, dass Dateien im Caches Directory zwischen Sitzungen verfügbar sind. Entwicklern wird empfohlen, einen Fallback-Mechanismus zu implementieren: Wenn eine zwischengespeicherte Datei fehlt, laden Sie die Daten aus dem Netzwerk herunter und speichern Sie sie erneut in Caches.
Ein separates Szenario ist das Auslagern von Apps (Offload). Wenn diese Funktion aktiviert wird, entfernt iOS die App, behält aber ihr Documents Directory. Das Caches Directory wird dabei gelöscht. Ein Benutzer, der die App wiederherstellt, erhält keine zwischengespeicherten Daten — die App muss sie erneut herunterladen.
Der Unterschied zwischen Caches und Temporary (tmp)-Verzeichnissen sorgt bei Entwicklern oft für Verwirrung. Beide Verzeichnisse speichern temporäre Daten, jedoch mit unterschiedlichen Lebensdauergarantien und Zwecken.
| Merkmal | Caches Directory | Temporary Directory |
|---|---|---|
| Lebensdauer | Von Sitzung zu Sitzung (nicht garantiert) | Nur innerhalb einer Sitzung |
| Systembereinigung | Bei Speicherplatzmangel | Bei Sitzungsende oder Neustart |
| Zweck | Cache zur Leistungssteigerung | Sehr temporäre Daten |
| Beispiel | Zwischengespeicherte Bilder | Temporäre Datei vor Export |
| Backup | Nein | Nein |
Wählen Sie Caches, wenn es vorteilhaft ist, Daten zwischen App-Starts zu behalten, sie aber wiederhergestellt werden können. Verwenden Sie tmp, wenn Daten nur in der aktuellen Sitzung benötigt werden und nach Beendigung der App keinen Wert mehr haben.
Die Arbeit mit dem Caches Directory erfordert die Einhaltung mehrerer Regeln, die helfen, Datenverlust, unerwartetes App-Verhalten und Leistungsprobleme zu vermeiden.
FileManager.fileExists(atPath:) sollte vor jedem Lesen aus Caches aufgerufen werden. Wenn die Datei fehlt, laden Sie die Daten aus der Quelle und speichern Sie sie im Cache. Gehen Sie niemals davon aus, dass eine Datei in Caches existiert.
Legen Sie eine maximale Größe für das Caches Directory in Ihrer App fest. Zum Beispiel ein Limit von 50 MB für Bilder und 10 MB für JSON-Antworten. Bei Überschreitung des Limits löschen Sie die ältesten Dateien nach Änderungsdatum.
import Foundation
func trimCache(to maxSizeBytes: Int) {
let cachesURL = FileManager.default
.urls(for: .cachesDirectory, in: .userDomainMask)
.first!
guard let enumerator = FileManager.default
.enumerator(
at: cachesURL,
includingPropertiesForKeys: [.fileSizeKey, .contentModificationDateKey]
)
else { return }
// Enumerate and remove old files
// when exceeding size limit
}
Die Befolgung dieser Verfahren stellt sicher, dass die App unabhängig von System-Cache-Bereinigungsaktionen korrekt funktioniert und Benutzer keinen unerwarteten Datenverlust erleiden.
Häufig gestellte Fragen
Nein, iOS sendet keine Benachrichtigungen, bevor es Dateien aus Caches löscht. Der Bereinigungsprozess ist für die App völlig transparent. Die einzige Möglichkeit, eine Löschung zu erfahren, ist beim Versuch, eine Datei zu lesen — FileManager gibt nil zurück oder wirft einen Fehler, und die App muss diese Situation behandeln.
Benutzer haben keinen direkten Zugriff auf das Caches Directory über Files oder iTunes. Sie können jedoch den Cache aller Apps über Einstellungen > Allgemein > Speicher leeren, eine bestimmte App auswählen und auf „App auslagern“ tippen. iOS kann den Cache auch automatisch leeren, wenn der Speicherplatz knapp ist.
URLCache ist ein integrierter Mechanismus zum Caching von HTTP-Anfragen von Foundation. Er speichert und lädt automatisch zwischengespeicherte Antworten und verwendet dabei intern das Caches Directory. Manuelles Speichern bietet mehr Kontrolle: Sie können das Format wählen, Daten verschlüsseln und die Lebensdauer jeder Datei individuell verwalten.
Bei einem App-Update über den App Store bleibt das Caches Directory erhalten. Der Inhalt kann jedoch vom System gelöscht werden, wenn das neue Update mehr Platz für die Installation benötigt. Entwickler sollten sich nach einem Update nicht auf die Persistenz von Caches verlassen — dies ist ein weiterer Grund für die Implementierung eines Fallback-Mechanismus.
Setzen Sie URLCache für eine bestimmte NSURLSession-Sitzung auf nil oder verwenden Sie die Caching-Richtlinie .reloadIgnoringLocalCacheData. Sie können auch eine URLSessionConfiguration mit leerem Cache erstellen: sessionConfiguration.urlCache = nil. Dies ist nützlich für Daten, die immer aktuell sein müssen.
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