Temporary Directory (tmp) — är en katalog i iOS-appens sandlåda för lagring av mycket kortvariga data som bara behövs inom den aktuella app-sessionen. Enligt Apple File System Programming Guide (2024) kan systemet rensa tmp vid varje avslutning av appen eller vid omstart av enheten. Till skillnad från Caches Directory är temporära filer i tmp inte avsedda för lagring mellan starter — utvecklaren måste explicit ta bort dem efter användning för att inte uppta diskutrymme.
Huvudpunkter
Temporary Directory (även känt som tmp) — är en katalog inuti iOS-appens sandlåda, avsedd för lagring av data vars livslängd är begränsad till den aktuella sessionen. Detta är den kortaste lagringen bland alla sandlådans kataloger.
iOS tillhandahåller tmp för operationer som kräver mellanliggande fillagring: nedladdning av en fil innan den flyttas till Documents, skapa en temporär kopia före export, buffring av strömmande data. Efter slutförandet av operationen måste temporära filer tas bort.
Enligt Apple Developer Documentation (2024) är tmp-katalogen unik eftersom dess sökväg kan ändras mellan appstarter. iOS genererar en ny sökväg till tmp vid varje start — detta garanterar att data från föregående session inte läses av misstag. Utvecklaren bör aldrig spara sökvägen till tmp mellan starter.
Viktigt: till skillnad från Caches Directory, där data kan överleva flera starter, garanterar inte tmp lagring av data mellan sessioner på lång sikt. Detta är det mest pålitliga sättet att lagra verkligt temporära data.
I Swift för att få sökvägen till tmp används den globala funktionen NSTemporaryDirectory() eller FileManager.temporaryDirectory. Detta är det enklaste API:t bland alla sandlådans kataloger.
import Foundation
// Alternativ 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
.appendingPathComponent("export_temp.pdf")
// Alternativ 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")
Objective-C använder samma globala funktion NSTemporaryDirectory(). Resultatet är en sträng med den fullständiga sökvägen till appens temporära katalog.
@import Foundation;
NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];
Den viktigaste skillnaden från andra kataloger: NSTemporaryDirectory() kräver inte angivelse av domän eller mask — det är en global funktion. Sökvägen kan dock ändras vid nästa start, så spara den aldrig i UserDefaults eller annan beständig lagring.
Temporary Directory är avsedd för en strikt definierad uppsättning scenarier. Utvecklare blandar ofta ihop tmp med Caches och placerar i tmp data som borde leva längre än en session. Låt oss titta på de korrekta användningsfallen.
Filer som skapas under export av data: en temporär kopia av en rapport innan den skickas via e-post, ett komprimerat arkiv före nedladdning, en mellanliggande fil för formatkonvertering. Efter slutförd export måste filen tas bort.
Temporära buffertar för inspelning av ljud, video eller strömmande data som bearbetas i realtid. Till exempel röstinspelning innan den sparas i permanent lagring eller buffring av videoström vid streaming.
| Scenario | Katalog | Motivering |
|---|---|---|
| Export PDF före sändning | tmp | Filen behövs inte efter sändning |
| Cache av bilder | Caches | Användbart mellan sessioner |
| Nedladdning av fil före flytt | tmp | Mellanliggande lagring |
| Loggar för session | tmp | Aktuella endast i sessionen |
| Redigering av dokument | tmp | Version före sparande |
Om data behövs bara här och nu — använd tmp. Om de kan vara användbara i nästa session — använd Caches. Om dataförlust är oacceptabel — använd Documents.
iOS hanterar livscykeln för tmp annorlunda än andra sandlådekataloger. Att förstå denna cykel är avgörande för korrekt design av fillagring i appen.
Vid varje start av appen kan iOS tilldela en ny sökväg för tmp. Den föregående sökvägen blir otillgänglig, även om fysiska filer kan finnas kvar på diskten tills enheten startas om. Det är av denna anledning Apple starkt rekommenderar att inte spara sökvägen till tmp mellan sessioner.
Enligt Apple Tech Note TN2150 (2024) kan systemet rensa tmp i följande fall: vid omstart av enheten, när diskutrymmesgränsen nås, vid avlastning av appen (Offload). Till skillnad från Caches är tmp inte avsedd för lagring av data ens över flera starter — detta är den minst pålitliga lagringen i sandlådan.
Utvecklaren är skyldig att explicit ta bort temporära filer efter slutförd operation med FileManager.removeItem(at:). Ej borttagna filer i tmp ackumuleras och upptar diskutrymme — iOS garanterar inte deras automatiska rensning inom en snar framtid.
Jämförelse av tmp och Caches hjälper utvecklare att fatta rätt beslut vid val av katalog för lagring. Ett fel i valet kan leda till antingen för tidig dataförlust eller onödigt slöseri med utrymme.
| Parameter | Temporary Directory | Caches Directory |
|---|---|---|
| Livslängd | Endast aktuell session | Mellan sessioner (utan garanti) |
| Sökvägsändring | Kan ändras varje start | Stabil sökväg |
| Automatisk rensning | Vid omstart, vid avlastning | Vid utrymmesbrist |
| Borttagning av utvecklare | Obligatoriskt efter operation | Rekommenderas vid överskriden gräns |
| Användning | Mellanliggande operationer | Beständig cache |
Praktisk regel: välj tmp för data som kommer att tas bort inom några sekunder eller minuter efter skapande. Välj Caches för data som är värda att behålla i några timmar eller dagar mellan sessioner, men som kan återskapas.
Arbete med Temporary Directory kräver disciplin: eftersom data i tmp är kortlivade och deras ackumulering kan leda till onödigt slöseri med utrymme, måste utvecklaren följa flera viktiga praxis.
FileManager.removeItem(at:) bör anropas omedelbart efter slutförandet av operationen med den temporära filen. Använd defer i Swift för garanterad borttagning även vid fel.
import Foundation
let tempURL = FileManager.default
.temporaryDirectory
.appendingPathComponent("upload_temp.dat")
defer {
try? FileManager.default.removeItem(at: tempURL)
}
// Arbeta med temporär fil
try "temporary data".write(to: tempURL, atomically: true)
// ... filoperation ...
// defer körs när scopet lämnas
Om data kan behövas en timme efter skapande — spara dem i Caches eller Application Support. tmp är avsedd för minutoperationer, inte för lagring.
Att följa dessa regler garanterar att temporära filer inte ackumuleras, diskutrymme används effektivt och appen korrekt hanterar alla rensningsscenarier för iOS-filsystemet.
Vanliga frågor
Vanligtvis ändras inte sökvägen inom en session, men iOS ger inga garantier. I sällsynta fall kan systemet ändra tmp när appen går från bakgrunden till aktivt tillstånd. Därför rekommenderar Apple att hämta sökvägen till tmp via NSTemporaryDirectory() vid varje anrop, istället för att spara den i en variabel.
Filer kommer att ackumuleras och uppta diskutrymme. iOS kan rensa tmp vid omstart av enheten, men fram till dess kommer appen att slösa diskutrymme. Vid betydande ackumulering kan användaren se i lagringsinställningarna att appen tar mycket plats.
Ja, du kan använda DataProtectionType med NSFileProtectionComplete för temporära filer som innehåller känsliga data. Kom dock ihåg: om filen endast läses inom den aktuella sessionen och sedan tas bort — kan kryptering vara överflödig. Bedöm behovet av kryptering baserat på datatypen.
Använd ProcessInfo.processInfo.globallyUniqueString för att generera en unik identifierare eller UUID().uuidString. FileManager tillhandahåller också metoden urlForCreatingTemporaryFile som automatiskt genererar ett unikt namn i tmp. Detta garanterar frånvaro av kollisioner vid parallell skrivning.
Indirekt — ja. Apple uppmärksammar den totala mängden data som appen lagrar på disken. Om tmp innehåller gigabyte med ej borttagna filer kan granskaren avvisa appen. Den rekommenderade gränsen för tmp är högst 100 MB vid varje given tidpunkt. Rensa tmp regelbundet och kontrollera dess storlek via FileManager.
Sammanfattning
Vi utvecklar en mobil applikation nyckelfärdigt
IT Sectr skapar iOS- och Android-applikationer för startups och företag sedan 2017. Vi ger dig råd och föreslår den bästa lösningen.
Läs också