Temporary Directory — co to je, dočasné soubory a správa úložiště

Autor: IT Sectr Publikováno: 2026-07-10 Doba čtení: 10 min

Temporary Directory (tmp) — je adresář v sandboxu iOS aplikace pro ukládání velmi krátkodobých dat, která jsou potřeba pouze v rámci aktuální relace aplikace. Podle Apple File System Programming Guide (2024) může systém tmp vyčistit při každém ukončení aplikace nebo při restartu zařízení. Na rozdíl od Caches Directory nejsou dočasné soubory v tmp určeny k ukládání mezi spuštěními — vývojář je musí po použití explicitně odstranit, aby nezabíraly místo na disku.

Hlavní body

  • Temporary Directory — adresář pro data potřebná pouze v aktuální relaci aplikace.
  • Systém iOS může vyčistit tmp při restartu zařízení nebo ukončení aplikace.
  • Soubory z tmp nejsou zahrnuty do záloh iCloud a iTunes.
  • Cesta k tmp se získává přes NSTemporaryDirectory() ve Swift nebo Objective-C.
  • Vývojář musí sám odstranit soubory z tmp po použití.

Co je Temporary Directory v iOS?

Temporary Directory (také známý jako tmp) — je adresář uvnitř sandboxu iOS aplikace, určený pro ukládání dat, jejichž životnost je omezena na aktuální relaci. Toto je nejkratší úložiště ze všech adresářů sandboxu.

iOS poskytuje tmp pro operace vyžadující dočasné ukládání souborů: stažení souboru před přesunem do Documents, vytvoření dočasné kopie před exportem, bufferování streamovaných dat. Po dokončení operace musí být dočasné soubory odstraněny.

Podle Apple Developer Documentation (2024) je tmp adresář jedinečný, protože jeho cesta se může měnit mezi spuštěními aplikace. iOS generuje novou cestu k tmp při každém spuštění — to zaručuje, že data z předchozí relace nebudou náhodně přečtena. Vývojář by nikdy neměl ukládat cestu k tmp mezi spuštěními.

Důležité: na rozdíl od Caches Directory, kde data mohou přežít několik spuštění, tmp nezaručuje ukládání dat mezi relacemi z dlouhodobého hlediska. Toto je nejspolehlivější způsob ukládání skutečně dočasných dat.

Jak získat cestu k Temporary Directory

Ve Swift se pro získání cesty k tmp používá globální funkce NSTemporaryDirectory() nebo FileManager.temporaryDirectory. Toto je nejjednodušší API ze všech adresářů sandboxu.

swift
import Foundation

// Možnost 1: NSTemporaryDirectory()
let tempDir = NSTemporaryDirectory()
let tempFile = (tempDir as NSString)
    .appendingPathComponent("export_temp.pdf")

// Možnost 2: FileManager.temporaryDirectory (URL)
let tempURL = FileManager.default.temporaryDirectory
let exportURL = tempURL.appendingPathComponent("export_temp.pdf")

Objective-C používá stejnou globální funkci NSTemporaryDirectory(). Výsledkem je řetězec s úplnou cestou k dočasnému adresáři aplikace.

objective-c
@import Foundation;

NSString *tempDir = NSTemporaryDirectory();
NSString *tempFile = [tempDir stringByAppendingPathComponent:@"temp_data.bin"];

Klíčový rozdíl od ostatních adresářů: NSTemporaryDirectory() nevyžaduje zadání domény nebo masky — je to globální funkce. Cesta se však může změnit při příštím spuštění, proto ji nikdy neukládejte do UserDefaults nebo jiného trvalého úložiště.

Jaká data ukládat do tmp

Temporary Directory je určen pro přesně definovanou sadu scénářů. Vývojáři často zaměňují tmp s Caches a umísťují do tmp data, která by měla žít déle než jednu relaci. Podívejme se na správné případy použití.

Dočasné soubory při exportu

Soubory vytvářené během exportu dat: dočasná kopie zprávy před odesláním e-mailem, komprimovaný archiv před stažením, dočasný soubor konverze formátů. Po dokončení exportu musí být soubor odstraněn.

Bufferování streamovaných dat

Dočasné buffery pro záznam audia, videa nebo streamovaných dat zpracovávaných v reálném čase. Například nahrávání hlasu před uložením do trvalého úložiště nebo bufferování video streamu při streamování.

ScénářAdresářOdůvodnění
Export PDF před odeslánímtmpSoubor není potřeba po odeslání
Cache obrázkůCachesUžitečné mezi relacemi
Stažení souboru před přesunemtmpDočasné úložiště
Logy relacetmpAktuální pouze v relaci
Úpravy dokumentutmpVerze před uložením

Pokud jsou data potřeba jen tady a teď — použijte tmp. Pokud by se mohla hodit v příští relaci — použijte Caches. Pokud je ztráta dat nepřijatelná — použijte Documents.

Životní cyklus dočasných souborů

iOS spravuje životní cyklus tmp jinak než ostatní adresáře sandboxu. Pochopení tohoto cyklu je kritické pro správný návrh ukládání souborů v aplikaci.

Při každém spuštění aplikace může iOS přidělit novou cestu pro tmp. Předchozí cesta se stává nedostupnou, i když fyzické soubory mohou zůstat na disku až do restartu zařízení. Právě z tohoto důvodu Apple důrazně doporučuje neukládat cestu k tmp mezi relacemi.

Podle Apple Tech Note TN2150 (2024) může systém vyčistit tmp v následujících případech: při restartu zařízení, při dosažení limitu místa na disku, při uvolnění aplikace (Offload). Na rozdíl od Caches není tmp určen k ukládání dat ani v rámci několika spuštění — to je nejméně spolehlivé úložiště v sandboxu.

Vývojář je povinen explicitně odstranit dočasné soubory po dokončení operace pomocí FileManager.removeItem(at:). Neodstraněné soubory v tmp se hromadí a zabírají místo na disku — iOS nezaručuje jejich automatické vyčištění v blízké budoucnosti.

Temporary Directory vs Caches Directory

Srovnání tmp a Caches pomáhá vývojářům učinit správné rozhodnutí při výběru adresáře pro ukládání. Chyba ve výběru může vést buď k předčasné ztrátě dat, nebo k neopodstatněnému plýtvání místem.

ParametrTemporary DirectoryCaches Directory
ŽivotnostPouze aktuální relaceMezi relacemi (bez záruky)
Změna cestyMůže se měnit každé spuštěníStabilní cesta
Automatické čištěníPři restartu, při uvolněníPři nedostatku místa
Odstranění vývojářemPovinné po operaciDoporučeno při překročení limitu
PoužitíDočasné operaceTrvalá cache

Praktické pravidlo: zvolte tmp pro data, která budou odstraněna během několika sekund nebo minut po vytvoření. Zvolte Caches pro data, která stojí za to uchovat několik hodin nebo dní mezi relacemi, ale lze je znovu vytvořit.

Nejlepší postupy práce s tmp

Práce s Temporary Directory vyžaduje disciplínu: protože data v tmp jsou krátkodobá a jejich hromadění může vést k neopodstatněnému plýtvání místem, musí vývojář dodržovat několik klíčových postupů.

Vždy odstraňujte soubory po použití

FileManager.removeItem(at:) by měl být volán ihned po dokončení operace s dočasným souborem. Použijte defer ve Swift pro zaručené odstranění i v případě chyby.

swift
import Foundation

let tempURL = FileManager.default
    .temporaryDirectory
    .appendingPathComponent("upload_temp.dat")

defer {
    try? FileManager.default.removeItem(at: tempURL)
}

// Práce s dočasným souborem
try "temporary data".write(to: tempURL, atomically: true)
// ... operace se souborem ...
// defer se provede při opuštění rozsahu

Nepoužívejte tmp pro dlouhodobá data

Pokud by data mohla být potřeba hodinu po vytvoření — uložte je do Caches nebo Application Support. tmp je určen pro minutové operace, ne pro ukládání.

Dodržování těchto pravidel zaručuje, že se dočasné soubory nehromadí, místo na disku je využíváno efektivně a aplikace správně zpracovává jakýkoli scénář čištění souborového systému iOS.

Často kladené otázky

Může se cesta k Temporary Directory změnit během běhu aplikace?

Obvykle se cesta nemění v rámci jedné relace, ale iOS neposkytuje záruky. Ve vzácných případech může systém změnit tmp při přechodu aplikace z pozadí do aktivního stavu. Proto Apple doporučuje získávat cestu k tmp pomocí NSTemporaryDirectory() při každém volání, namísto ukládání do proměnné.

Co se stane, když neodstraním soubory z tmp?

Soubory se budou hromadit a zabírat místo na disku. iOS může vyčistit tmp při restartu zařízení, ale do té doby bude aplikace plýtvat místem na disku. Při výrazném nahromadění může uživatel v nastavení úložiště vidět, že aplikace zabírá mnoho místa.

Je tmp vhodný pro šifrování dočasných dat?

Ano, můžete použít DataProtectionType s NSFileProtectionComplete pro dočasné soubory obsahující citlivá data. Pamatujte však: pokud bude soubor přečten pouze v aktuální relaci a poté odstraněn — šifrování může být nadbytečné. Posuďte potřebu šifrování na základě typu dat.

Jak vytvořit jedinečný název souboru v tmp bez kolizí?

Použijte ProcessInfo.processInfo.globallyUniqueString pro generování jedinečného identifikátoru nebo UUID().uuidString. FileManager také poskytuje metodu urlForCreatingTemporaryFile, která automaticky generuje jedinečný název v tmp. To zaručuje absenci kolizí při paralelním zápisu.

Ovlivňuje velikost tmp schválení v App Store?

Nepřímo — ano. Apple věnuje pozornost celkové velikosti dat, která aplikace ukládá na disk. Pokud tmp obsahuje gigabajty neodstraněných souborů, recenzent může aplikaci odmítnout. Doporučený limit pro tmp — ne více než 100 MB v každém okamžiku. Pravidelně čistěte tmp a kontrolujte jeho velikost pomocí FileManager.

Shrnutí

  • Temporary Directory (tmp) — adresář pro data, jejichž životnost je omezena na aktuální relaci aplikace.
  • Cesta k tmp se může změnit mezi spuštěními — neukládejte ji do trvalého úložiště.
  • Systém může vyčistit tmp při restartu zařízení nebo uvolnění aplikace.
  • Soubory z tmp nejsou zahrnuty do záloh iCloud a iTunes.
  • Na rozdíl od Caches Directory není tmp určen k ukládání mezi relacemi.
  • Vývojář musí explicitně odstranit dočasné soubory pomocí FileManager.removeItem.
  • Použijte defer ve Swift pro zaručené odstranění dočasných souborů při jakémkoli výsledku operace.

Vyvineme mobilní aplikaci na klíč

IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.

Prodiskutovat projekt

Přečtěte si také