Temporary Directory (tmp) est un répertoire dans le sandbox des applications iOS destiné à stocker des données extrêmement temporaires qui ne sont nécessaires que pendant la session en cours de l'application. Selon l'Apple File System Programming Guide (2024), le système peut vider tmp à chaque fin d'application ou redémarrage de l'appareil. Contrairement au Caches Directory, les fichiers temporaires dans tmp ne sont pas destinés à persister entre les lancements — le développeur doit les supprimer explicitement après utilisation pour ne pas gaspiller d'espace disque.
Points clés
Temporary Directory (également appelé tmp) est un répertoire à l'intérieur du sandbox des applications iOS conçu pour stocker des données dont la durée de vie est limitée à la session en cours. C'est le stockage le plus éphémère parmi tous les répertoires du sandbox.
iOS fournit tmp pour les opérations nécessitant un stockage intermédiaire de fichiers : téléchargement d'un fichier avant de le déplacer dans Documents, création d'une copie temporaire avant l'exportation, mise en tampon des données en streaming. Une fois l'opération terminée, les fichiers temporaires doivent être supprimés.
Selon la Documentation Apple Developer (2024), le répertoire tmp est unique car son chemin peut changer entre les lancements de l'application. iOS génère un nouveau chemin tmp à chaque lancement — cela garantit que les données de la session précédente ne soient pas lues accidentellement. Le développeur ne doit jamais enregistrer le chemin tmp entre les lancements.
Important : contrairement au Caches Directory, où les données peuvent survivre à plusieurs lancements, tmp ne garantit pas la persistance des données entre les sessions à long terme. C'est le moyen le plus fiable de stocker des données vraiment temporaires.
En Swift, pour obtenir le chemin vers tmp, on utilise la fonction globale NSTemporaryDirectory() ou FileManager.temporaryDirectory. Ce sont les API les plus simples parmi tous les répertoires du 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 utilise la même fonction globale NSTemporaryDirectory(). Le résultat est une chaîne contenant le chemin complet vers le répertoire temporaire de l'application.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Une différence clé par rapport aux autres répertoires : NSTemporaryDirectory() ne nécessite pas de spécifier un domaine ou un masque de recherche — c'est une fonction globale. Cependant, le chemin peut changer au prochain lancement, donc ne l'enregistrez jamais dans UserDefaults ou tout autre stockage persistant.
Temporary Directory est destinée à un ensemble strictement défini de scénarios. Les développeurs confondent souvent tmp avec Caches, plaçant dans tmp des données qui devraient durer plus d'une session. Voyons les cas d'utilisation corrects.
Fichiers créés lors de l'exportation de données : une copie temporaire d'un rapport avant de l'envoyer par e-mail, une archive compressée avant le téléchargement, un fichier intermédiaire de conversion de format. Une fois l'exportation terminée, le fichier doit être supprimé.
Tampons temporaires pour l'enregistrement audio, vidéo ou de données en streaming traitées en temps réel. Par exemple, enregistrement vocal avant de le sauvegarder dans un stockage permanent, ou mise en tampon d'un flux vidéo pendant le streaming.
| Scénario | Répertoire | Justification |
|---|---|---|
| Exporter un PDF avant envoi | tmp | Fichier inutile après envoi |
| Mettre en cache des images | Caches | Utile entre les sessions |
| Télécharger un fichier avant déplacement | tmp | Stockage intermédiaire |
| Journaux de session | tmp | Pertinents uniquement pendant la session |
| Modifier un document | tmp | Version avant sauvegarde |
Si les données ne sont nécessaires qu'ici et maintenant — utilisez tmp. Si elles peuvent être utiles dans la prochaine session — utilisez Caches. Si la perte de données est inacceptable — utilisez Documents.
iOS gère le cycle de vie de tmp différemment des autres répertoires du sandbox. Comprendre ce cycle est essentiel pour concevoir correctement le stockage de fichiers dans l'application.
À chaque lancement de l'application, iOS peut allouer un nouveau chemin pour tmp. Le chemin précédent devient inaccessible, bien que les fichiers physiques puissent rester sur le disque jusqu'au redémarrage de l'appareil. C'est pourquoi Apple recommande fortement de ne pas enregistrer le chemin tmp entre les sessions.
Selon la Note Technique Apple TN2150 (2024), le système peut vider tmp dans les cas suivants : redémarrage de l'appareil, limite d'espace disque atteinte, déchargement de l'application (Offload). Contrairement à Caches, tmp n'est pas destiné à stocker des données même entre plusieurs lancements — c'est le stockage le moins fiable du sandbox.
Le développeur doit supprimer explicitement les fichiers temporaires après avoir terminé une opération en utilisant FileManager.removeItem(at:). Les fichiers non supprimés dans tmp s'accumulent et gaspillent de l'espace disque — iOS ne garantit pas leur nettoyage automatique dans un proche avenir.
Comparer tmp et Caches aide les développeurs à prendre la bonne décision lors du choix d'un répertoire de stockage. Un choix incorrect peut entraîner soit une perte prématurée de données, soit une consommation inutile d'espace.
| Paramètre | Temporary Directory | Caches Directory |
|---|---|---|
| Durée de vie | Session actuelle uniquement | Entre sessions (sans garantie) |
| Changement de chemin | Peut changer à chaque lancement | Chemin stable |
| Nettoyage automatique | Au redémarrage, au déchargement | En cas de manque d'espace |
| Suppression par le développeur | Obligatoire après opération | Recommandée si dépassement de limite |
| Utilisation | Opérations intermédiaires | Cache persistant |
Une règle pratique : choisissez tmp pour les données qui seront supprimées en quelques secondes ou minutes après leur création. Choisissez Caches pour les données qu'il est utile de conserver pendant des heures ou des jours entre les sessions, mais qui peuvent être régénérées.
Travailler avec Temporary Directory nécessite de la discipline : comme les données dans tmp sont éphémères et que leur accumulation peut entraîner un gaspillage d'espace, les développeurs doivent suivre plusieurs pratiques clés.
FileManager.removeItem(at:) doit être appelé immédiatement après avoir terminé une opération avec un fichier temporaire. Utilisez defer en Swift pour garantir la suppression même en cas d'erreur.
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 les données peuvent être nécessaires une heure après leur création — sauvegardez-les dans Caches ou Application Support. tmp est conçu pour des opérations de quelques minutes, pas pour le stockage.
Suivre ces règles garantit que les fichiers temporaires ne s'accumulent pas, que l'espace disque est utilisé efficacement et que l'application gère correctement tous les scénarios de nettoyage du système de fichiers iOS.
Foire aux questions
Généralement, le chemin ne change pas au sein d'une même session, mais iOS ne le garantit pas. Dans de rares cas, le système peut modifier tmp lorsque l'application passe de l'arrière-plan au premier plan. C'est pourquoi Apple recommande d'appeler NSTemporaryDirectory() chaque fois que vous avez besoin du chemin plutôt que de le stocker dans une variable.
Les fichiers s'accumuleront et occuperont de l'espace disque. iOS peut vider tmp au redémarrage de l'appareil, mais jusque-là, l'application gaspillera de l'espace disque. En cas d'accumulation importante, l'utilisateur peut voir dans les paramètres de stockage que l'application occupe beaucoup d'espace.
Oui, vous pouvez utiliser DataProtectionType avec NSFileProtectionComplete pour les fichiers temporaires contenant des données sensibles. Cependant, gardez à l'esprit : si le fichier n'est lu que dans la session actuelle puis supprimé, le chiffrement peut être excessif. Évaluez la nécessité du chiffrement en fonction du type de données.
Utilisez ProcessInfo.processInfo.globallyUniqueString pour générer un identifiant unique, ou UUID().uuidString. FileManager fournit également la méthode urlForCreatingTemporaryFile, qui génère automatiquement un nom unique dans tmp. Cela garantit l'absence de collisions lors des écritures parallèles.
Indirectement — oui. Apple prête attention à la quantité totale de données que l'application stocke sur le disque. Si tmp contient des gigaoctets de fichiers non supprimés, le réviseur peut rejeter l'application. La limite recommandée pour tmp est de ne pas dépasser 100 Mo à tout moment. Nettoyez tmp régulièrement et vérifiez sa taille via FileManager.
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