Caches Directory es un directorio dentro del sandbox de la aplicación iOS diseñado para almacenar datos temporales que pueden restaurarse o recargarse desde la red. Según Apple File System Basics (2024), el sistema puede eliminar archivos del Caches Directory en cualquier momento para liberar espacio en disco — la aplicación debe manejar correctamente la ausencia de estos archivos y restaurarlos cuando sea necesario. A diferencia del Documents Directory, los datos de Caches no se incluyen en las copias de seguridad de iCloud e iTunes, lo que reduce la carga en el almacenamiento en la nube del usuario.
Puntos Clave
Caches Directory es un directorio dentro del sandbox de la aplicación iOS optimizado para almacenar datos que pueden restaurarse cuando sea necesario. A diferencia del Documents Directory, Caches no está diseñado para datos de usuario — es un almacenamiento temporal para acelerar el rendimiento de la aplicación.
iOS utiliza el Caches Directory para almacenar respuestas de red en caché, imágenes precargadas, objetos serializados y datos que la aplicación puede restaurar. Los desarrolladores no deben confiar en el almacenamiento a largo plazo en este directorio.
Según Apple WWDC 2020, aproximadamente el 40% de las aplicaciones iOS usan el Caches Directory para almacenar imágenes y datos de red en caché, mientras que el 25% de los desarrolladores colocan incorrectamente en Caches datos que deberían estar en Documents o Application Support por no comprender las diferencias entre estos directorios.
Una propiedad crítica de Caches: la aplicación debe manejar correctamente las situaciones en las que un archivo de caché ha sido eliminado por el sistema. Si eliminar la caché rompe la funcionalidad de la aplicación, entonces los datos se almacenan en el directorio incorrecto.
En Swift, la ruta al Caches Directory se obtiene mediante el método estándar de FileManager con .cachesDirectory. Esta es una operación simple utilizada en prácticamente todas las aplicaciones iOS que trabajan con datos de red.
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 utiliza NSSearchPathForDirectoriesInDomains con NSCachesDirectory. Aunque Apple recomienda la API Swift, el código Objective-C con Caches Directory sigue siendo funcional y tiene soporte.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSCachesDirectory,
NSUserDomainMask,
YES
);
NSString *cachesPath = paths.firstObject;
NSString *cacheFile = [cachesPath stringByAppendingPathComponent:@"feed_cache.plist"];
Los proyectos Swift deben preferir la API basada en URL: es type-safe y se integra mejor con frameworks modernos como SwiftUI y Combine.
Caches Directory es óptimo para varias categorías de datos que la aplicación usa para acelerar el rendimiento, pero no es la única fuente de verdad. Elegir los datos correctos para el caché afecta directamente la UX y el rendimiento de la aplicación.
Respuestas JSON de APIs, datos de feeds de noticias, listas de objetos — todo lo que la aplicación pueda descargar nuevamente del servidor. Usa URLCache para el caché automático de respuestas HTTP o guarda manualmente objetos serializados.
Imágenes descargadas de la red son el caso de uso más común del Caches Directory. Librerías como SDWebImage y Kingfisher guardan las imágenes en caché en Caches por defecto.
| Tipo de dato | Adecuado para Caches | Período de retención |
|---|---|---|
| JSON respuestas API | Sí | Hasta limpieza del sistema |
| Imágenes de red | Sí | Hasta limpieza del sistema |
| Logs de depuración | Condicional | Mejor en tmp |
| Partidas guardadas | No | Solo Documents |
| Configuraciones de app | No | Application Support |
Si los datos no pueden restaurarse, no pertenecen a Caches. Este es el criterio más simple: imagina que mañana el sistema elimina todos los archivos de Caches. Si la aplicación sigue funcionando correctamente, los datos están almacenados correctamente.
iOS gestiona automáticamente la limpieza del Caches Directory, pero los desencadenantes y algoritmos exactos no están documentados por Apple. Se sabe que el sistema puede eliminar archivos de Caches cuando falta espacio en disco, así como cuando la función Offload Unused Apps está activa.
El proceso de limpieza es transparente para la aplicación: el sistema elimina archivos sin notificación. La aplicación debe verificar la existencia del archivo antes de leerlo y crearlo de nuevo si está ausente. No depender del almacenamiento a largo plazo es un requisito clave al trabajar con Caches.
Según el artículo de Apple “File System Basics” (2024), la aplicación no debe esperar que los archivos en el Caches Directory estén disponibles entre sesiones. Se recomienda a los desarrolladores implementar un mecanismo de respaldo: si falta un archivo en caché, descargar los datos de la red y guardarlos nuevamente en Caches.
Un escenario aparte es la descarga de aplicaciones (Offload). Cuando esta función se activa, iOS elimina la aplicación pero conserva su Documents Directory. El Caches Directory se elimina en el proceso. Un usuario que restaura la aplicación no tendrá datos en caché — la aplicación debe descargarlos nuevamente.
La diferencia entre los directorios Caches y Temporary (tmp) a menudo causa confusión entre los desarrolladores. Ambos directorios almacenan datos temporales, pero con diferentes garantías de tiempo de vida y propósito.
| Característica | Caches Directory | Temporary Directory |
|---|---|---|
| Tiempo de vida | De sesión a sesión (no garantizado) | Solo dentro de una sesión |
| Limpieza del sistema | Cuando falta espacio | Al finalizar la sesión o reiniciar |
| Propósito | Caché para acelerar el rendimiento | Datos muy temporales |
| Ejemplo | Imágenes en caché | Archivo temporal antes de exportar |
| Copia de seguridad | No | No |
Elige Caches si es beneficioso conservar datos entre inicios de la aplicación pero pueden restaurarse. Usa tmp si los datos solo se necesitan dentro de la sesión actual y no tienen valor después de que la aplicación finalice.
Trabajar con el Caches Directory requiere seguir varias reglas que ayudan a evitar la pérdida de datos, comportamientos inesperados de la aplicación y problemas de rendimiento.
FileManager.fileExists(atPath:) debe llamarse antes de cada lectura desde Caches. Si falta el archivo, carga los datos desde la fuente original y guárdalos en caché. Nunca asumas que un archivo en Caches existe.
Establece un tamaño máximo para el Caches Directory en tu aplicación. Por ejemplo, un límite de 50 MB para imágenes y 10 MB para respuestas JSON. Cuando se supere el límite, elimina los archivos más antiguos por fecha de modificación.
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
}
Seguir estas prácticas garantiza que la aplicación funcione correctamente independientemente de las acciones de limpieza del caché del sistema, y los usuarios no se encuentren con pérdidas inesperadas de datos.
Preguntas Frecuentes
No, iOS no envía notificaciones antes de eliminar archivos de Caches. El proceso de limpieza es completamente transparente para la aplicación. La única forma de saber si un archivo fue eliminado es al intentar leerlo — FileManager devuelve nil o lanza un error, y la aplicación debe manejar esta situación.
Los usuarios no tienen acceso directo al Caches Directory a través de Files o iTunes. Sin embargo, pueden limpiar el caché de todas las aplicaciones mediante Ajustes > General > Almacenamiento, seleccionar una aplicación específica y pulsar “Descargar App.” iOS también puede limpiar el caché automáticamente cuando falta espacio.
URLCache es un mecanismo integrado de caché de solicitudes HTTP de Foundation. Guarda y carga automáticamente respuestas en caché, utilizando el Caches Directory internamente. El guardado manual ofrece más control: puedes elegir el formato, cifrar datos y gestionar el tiempo de vida de cada archivo individualmente.
Al actualizar la aplicación a través de la App Store, el Caches Directory se conserva. Sin embargo, el sistema puede eliminar su contenido si la nueva actualización requiere más espacio para instalarse. Los desarrolladores no deben confiar en la persistencia de Caches después de una actualización — esta es una razón adicional para implementar un mecanismo de respaldo.
Establece URLCache en nil para una sesión NSURLSession específica o usa la política de caché .reloadIgnoringLocalCacheData. También puedes crear una URLSessionConfiguration con un caché vacío: sessionConfiguration.urlCache = nil. Esto es útil para datos que siempre deben estar actualizados.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también