Temporary Directory — що це, тимчасові файли та управління сховищем

Автор: IT Sectr Опубліковано: 2026-07-10 Час читання: 10 хв

Temporary Directory (tmp) — це каталог в пісочниці (sandbox) додатка iOS для зберігання надзвичайно короткочасових даних, які потрібні лише в межах поточної сесії додатка. Згідно з Apple File System Programming Guide (2024), система може очищати tmp при кожному завершенні додатка або перезавантаженні пристрою. На відміну від Caches Directory, тимчасові файли в tmp не призначені для зберігання між запусками — розробник повинен явно видаляти їх після використання, щоб не витрачати місце на диску.

Головне

  • Temporary Directory — каталог для даних, які потрібні лише в поточній сесії додатка.
  • Система iOS може очистити tmp при перезавантаженні пристрою або завершенні додатка.
  • Файли з tmp не включаються в резервні копії iCloud та iTunes.
  • Шлях до tmp отримується через NSTemporaryDirectory() в Swift або Objective-C.
  • Розробник повинен самостійно видаляти файли з tmp після використання.

Що таке Temporary Directory в iOS?

Temporary Directory (також відомий як tmp) — це каталог всередині пісочниці додатка iOS, призначений для зберігання даних, чий термін життя обмежений поточною сесією. Це найкоротшовачніше сховище серед усіх каталогів пісочниці.

iOS надає tmp для операцій, які потребують проміжного файлового зберігання: завантаження файлу перед переміщенням в Documents, створення тимчасової копії перед експортом, буферизація потокових даних. Після завершення операції тимчасові файли повинні бути видалені.

Згідно з документацією Apple Developer (2024), каталог tmp є унікальним, оскільки його шлях може змінюватися між запусками додатка. iOS генерує новий шлях tmp при кожному запуску — це гарантує, що дані з попередньої сесії не будуть випадково прочитані. Розробник ніколи не повинен зберігати шлях tmp між запусками.

Важливо: на відміну від Caches Directory, де дані можуть переживати кілька запусків, tmp не гарантує збереження даних між сесіями в довгостроковій перспективі. Це найнадійніший спосіб зберігати дійсно тимчасові дані.

Як отримати шлях до Temporary Directory

В Swift для отримання шляху до tmp використовується глобальна функція NSTemporaryDirectory() або FileManager.temporaryDirectory. Це найпростіші API серед усіх каталогів пісочниці.

swift
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 використовує ту ж глобальну функцію NSTemporaryDirectory(). Результат — рядок з повним шляхом до тимчасового каталогу додатка.

objective-c
@import Foundation;

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

Ключова відмінність від інших каталогів: NSTemporaryDirectory() не потребує зазначення домену або маски пошуку — це глобальна функція. Однак шлях може змінитися при наступному запуску, тому ніколи не зберігайте його в UserDefaults або іншому персистентному сховищі.

Які дані зберігати в tmp

Temporary Directory призначений для чітко визначеного набору сценаріїв. Розробники часто плутають tmp з Caches, розміщуючи в tmp дані, які повинні жити довше однієї сесії. Розглянемо правильні випадки використання.

Проміжні файли під час експорту

Файли, створені в процесі експорту даних: тимчасова копія звіту перед відправкою електронною поштою, стиснений архів перед завантаженням, проміжний файл конвертації формату. Після завершення експорту файл повинен бути видалений.

Буферизація потокових даних

Тимчасові буфери для запису аудіо, відео або потокових даних, що обробляються в реальному часі. Наприклад, запис голосу перед збереженням в постійне сховище або буферизація відеопотоку під час стрімінгу.

СценарійКаталогОбґрунтування
Експорт PDF перед відправкоюtmpФайл не потрібен після відправки
Кешування зображеньCachesКорисно між сесіями
Завантаження файлу перед переміщеннямtmpПроміжне зберігання
Журнали сесіїtmpАктуальні лише в сесії
Редагування документаtmpВерсія перед збереженням

Якщо дані потрібні тільки тут і зараз — використовуйте tmp. Якщо вони можуть стати в нагоді в наступній сесії — використовуйте Caches. Якщо втрата даних неприпустима — використовуйте Documents.

Життєвий цикл тимчасових файлів

iOS керує життєвим циклом tmp інакше, ніж іншими каталогами пісочниці. Розуміння цього циклу критично важливе для правильного проектування файлового зберігання в додатку.

При кожному запуску додатка iOS може виділити новий шлях для tmp. Попередній шлях стає недоступним, хоча фізичні файли можуть залишатися на диску до перезавантаження пристрою. Саме тому Apple настійливо рекомендує не зберігати шлях tmp між сесіями.

Згідно з Apple Tech Note TN2150 (2024), система може очищати tmp в таких випадках: перезавантаження пристрою, досягнення ліміту місця на диску, вивантаження додатка (Offload). На відміну від Caches, tmp не призначений для зберігання даних навіть протягом кількох запусків — це найменш надійне сховище в пісочниці.

Розробник зобов’язаний явно видаляти тимчасові файли після завершення операції за допомогою FileManager.removeItem(at:). Не видалені файли в tmp накопичуються та витрачають місце на диску — iOS не гарантує їх автоматичне очищення найближчим часом.

Temporary Directory vs Caches Directory

Порівняння tmp та Caches допомагає розробникам приймати правильне рішення при виборі каталогу для зберігання. Неправильний вибір може призвести або до передчасної втрати даних, або до невиправданого споживання місця.

ПараметрTemporary DirectoryCaches Directory
Термін життяТільки поточна сесіяМіж сесіями (без гарантій)
Зміна шляхуМоже змінюватися кожний запускСтабільний шлях
Автоматичне очищенняПри перезавантаженні, при вивантаженніПри нестачі місця
Видалення розробникомОбов’язково після операціїРекомендовано при перевищенні ліміту
ВикористанняПроміжні операціїПерсистентний кеш

Практичне правило: обирайте tmp для даних, які будуть видалені протягом секунд або хвилин після створення. Обирайте Caches для даних, які корисно зберігати протягом годин або днів між сесіями, але які можна відтворити.

Найкращі практики роботи з tmp

Робота з Temporary Directory вимагає дисципліни: оскільки дані в tmp є короткочасовими, а їх накопичення може призвести до марнотратного використання місця, розробники повинні дотримуватися кількох ключових практик.

Завжди видаляйте файли після використання

FileManager.removeItem(at:) повинен викликатися одразу після завершення операції з тимчасовим файлом. Використовуйте defer в Swift для гарантованого видалення навіть при виникненні помилки.

swift
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

Не використовуйте tmp для довгоживучих даних

Якщо дані можуть знадобитися через годину після створення — зберігайте їх в Caches або Application Support. tmp призначений для хвилинних операцій, а не для зберігання.

Дотримання цих правил гарантує, що тимчасові файли не накопичуються, місце на диску використовується ефективно, а додаток коректно обробляє будь-які сценарії очищення файлової системи iOS.

Часто задавані питання

Чи може змінитися шлях до Temporary Directory під час роботи додатка?

Зазвичай шлях не змінюється в межах однієї сесії, але iOS не дає гарантій. У рідкісних випадках система може змінити tmp при переході додатка з фону в активний стан. Тому Apple рекомендує викликати NSTemporaryDirectory() кожного разу, коли потрібен шлях, а не зберігати його в змінній.

Що відбудеться, якщо не видаляти файли з tmp?

Файли накопичуватимуться та займатимуть місце на диску. iOS може очистити tmp при перезавантаженні пристрою, але до того часу додаток буде витрачати місце на диску марно. При значному накопиченні користувач може побачити в налаштуваннях сховища, що додаток займає багато місця.

Чи підходить tmp для шифрування тимчасових даних?

Так, ви можете використовувати DataProtectionType з NSFileProtectionComplete для тимчасових файлів, що містять чутливі дані. Однак пам’ятайте: якщо файл буде прочитаний лише в поточній сесії, а потім видалений — шифрування може бути надлишковим. Оцініть необхідність шифрування виходячи з типу даних.

Як створити унікальне ім’я файлу в tmp без колізій?

Використовуйте ProcessInfo.processInfo.globallyUniqueString для генерації унікального ідентифікатора або UUID().uuidString. FileManager також надає метод urlForCreatingTemporaryFile, який автоматично створює унікальне ім’я в tmp. Це гарантує відсутність колізій при паралельному записі.

Чи впливає розмір tmp на проходження ревю в App Store?

Опосередковано — так. Apple звертає увагу на загальний обсяг даних, які додаток зберігає на диску. Якщо tmp містить гігабайти не видалених файлів, рецензент може відхилити додаток. Рекомендована межа для tmp — не більше 100 МБ в будь-який момент часу. Регулярно очищайте tmp та перевіряйте його розмір через FileManager.

Підсумки

  • Temporary Directory (tmp) — каталог для даних, чий термін життя обмежений поточною сесією додатка.
  • Шлях до tmp може змінюватися між запусками — не зберігайте його в персистентному сховищі.
  • Система може очистити tmp при перезавантаженні пристрою або вивантаженні додатка.
  • Файли з tmp не включаються в резервні копії iCloud та iTunes.
  • На відміну від Caches Directory, tmp не призначений для зберігання між сесіями.
  • Розробник повинен явно видаляти тимчасові файли за допомогою FileManager.removeItem.
  • Використовуйте defer в Swift для гарантованого видалення тимчасових файлів незалежно від результату операції.

Ми розробимо мобільний застосунок під ключ

IT Sectr створює застосунки для iOS та Android для стартапів і бізнесу з 2017 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

Обговорити проект

Читайте також