Caches Directory est un répertoire dans le sandbox de l’application iOS conçu pour stocker des données temporaires qui peuvent être restaurées ou rechargées depuis le réseau. Selon Apple File System Basics (2024), le système peut supprimer des fichiers du Caches Directory à tout moment pour libérer de l’espace disque. L’application doit gérer correctement l’absence de ces fichiers et les restaurer si nécessaire. Contrairement au Documents Directory, les données de Caches ne sont pas incluses dans les sauvegardes iCloud et iTunes, ce qui réduit la charge sur le stockage cloud de l’utilisateur.
Points Clés
Caches Directory est un répertoire à l’intérieur du sandbox de l’application iOS optimisé pour stocker des données qui peuvent être restaurées si nécessaire. Contrairement au Documents Directory, Caches n’est pas destiné aux données utilisateur. C’est un stockage temporaire pour accélérer les performances de l’application.
iOS utilise le Caches Directory pour stocker les réponses réseau mises en cache, les images préchargées, les objets sérialisés et les données que l’application peut restaurer. Les développeurs ne doivent pas compter sur le stockage à long terme dans ce répertoire.
Selon Apple WWDC 2020, environ 40 % des applications iOS utilisent le Caches Directory pour stocker des images et des données réseau mises en cache, tandis que 25 % des développeurs placent incorrectement dans Caches des données qui devraient se trouver dans Documents ou Application Support, faute de comprendre les différences entre ces répertoires.
Une propriété critique de Caches : l’application doit gérer correctement les situations où un fichier de cache a été supprimé par le système. Si la suppression du cache casse les fonctionnalités de l’application, alors les données sont stockées dans le mauvais répertoire.
En Swift, le chemin vers Caches Directory s’obtient en utilisant la méthode standard FileManager avec .cachesDirectory. C’est une opération simple utilisée dans pratiquement toutes les applications iOS qui travaillent avec des données réseau.
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 utilise NSSearchPathForDirectoriesInDomains avec NSCachesDirectory. Bien qu’Apple recommande l’API Swift, le code Objective-C avec Caches Directory reste fonctionnel et pris en charge.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Les projets Swift devraient préférer l’API basée sur les URL : elle est type-safe et s’intègre mieux avec les frameworks modernes comme SwiftUI et Combine.
Caches Directory est optimal pour plusieurs catégories de données que l’application utilise pour accélérer les performances, mais ce n’est pas la seule source de vérité. Choisir les bonnes données à mettre en cache affecte directement l’UX et les performances de l’application.
Réponses JSON des API, données de flux d’actualités, listes d’objets. Tout ce que l’application peut télécharger à nouveau depuis le serveur. Utilisez URLCache pour la mise en cache automatique des réponses HTTP ou sauvegardez manuellement les objets sérialisés.
Les images téléchargées depuis le réseau sont le cas d’utilisation le plus courant du Caches Directory. Les bibliothèques comme SDWebImage et Kingfisher sauvegardent les images mises en cache dans Caches par défaut.
| Type de données | Adapté pour Caches | Période de conservation |
|---|---|---|
| JSON réponses API | Oui | Jusqu’au nettoyage système |
| Images du réseau | Oui | Jusqu’au nettoyage système |
| Logs de débogage | Conditionnel | Plutôt dans tmp |
| Sauvegardes de jeux | Non | Documents uniquement |
| Configurations d’app | Non | Application Support |
Si les données ne peuvent pas être restaurées, elles n’ont pas leur place dans Caches. C’est le critère le plus simple : imaginez que demain le système supprime tous les fichiers de Caches. Si l’application continue de fonctionner correctement, les données sont stockées correctement.
iOS gère automatiquement le nettoyage du Caches Directory, mais les déclencheurs et algorithmes exacts ne sont pas documentés par Apple. On sait que le système peut supprimer des fichiers de Caches lorsque l’espace disque est faible, ainsi que lorsque la fonction Offload Unused Apps est active.
Le processus de nettoyage est transparent pour l’application : le système supprime les fichiers sans notification. L’application doit vérifier l’existence du fichier avant de le lire et le recréer s’il est absent. Ne pas compter sur le stockage à long terme est une exigence clé lorsqu’on travaille avec Caches.
Selon l’article d’Apple « File System Basics » (2024), l’application ne doit pas s’attendre à ce que les fichiers du Caches Directory soient disponibles entre les sessions. Il est recommandé aux développeurs d’implémenter un mécanisme de secours : si un fichier en cache est manquant, téléchargez les données depuis le réseau et sauvegardez-les à nouveau dans Caches.
Un scénario distinct est le déchargement d’application (Offload). Lorsque cette fonction est activée, iOS supprime l’application mais conserve son Documents Directory. Le Caches Directory est supprimé dans le processus. Un utilisateur qui restaure l’application n’aura pas de données en cache. L’application doit les télécharger à nouveau.
La différence entre les répertoires Caches et Temporary (tmp) prête souvent à confusion chez les développeurs. Les deux répertoires stockent des données temporaires, mais avec des garanties de durée de vie et des objectifs différents.
| Caractéristique | Caches Directory | Temporary Directory |
|---|---|---|
| Durée de vie | De session en session (non garantie) | Au sein d’une seule session |
| Nettoyage système | Quand l’espace est faible | À la fin de la session ou au redémarrage |
| Objectif | Cache pour accélérer les performances | Données très temporaires |
| Exemple | Images mises en cache | Fichier temporaire avant export |
| Sauvegarde | Non | Non |
Choisissez Caches s’il est utile de conserver les données entre les lancements de l’application mais qu’elles peuvent être restaurées. Utilisez tmp si les données ne sont nécessaires que dans la session en cours et n’ont aucune valeur après la fin de l’application.
Travailler avec le Caches Directory nécessite de suivre plusieurs règles qui aident à éviter la perte de données, les comportements inattendus de l’application et les problèmes de performances.
FileManager.fileExists(atPath:) doit être appelé avant chaque lecture depuis Caches. Si le fichier est manquant, chargez les données depuis la source d’origine et sauvegardez-les dans le cache. Ne présumez jamais qu’un fichier dans Caches existe.
Définissez une taille maximale pour le Caches Directory dans votre application. Par exemple, une limite de 50 Mo pour les images et 10 Mo pour les réponses JSON. Lorsque la limite est dépassée, supprimez les fichiers les plus anciens par date de modification.
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
}
Suivre ces bonnes pratiques garantit que l’application fonctionne correctement indépendamment des actions de nettoyage du cache système, et que les utilisateurs ne subissent pas de perte de données inattendue.
Questions Fréquentes
Non, iOS n’envoie pas de notifications avant de supprimer des fichiers de Caches. Le processus de nettoyage est complètement transparent pour l’application. La seule façon de savoir qu’un fichier a été supprimé est d’essayer de le lire. FileManager retourne nil ou lance une erreur, et l’application doit gérer cette situation.
Les utilisateurs n’ont pas d’accès direct au Caches Directory via Files ou iTunes. Cependant, ils peuvent vider le cache de toutes les applications via Réglages > Général > Stockage, sélectionner une application spécifique et appuyer sur « Décharger l’app ». iOS peut également vider automatiquement le cache lorsque l’espace est insuffisant.
URLCache est un mécanisme intégré de mise en cache des requêtes HTTP de Foundation. Il sauvegarde et charge automatiquement les réponses mises en cache, en utilisant le Caches Directory en interne. La sauvegarde manuelle offre plus de contrôle : vous pouvez choisir le format, chiffrer les données et gérer la durée de vie de chaque fichier individuellement.
Lors de la mise à jour de l’application via l’App Store, le Caches Directory est conservé. Cependant, le contenu peut être supprimé par le système si la nouvelle mise à jour nécessite plus d’espace pour l’installation. Le développeur ne doit pas compter sur la persistance de Caches après une mise à jour. C’est une raison supplémentaire pour implémenter un mécanisme de secours.
Définissez URLCache sur nil pour une session NSURLSession spécifique ou utilisez la politique de cache .reloadIgnoringLocalCacheData. Vous pouvez également créer une URLSessionConfiguration avec un cache vide : sessionConfiguration.urlCache = nil. C’est utile pour les données qui doivent toujours être à jour.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi