Caches Directory — is een map in de sandbox van een iOS-app, bedoeld voor het opslaan van tijdelijke gegevens die kunnen worden hersteld of opnieuw uit het netwerk kunnen worden geladen. Volgens Apple File System Basics (2024) kan het systeem op elk moment bestanden uit de Caches Directory verwijderen om schijfruimte vrij te maken — de app moet de afwezigheid van deze bestanden correct afhandelen en ze indien nodig herstellen. In tegenstelling tot de Documents Directory worden gegevens uit Caches niet opgenomen in iCloud- en iTunes-back-ups, wat de belasting van de cloudopslag van de gebruiker vermindert.
Belangrijkste punten
Caches Directory — is een map in de sandbox van een iOS-app, geoptimaliseerd voor het opslaan van gegevens die indien nodig kunnen worden hersteld. In tegenstelling tot de Documents Directory is Caches niet bedoeld voor gebruikersgegevens — het is tijdelijke opslag om de werking van de app te versnellen.
iOS gebruikt de Caches Directory voor het plaatsen van gecachete netwerkreacties, vooraf geladen afbeeldingen, geserialiseerde objecten en gegevens die de app kan herstellen. De ontwikkelaar mag niet vertrouwen op langdurige opslag van gegevens in deze map.
Volgens gegevens van Apple WWDC 2020 gebruikt ongeveer 40% van de iOS-apps de Caches Directory voor het opslaan van gecachete afbeeldingen en netwerkgegevens, terwijl 25% van de ontwikkelaars ten onrechte gegevens in Caches plaatst die in Documents of Application Support zouden moeten staan, door onbegrip van de verschillen tussen deze mappen.
Kritieke eigenschap van Caches: de app moet correct omgaan met de situatie waarin een cachebestand door het systeem is verwijderd. Als na het verwijderen van de cache de functionaliteit van de app wordt verstoord — betekent dit dat de gegevens in de verkeerde map worden opgeslagen.
In Swift wordt het pad naar de Caches Directory verkregen via de standaard FileManager-methode met .cachesDirectory. Dit is een eenvoudige handeling die in vrijwel elke iOS-app die met netwerkgegevens werkt, wordt gebruikt.
import Foundation
let fileManager = FileManager.default
guard let cachesURL = fileManager.urls(
for: .cachesDirectory,
in: .userDomainMask
).first else { return }
// Gecachete JSON opslaan
let cacheFile = cachesURL.appendingPathComponent("feed_cache.json")
let jsonData = try JSONSerialization.data(
withJSONObject: response,
options: [.prettyPrinted]
)
try jsonData.write(to: cacheFile)
Objective-C gebruikt NSSearchPathForDirectoriesInDomains met NSCachesDirectory. Hoewel Apple de Swift API aanbeveelt, blijft Objective-C-code met Caches Directory werkend en ondersteund.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Swift-projecten moeten de voorkeur geven aan URL-gebaseerde API: deze is typeveilig en integreert beter met moderne frameworks zoals SwiftUI en Combine.
Caches Directory is optimaal voor verschillende categorieën gegevens die de app gebruikt om de werking te versnellen, maar is niet de enige bron van waarheid. De juiste keuze van gegevens om te cachen beïnvloedt direct de UX en prestaties van de app.
JSON-reacties van API's, nieuwsfeedgegevens, objectlijsten — alles wat de app opnieuw van de server kan laden. Gebruik URLCache voor automatisch cachen van HTTP-reacties of sla handmatig geserialiseerde objecten op.
Afbeeldingen geladen uit het netwerk — het meest voorkomende gebruik van Caches Directory. Bibliotheken zoals SDWebImage en Kingfisher slaan standaard gecachete afbeeldingen precies in Caches op.
| Gegevenstype | Geschikt voor Caches | Bewaringstermijn |
|---|---|---|
| JSON API-reacties | Ja | Tot systeemopschoning |
| Afbeeldingen uit netwerk | Ja | Tot systeemopschoning |
| Logbestanden debuggen | Voorwaardelijk | Beter in tmp |
| Game saves | Nee | Alleen Documents |
| Configuraties app | Nee | Application Support |
Als gegevens niet kunnen worden hersteld — is hun plaats niet in Caches. Dit is het eenvoudigste criterium: stel je voor dat het systeem morgen alle bestanden uit Caches verwijdert. Als de app correct blijft werken — worden de gegevens correct opgeslagen.
iOS beheert automatisch het opschonen van de Caches Directory, maar de exacte triggers en algoritmen zijn niet gedocumenteerd door Apple. Het is bekend dat het systeem bestanden uit Caches kan verwijderen bij gebrek aan schijfruimte, evenals bij het gebruik van de functie Offload Unused Apps.
Het opschoningsproces is transparant voor de app: het systeem verwijdert bestanden zonder kennisgeving. De app moet het bestaan van het bestand controleren voor het lezen en het opnieuw aanmaken bij afwezigheid. Niet vertrouwen op langdurige opslag — is de belangrijkste vereiste bij het werken met Caches.
Volgens Apple's artikel "File System Basics" (2024) mag de app er niet op rekenen dat bestanden in de Caches Directory beschikbaar zijn tussen sessies. Ontwikkelaars wordt aangeraden een fallback-mechanisme te implementeren: bij afwezigheid van een cachebestand — laad de gegevens uit het netwerk en sla ze opnieuw op in Caches.
Een apart scenario — het offloaden van de app (Offload). Bij activering van deze functie verwijdert iOS de app maar behoudt de Documents Directory. De Caches Directory wordt daarbij verwijderd. Een gebruiker die de app heeft hersteld, krijgt de gecachete gegevens niet — de app moet ze opnieuw laden.
Het verschil tussen Caches en Temporary (tmp) veroorzaakt vaak verwarring bij ontwikkelaars. Beide mappen slaan tijdelijke gegevens op, maar met verschillende garanties voor levensduur en doel.
| Kenmerk | Caches Directory | Temporary Directory |
|---|---|---|
| Levensduur | Van sessie tot sessie (niet gegarandeerd) | Alleen binnen de sessie |
| Systeemopschoning | Bij ruimtegebrek | Bij beëindiging sessie of herstart |
| Doel | Cache voor versnelling | Zeer tijdelijke gegevens |
| Voorbeeld | Gecachete afbeeldingen | Tijdelijk bestand voor export |
| Back-up | Nee | Nee |
Kies Caches als het nuttig is om gegevens te bewaren tussen het opstarten van de app, maar ze kunnen worden hersteld. Gebruik tmp als gegevens alleen nodig zijn in de huidige sessie en geen waarde hebben na het beëindigen van de app.
Werken met Caches Directory vereist het naleven van een aantal regels die helpen gegevensverlies, onverwacht gedrag van de app en prestatieproblemen te voorkomen.
FileManager.fileExists(atPath:) moet worden aangeroepen voor elke leesbewerking uit Caches. Als het bestand ontbreekt — laad de gegevens uit de oorspronkelijke bron en sla ze op in de cache. Ga er nooit van uit dat een bestand uit Caches bestaat.
Stel een maximale grootte in voor de Caches Directory in de app. Bijvoorbeeld een limiet van 50 MB voor afbeeldingen en 10 MB voor JSON-reacties. Bij overschrijding van de limiet verwijder je de oudste bestanden op wijzigingsdatum.
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 }
// Oude bestanden opsommen en verwijderen
// bij overschrijding van de groottebeperking
}
Het naleven van deze praktijken garandeert dat de app correct werkt bij alle acties van het systeem voor cache-opschoning en dat de gebruiker niet wordt geconfronteerd met onverwacht gegevensverlies.
Veelgestelde vragen
Nee, iOS stuurt geen meldingen voor het verwijderen van bestanden uit Caches. Het opschoningsproces is volledig transparant voor de app. De enige manier om van verwijdering op de hoogte te raken — bij het lezen van het bestand retourneert FileManager nil of geeft een fout, en de app moet deze situatie afhandelen.
Directe toegang tot Caches Directory via Files of iTunes heeft de gebruiker niet. De gebruiker kan echter de cache van alle apps opschonen via Instellingen > Algemeen > Opslag, door een specifieke app te selecteren en op "Ontlaad app" te drukken. Ook kan iOS automatisch de cache opschonen bij ruimtegebrek.
URLCache — is een ingebouwd mechanisme voor het cachen van HTTP-verzoeken van Foundation. Het slaat automatisch gecachete reacties op en laadt ze, met de Caches Directory onder de motorkap. Handmatig opslaan geeft meer controle: je kunt het formaat kiezen, gegevens versleutelen en de levensduur van elk bestand individueel beheren.
Bij het bijwerken van de app via de App Store blijft de Caches Directory behouden. De inhoud kan echter door het systeem worden verwijderd als de nieuwe update meer ruimte nodig heeft voor installatie. De ontwikkelaar mag niet vertrouwen op het behoud van Caches na een update — dit is een extra reden voor het implementeren van een fallback-mechanisme.
Stel URLCache in op nil voor een specifieke NSURLSession-sessie of gebruik het cachebeleid .reloadIgnoringLocalCacheData. Je kunt ook een URLSessionConfiguration-configuratie maken met een lege cache: sessionConfiguration.urlCache = nil. Dit is handig voor gegevens die altijd actueel moeten zijn.
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