Temporary Directory (tmp) es un directorio dentro del sandbox de una aplicación iOS para almacenar datos extremadamente temporales que solo se necesitan durante la sesión actual de la aplicación. Según la Apple File System Programming Guide (2024), el sistema puede limpiar tmp al finalizar cada aplicación o al reiniciar el dispositivo. A diferencia de Caches Directory, los archivos temporales en tmp no están diseñados para persistir entre ejecuciones — el desarrollador debe eliminarlos explícitamente después de usarlos para no desperdiciar espacio en disco.
Puntos clave
Temporary Directory (también conocido como tmp) es un directorio dentro del sandbox de una aplicación iOS diseñado para almacenar datos cuya vida útil se limita a la sesión actual. Es el almacenamiento más efímero entre todos los directorios del sandbox.
iOS proporciona tmp para operaciones que requieren almacenamiento intermedio de archivos: descargar un archivo antes de moverlo a Documents, crear una copia temporal antes de exportar, almacenar en búfer datos de streaming. Una vez completada la operación, los archivos temporales deben eliminarse.
Según la documentación de Apple Developer (2024), el directorio tmp es único porque su ruta puede cambiar entre ejecuciones de la aplicación. iOS genera una nueva ruta tmp en cada inicio — esto garantiza que los datos de la sesión anterior no se lean accidentalmente. El desarrollador nunca debe guardar la ruta tmp entre ejecuciones.
Es importante: a diferencia de Caches Directory, donde los datos pueden sobrevivir a varios inicios, tmp garantiza que los datos no persistan entre sesiones a largo plazo. Es la forma más fiable de almacenar datos verdaderamente temporales.
En Swift, para obtener la ruta a tmp se usa la función global NSTemporaryDirectory() o FileManager.temporaryDirectory. Estas son las API más simples entre todos los directorios del sandbox.
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 usa la misma función global NSTemporaryDirectory(). El resultado es una cadena con la ruta completa al directorio temporal de la aplicación.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Una diferencia clave con otros directorios: NSTemporaryDirectory() no requiere especificar un dominio o máscara de búsqueda — es una función global. Sin embargo, la ruta puede cambiar en el siguiente inicio, por lo que nunca debes guardarla en UserDefaults u otro almacenamiento persistente.
Temporary Directory está diseñada para un conjunto estrictamente definido de escenarios. Los desarrolladores a menudo confunden tmp con Caches, colocando en tmp datos que deberían durar más de una sesión. Veamos los casos de uso correctos.
Archivos creados durante la exportación de datos: una copia temporal de un informe antes de enviarlo por correo, un archivo comprimido antes de subirlo, un archivo intermedio de conversión de formato. Una vez completada la exportación, el archivo debe eliminarse.
Búferes temporales para grabar audio, video o datos de streaming que se procesan en tiempo real. Por ejemplo, grabación de voz antes de guardarla en almacenamiento permanente o almacenamiento en búfer de video durante la transmisión.
| Escenario | Directorio | Justificación |
|---|---|---|
| Exportar PDF antes de enviar | tmp | Archivo no necesario tras envío |
| Cachear imágenes | Caches | Útil entre sesiones |
| Descargar archivo antes de mover | tmp | Almacenamiento intermedio |
| Logs de sesión | tmp | Relevantes solo en la sesión |
| Editar documento | tmp | Versión antes de guardar |
Si los datos solo se necesitan aquí y ahora — usa tmp. Si pueden ser útiles en la próxima sesión — usa Caches. Si la pérdida de datos es inaceptable — usa Documents.
iOS gestiona el ciclo de vida de tmp de manera diferente a otros directorios del sandbox. Comprender este ciclo es fundamental para diseñar correctamente el almacenamiento de archivos en la aplicación.
En cada inicio de la aplicación, iOS puede asignar una nueva ruta para tmp. La ruta anterior deja de ser accesible, aunque los archivos físicos pueden permanecer en el disco hasta que se reinicie el dispositivo. Por esta razón, Apple recomienda encarecidamente no guardar la ruta tmp entre sesiones.
Según Apple Tech Note TN2150 (2024), el sistema puede limpiar tmp en los siguientes casos: reinicio del dispositivo, límite de espacio en disco alcanzado, descarga de la aplicación (Offload). A diferencia de Caches, tmp no está diseñada para almacenar datos ni siquiera entre varios inicios — es el almacenamiento menos fiable del sandbox.
El desarrollador debe eliminar explícitamente los archivos temporales después de completar una operación usando FileManager.removeItem(at:). Los archivos no eliminados en tmp se acumulan y desperdician espacio en disco — iOS no garantiza su limpieza automática a corto plazo.
Comparar tmp y Caches ayuda a los desarrolladores a tomar la decisión correcta al elegir un directorio para almacenar datos. Elegir incorrectamente puede llevar a una pérdida prematura de datos o a un consumo innecesario de espacio.
| Parámetro | Temporary Directory | Caches Directory |
|---|---|---|
| Vida útil | Solo sesión actual | Entre sesiones (sin garantías) |
| Cambio de ruta | Puede cambiar cada inicio | Ruta estable |
| Limpieza automática | Al reiniciar, al descargar | Cuando falta espacio |
| Eliminación por desarrollador | Obligatoria tras operación | Recomendada al superar límite |
| Uso | Operaciones intermedias | Caché persistente |
Una regla práctica: elige tmp para datos que se eliminarán en segundos o minutos tras su creación. Elige Caches para datos que es útil conservar durante horas o días entre sesiones, pero que pueden regenerarse.
Trabajar con Temporary Directory requiere disciplina: dado que los datos en tmp son efímeros y su acumulación puede provocar un desperdicio de espacio, los desarrolladores deben seguir varias prácticas clave.
FileManager.removeItem(at:) debe llamarse inmediatamente después de completar una operación con un archivo temporal. Usa defer en Swift para garantizar la eliminación incluso si ocurre un error.
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
Si los datos pueden ser necesarios una hora después de su creación — guárdalos en Caches o Application Support. tmp está diseñada para operaciones de minutos, no para almacenamiento.
Seguir estas reglas garantiza que los archivos temporales no se acumulen, el espacio en disco se utilice de manera eficiente y la aplicación maneje correctamente cualquier escenario de limpieza del sistema de archivos de iOS.
Preguntas frecuentes
Normalmente la ruta no cambia dentro de una misma sesión, pero iOS no lo garantiza. En casos raros, el sistema puede cambiar tmp cuando la aplicación pasa de segundo plano a primer plano. Por eso Apple recomienda llamar a NSTemporaryDirectory() cada vez que necesites la ruta en lugar de almacenarla en una variable.
Los archivos se acumularán y ocuparán espacio en disco. iOS puede limpiar tmp al reiniciar el dispositivo, pero hasta entonces la aplicación desperdiciará espacio en disco. Con una acumulación significativa, el usuario puede ver en los ajustes de almacenamiento que la aplicación ocupa mucho espacio.
Sí, puedes usar DataProtectionType con NSFileProtectionComplete para archivos temporales que contengan datos sensibles. Sin embargo, ten en cuenta: si el archivo solo se leerá dentro de la sesión actual y luego se eliminará, el cifrado puede ser excesivo. Evalúa la necesidad de cifrado según el tipo de datos.
Usa ProcessInfo.processInfo.globallyUniqueString para generar un identificador único, o UUID().uuidString. FileManager también proporciona el método urlForCreatingTemporaryFile, que genera automáticamente un nombre único en tmp. Esto garantiza que no haya colisiones durante escrituras paralelas.
Indirectamente — sí. Apple presta atención a la cantidad total de datos que la aplicación almacena en el disco. Si tmp contiene gigabytes de archivos no eliminados, el revisor puede rechazar la aplicación. El límite recomendado para tmp es de no más de 100 MB en cualquier momento. Limpia tmp regularmente y verifica su tamaño mediante FileManager.
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