Temporary Directory — что это, временные файлы и управление storage

Автор: IT Sectr Опубликовано: 2026-07-10 Время чтения: 10 мин

Temporary Directory (tmp) — это директория в песочнице 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 Documentation (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 рекомендует получать путь к tmp через 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 года. Мы проконсультируем вас и предложим наилучшее решение.

Обсудить проект

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