Temporary Directory — co to jest, pliki tymczasowe i zarządzanie pamięcią masową

Autor: IT Sectr Opublikowano: 2026-07-10 Czas czytania: 10 min

Temporary Directory (tmp) — to katalog w piaskownicy aplikacji iOS do przechowywania bardzo krótkotrwałych danych, które są potrzebne tylko w bieżącej sesji aplikacji. Według Apple File System Programming Guide (2024), system może czyścić tmp przy każdym zakończeniu aplikacji lub przy restarcie urządzenia. W przeciwieństwie do Caches Directory, pliki tymczasowe w tmp nie są przeznaczone do przechowywania między uruchomieniami — programista musi je jawnie usuwać po użyciu, aby nie zajmować miejsca na dysku.

Najważniejsze

  • Temporary Directory — katalog dla danych potrzebnych tylko w bieżącej sesji aplikacji.
  • System iOS może wyczyscić tmp przy restarcie urządzenia lub zakończeniu aplikacji.
  • Pliki z tmp nie są uwzględniane w kopiach zapasowych iCloud i iTunes.
  • Ścieżkę do tmp uzyskuje się przez NSTemporaryDirectory() w Swift lub Objective-C.
  • Programista musi samodzielnie usuwać pliki z tmp po użyciu.

Czym jest Temporary Directory w iOS?

Temporary Directory (znany również jako tmp) — to katalog wewnątrz piaskownicy aplikacji iOS, przeznaczony do przechowywania danych, których czas życia jest ograniczony do bieżącej sesji. To najbardziej krótkotrwałe przechowywanie spośród wszystkich katalogów piaskownicy.

iOS udostępnia tmp do operacji wymagających pośredniego przechowywania plików: pobieranie pliku przed przeniesieniem do Documents, tworzenie tymczasowej kopii przed eksportem, buforowanie danych strumieniowych. Po zakończeniu operacji pliki tymczasowe powinny zostać usunięte.

Według Apple Developer Documentation (2024), katalog tmp jest wyjątkowy, ponieważ jego ścieżka może się zmieniać między uruchomieniami aplikacji. iOS generuje nową ścieżkę do tmp przy każdym uruchomieniu — gwarantuje to, że dane z poprzedniej sesji nie zostaną przypadkowo odczytane. Programista nigdy nie powinien zapisywać ścieżki do tmp między uruchomieniami.

Wartością uwagi: w przeciwieństwie do Caches Directory, gdzie dane mogą przetrwać kilka uruchomień, tmp nie gwarantuje przechowywania danych między sesjami w długoterminowej perspektywie. To najbardziej niezawodny sposób przechowywania naprawdę tymczasowych danych.

Jak uzyskać ścieżkę do Temporary Directory

W Swift do uzyskania ścieżki do tmp używa się globalnej funkcji NSTemporaryDirectory() lub FileManager.temporaryDirectory. To najprostsze API spośród wszystkich katalogów piaskownicy.

swift
import Foundation

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

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

Objective-C używa tej samej globalnej funkcji NSTemporaryDirectory(). Wynik — ciąg znaków z pełną ścieżką do tymczasowego katalogu aplikacji.

objective-c
@import Foundation;

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

Kluczowa różnica od innych katalogów: NSTemporaryDirectory() nie wymaga podania domeny ani maski — to funkcja globalna. Jednak ścieżka może się zmienić przy następnym uruchomieniu, więc nigdy nie zapisuj jej w UserDefaults ani innym trwałym przechowywaniu.

Jakie dane przechowywać w tmp

Temporary Directory jest przeznaczona dla ściśle określonego zestawu scenariuszy. Programiści często mylą tmp z Caches, umieszczając w tmp dane, które powinny żyć dłużej niż jedna sesja. Rozważmy prawidłowe przypadki użycia.

Pliki pośrednie podczas eksportu

Pliki tworzone w procesie eksportu danych: tymczasowa kopia raportu przed wysłaniem pocztą, skompresowane archiwum przed pobraniem, pośredni plik konwersji formatów. Po zakończeniu eksportu plik powinien zostać usunięty.

Buforowanie danych strumieniowych

Tymczasowe bufory do zapisu audio, wideo lub danych strumieniowych przetwarzanych w czasie rzeczywistym. Na przykład nagrywanie głosu przed zapisaniem w stałym przechowywaniu lub buforowanie strumienia wideo podczas streamingu.

ScenariuszKatalogUzasadnienie
Eksport PDF przed wysłaniemtmpPlik nie jest potrzebny po wysłaniu
Pamięć podręczna obrazówCachesPrzydatne między sesjami
Pobieranie pliku przed przeniesieniemtmpPrzechowywanie pośrednie
Logi sesjitmpAktualne tylko w sesji
Edycja dokumentutmpWersja przed zapisaniem

Jeśli dane są potrzebne tylko tu i teraz — używaj tmp. Jeśli mogą się przydać w następnej sesji — używaj Caches. Jeśli utrata danych jest niedopuszczalna — używaj Documents.

Cykl życia plików tymczasowych

iOS zarządza cyklem życia tmp inaczej niż innymi katalogami piaskownicy. Zrozumienie tego cyklu jest krytycznie ważne dla prawidłowego projektowania przechowywania plików w aplikacji.

Przy każdym uruchomieniu aplikacji iOS może przydzielić nową ścieżkę dla tmp. Poprzednia ścieżka przestaje być dostępna, chociaż fizyczne pliki mogą pozostać na dysku aż do restartu urządzenia. Właśnie z tego powodu Apple zdecydowanie zaleca, aby nie zapisywać ścieżki do tmp między sesjami.

Według Apple Tech Note TN2150 (2024), system może czyścić tmp w następujących przypadkach: przy restarcie urządzenia, po osiągnięciu limitu miejsca na dysku, przy wyładowaniu aplikacji (Offload). W przeciwieństwie do Caches, tmp nie jest przeznaczona do przechowywania danych nawet w ramach kilku uruchomień — to najbardziej zawodne przechowywanie w piaskownicy.

Programista ma obowiązek jawnego usuwania plików tymczasowych po zakończeniu operacji za pomocą FileManager.removeItem(at:). Nieusunięte pliki w tmp gromadzą się i zajmują miejsce na dysku — iOS nie gwarantuje ich automatycznego czyszczenia w najbliższym czasie.

Temporary Directory vs Caches Directory

Porównanie tmp i Caches pomaga programistom podejmować właściwe decyzje przy wyborze katalogu do przechowywania. Błąd w wyborze może prowadzić albo do przedwczesnej utraty danych, albo do nieuzasadnionego zużycia miejsca.

ParametrTemporary DirectoryCaches Directory
Czas życiaTylko bieżąca sesjaMiędzy sesjami (bez gwarancji)
Zmiana ścieżkiMoże się zmieniać co uruchomienieStabilna ścieżka
Automatyczne czyszczeniePrzy restarcie, przy wyładowaniuPrzy braku miejsca
Usuwanie przez programistęObowiązkowe po operacjiZalecane po przekroczeniu limitu
ZastosowanieOperacje pośrednieTrwała pamięć podręczna

Praktyczna zasada: wybieraj tmp dla danych, które zostaną usunięte w ciągu kilku sekund lub minut po utworzeniu. Wybieraj Caches dla danych, które warto zachować na kilka godzin lub dni między sesjami, ale które można odtworzyć.

Najlepsze praktyki pracy z tmp

Praca z Temporary Directory wymaga dyscypliny: ponieważ dane w tmp są krótkotrwałe, a ich gromadzenie może prowadzić do nieuzasadnionego zużycia miejsca, programista powinien przestrzegać kilku kluczowych praktyk.

Zawsze usuwaj pliki po użyciu

FileManager.removeItem(at:) powinien być wywoływany natychmiast po zakończeniu operacji na pliku tymczasowym. Używaj defer w Swift, aby zagwarantować usunięcie nawet w przypadku wystąpienia błędu.

swift
import Foundation

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

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

// Praca z plikiem tymczasowym
try "temporary data".write(to: tempURL, atomically: true)
// ... operacja na pliku ...
// defer wykonuje się po wyjściu z zakresu

Nie używaj tmp do długożywotnych danych

Jeśli dane mogą być potrzebne za godzinę po utworzeniu — zapisz je w Caches lub Application Support. tmp jest przeznaczona do minutowych operacji, nie do przechowywania.

Przestrzeganie tych zasad gwarantuje, że pliki tymczasowe nie będą się gromadzić, miejsce na dysku będzie używane efektywnie, a aplikacja poprawnie obsłuży dowolne scenariusze czyszczenia systemu plików iOS.

Często zadawane pytania

Czy ścieżka do Temporary Directory może się zmienić podczas działania aplikacji?

Zazwyczaj ścieżka nie zmienia się w ramach jednej sesji, ale iOS nie daje gwarancji. W rzadkich przypadkach system może zmienić tmp przy przejściu aplikacji z tła do stanu aktywnego. Dlatego Apple zaleca uzyskiwanie ścieżki do tmp przez NSTemporaryDirectory() przy każdym odwołaniu, zamiast zapisywania jej w zmiennej.

Co się stanie, jeśli nie będę usuwać plików z tmp?

Pliki będą się gromadzić i zajmować miejsce na dysku. iOS może wyczyścić tmp przy restarcie urządzenia, ale do tego momentu aplikacja będzie marnować miejsce na dysku. Przy znaczącym nagromadzeniu użytkownik może zobaczyć w ustawieniach pamięci, że aplikacja zajmuje dużo miejsca.

Czy tmp nadaje się do szyfrowania tymczasowych danych?

Tak, możesz użyć DataProtectionType z NSFileProtectionComplete dla plików tymczasowych zawierających wrażliwe dane. Pamiętaj jednak: jeśli plik będzie odczytany tylko w ramach bieżącej sesji, a następnie usunięty — szyfrowanie może być zbędne. Oceń potrzebę szyfrowania w zależności od rodzaju danych.

Jak utworzyć unikalną nazwę pliku w tmp bez kolizji?

Użyj ProcessInfo.processInfo.globallyUniqueString do generowania unikalnego identyfikatora lub UUID().uuidString. FileManager udostępnia również metodę urlForCreatingTemporaryFile, która automatycznie generuje unikalną nazwę w tmp. To gwarantuje brak kolizji przy równoległym zapisie.

Czy rozmiar tmp wpływa na przejście recenzji w App Store?

Pośrednio — tak. Apple zwraca uwagę na całkowity rozmiar danych przechowywanych przez aplikację na dysku. Jeśli tmp zawiera gigabajty nieusuniętych plików, recenzent może odrzucić aplikację. Zalecany limit dla tmp — nie więcej niż 100 MB w dowolnym momencie. Regularnie czyść tmp i sprawdzaj rozmiar przez FileManager.

Podsumowanie

  • Temporary Directory (tmp) — katalog dla danych, których czas życia jest ograniczony do bieżącej sesji aplikacji.
  • Ścieżka do tmp może się zmieniać między uruchomieniami — nie zapisuj jej w trwałym przechowywaniu.
  • System może wyczyścić tmp przy restarcie urządzenia lub wyładowaniu aplikacji.
  • Pliki z tmp nie są uwzględniane w kopiach zapasowych iCloud i iTunes.
  • W przeciwieństwie do Caches Directory, tmp nie jest przeznaczona do przechowywania między sesjami.
  • Programista musi jawnie usuwać pliki tymczasowe za pomocą FileManager.removeItem.
  • Używaj defer w Swift do gwarantowanego usunięcia plików tymczasowych przy dowolnym wyniku operacji.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również