Documents Directory: что это, назначение и доступ к файлам

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

Documents Directory — это директория в песочнице iOS-приложения, предназначенная для хранения пользовательских данных, которые должны сохраняться между сессиями работы приложения и быть доступными пользователю через iTunes File Sharing и iCloud. По данным Apple File System Programming Guide (2024), содержимое этой директории автоматически включается в резервное копирование на iCloud и iTunes, поэтому разработчику важно осознанно выбирать, какие данные размещать в Documents. В отличие от Caches Directory, файлы в Documents не удаляются системой при нехватке места — ответственность за управление размером лежит на приложении.

Главное

  • Documents Directory — основная директория для пользовательских файлов, которые должны сохраняться и быть доступны через iTunes.
  • Данные из Documents автоматически бэкапятся в iCloud и iTunes — учитывай это при проектировании хранилища.
  • Система не удаляет файлы из Documents при очистке кэша — за освобождение места отвечает разработчик.
  • Путь к директории получается через NSSearchPathForDirectoriesInDomains с NSDocumentDirectory или через FileManager.urls.
  • Для больших файлов, которые можно восстановить, используй Caches Directory — чтобы не расходовать место в iCloud-бэкапе.

Что такое Documents Directory в iOS?

Documents Directory — это директория внутри песочницы iOS-приложения, предназначенная для хранения пользовательских данных, которые должны сохраняться между запусками и быть доступными пользователю. Каждое приложение получает собственную изолированную песочницу, и Documents является одной из ключевых директорий наряду с Caches, tmp и Library.

iOS использует строгую песочницу (sandbox): приложение не имеет доступа к файловой системе других приложений и к системным директориям без специальных разрешений. Documents Directory — единственная директория, содержимое которой пользователь может просматривать через iTunes File Sharing (при включении соответствующего ключа UIFileSharingEnabled в Info.plist).

По данным Apple WWDC 2023, более 85% приложений в App Store используют Documents Directory для хранения хотя бы одного типа пользовательских данных — от экспортированных PDF до сохранённых игровых файлов и экспортированных изображений.

Разработчику важно понимать: файлы в Documents автоматически включаются в резервное копирование на iCloud и iTunes. Если приложение сохраняет в Documents большие объёмы данных, которые можно восстановить (например, кэш изображений или временные файлы), это приведёт к неоправданному расходу места в iCloud-хранилище пользователя.

Как получить путь к Documents Directory

В Swift путь к Documents Directory получается через FileManager. Apple рекомендует использовать URL-based API вместо string-based для лучшей совместимости с современными возможностями iOS.

swift
import Foundation

let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

// Create file in Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)

Objective-C использует NSSearchPathForDirectoriesInDomains — более старый, но всё ещё поддерживаемый подход, который возвращает строковый путь вместо URL.

objective-c
@import Foundation;

NSArray *paths = NSSearchPathForDirectoriesInDomains(
    NSDocumentDirectory,
    NSUserDomainMask,
    YES
);
NSString *documentsPath = paths.firstObject;
NSString *filePath = [documentsPath stringByAppendingPathComponent:@"report.pdf"];

Современные проекты на Swift должны использовать FileManager.urls, поскольку этот метод возвращает URL, а не строку, что снижает риск ошибок с кодировкой путей и делает код более типобезопасным.

Какие данные хранить в Documents

Documents Directory предназначена для данных, созданных пользователем или необходимых пользователю в явном виде. Apple выделяет несколько категорий, которые уместно размещать в этой директории.

Пользовательские документы и файлы

Файлы, которые пользователь создаёт или импортирует — текстовые документы, PDF, изображения, экспортированные отчёты, файлы резервных копий. Эти данные имеют прямую ценность для пользователя, и их потеря была бы критичной.

Сохранения игр и состояние приложения

Сейвы игр, файлы состояния приложения, экспортированные проекты — всё, что пользователь ожидает восстановить после переустановки приложения. Однако для критичных данных рекомендуется дополнительно использовать iCloud Key-Value Storage или Core Data с iCloud sync.

Тип данныхПодходит для DocumentsАльтернатива
PDF и текстовые документыДа
Кэш изображенийНетCaches Directory
Сейвы игрДаiCloud KVS
Логи и отладочные данныеНетCaches или tmp
Экспортированные отчётыДа

Ключевой критерий: если данные могут быть восстановлены из сети или пересозданы — им место в Caches, а не в Documents. Каждый гигабайт в Documents — это гигабайт в iCloud-бэкапе пользователя.

Резервное копирование и синхронизация

iOS автоматически включает содержимое Documents Directory в резервное копирование при подключении устройства к iTunes или при синхронизации с iCloud. Это поведение нельзя отключить на уровне директории — только пофайлово через атрибут NSURLIsExcludedFromBackupKey.

Начиная с iOS 5.0, Apple начала отклонять приложения, которые хранят в Documents большие объёмы данных, подлежащих восстановлению. Рекомендация Apple: файлы, которые можно загрузить заново, должны храниться в Caches Directory с флагом исключения из бэкапа.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

// Exclude file from iCloud backup
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true

var fileURL = documentsURL.appendingPathComponent("cached_data.json")
try fileURL.setResourceValues(resourceValues)

iCloud-синхронизация работает через NSUbiquitousContainer, если приложение использует iCloud Documents. В этом случае файлы из Documents Directory автоматически синхронизируются между устройствами пользователя. Для приложений без iCloud синхронизация ограничена резервным копированием.

Documents Directory vs Caches Directory

Различие между Documents и Caches — одно из самых частых заблуждений среди начинающих iOS-разработчиков. Главное отличие: система может в любой момент удалить файлы из Caches для освобождения места, но никогда не трогает Documents без ведома пользователя.

ХарактеристикаDocuments DirectoryCaches Directory
Бэкап в iCloudДа (по умолчанию)Нет
Удаление системойНикогдаПри нехватке места
iTunes File SharingДа (при включении флага)Нет
НазначениеПользовательские данныеКэш, временные данные
Восстановление данныхТребуется восстановлениеМожно перезагрузить из сети

По данным Apple Developer Documentation (2024), неправильное использование Documents Directory — одна из частых причин отклонения приложений на ревью: если приложение хранит в Documents более нескольких мегабайт данных, которые можно восстановить, Apple рекомендует переместить их в Caches или применить NSURLIsExcludedFromBackupKey.

Практическое правило: если пользователь расстроится при потере файла — храни в Documents. Если файл можно заново скачать или сгенерировать — храни в Caches.

Лучшие практики работы с Documents

Опытные iOS-разработчики выработали несколько правил, которые помогают избежать проблем с Documents Directory на всех этапах жизненного цикла приложения — от разработки до публикации в App Store.

Мониторинг размера директории

Регулярно проверяй размер Documents Directory через FileManager.enumerator(at:includingPropertiesForKeys:). Если размер превышает 100 МБ для данных, не являющихся пользовательскими — это повод пересмотреть архитектуру хранения.

Исключение восстанавливаемых файлов из бэкапа

Для любых файлов, которые можно повторно загрузить из сети, установи isExcludedFromBackup = true. Это снижает нагрузку на iCloud-хранилище пользователя и уменьшает риск отклонения приложения App Review.

Миграция при обновлении

При изменении формата данных в Documents предусмотри миграцию: не удаляй старые файлы, пока не убедишься, что новые корректно созданы. Используй version-специфичные поддиректории.

swift
import Foundation

let documentsURL = FileManager.default
    .urls(for: .documentDirectory, in: .userDomainMask)
    .first!

let versionDir = documentsURL.appendingPathComponent("v2")
try FileManager.default.createDirectory(
    at: versionDir,
    withIntermediateDirectories: true
)

Соблюдение этих практик снижает риск потери пользовательских данных, уменьшает размер iCloud-бэкапа и упрощает прохождение ревью в App Store.

Часто задаваемые вопросы

Может ли пользователь получить доступ к Documents Directory без iTunes?

Да, через Files — встроенное приложение iOS начиная с версии 11. При включении ключа UIFileSharingEnabled в Info.plist содержимое Documents Directory отображается в приложении Файлы в разделе "На моём iPhone". Пользователь может просматривать, копировать и удалять файлы.

Что произойдёт с Documents Directory при удалении приложения?

Вся песочница приложения, включая Documents Directory, Caches, tmp и Library, полностью удаляется с устройства. Резервные копии в iCloud сохраняются до момента восстановления или ручного удаления. При переустановке приложение начинает с чистой песочницы.

Как проверить размер Documents Directory в коде?

Используй FileManager.enumerator для обхода всех файлов в директории и суммирования их размеров. Для каждого файла получи атрибут .fileSize через resourceValues(forKeys:). Альтернативно используй URLResourceKey.fileSizeKey и .directoryEnumerationResults.

Можно ли хранить Core Data SQLite-базу в Documents?

По умолчанию Core Data создаёт SQLite-файл в Library/Application Support, не в Documents. Переносить базу в Documents не рекомендуется — она будет включена в iTunes File Sharing и пользователь сможет случайно удалить или изменить её. Исключение — если приложение явно даёт пользователю доступ к данным через Core Data.

Что такое UIFileSharingEnabled и как его включить?

UIFileSharingEnabled (Application supports iTunes file sharing) — булевый ключ в Info.plist. При установке в YES пользователь может копировать файлы из Documents Directory через iTunes и Files. Добавь ключ в Info.plist: UIFileSharingEnabled = YES. Включай только если приложение действительно создаёт пользовательские документы.

Итоги

  • Documents Directory — основное место для пользовательских данных в iOS-приложении, которые должны сохраняться и бэкапиться.
  • Путь к директории получается через FileManager.urls(for: .documentDirectory) в Swift или NSSearchPathForDirectoriesInDomains в Objective-C.
  • Все файлы из Documents по умолчанию включаются в резервное копирование iCloud и iTunes — используй isExcludedFromBackup для исключения.
  • Система не удаляет файлы из Documents самостоятельно, в отличие от Caches Directory.
  • Для восстанавливаемых данных (кэш, временные файлы) используй Caches Directory, а не Documents.
  • Ключ UIFileSharingEnabled открывает доступ к Documents через iTunes и приложение Файлы — используй осознанно.
  • Регулярно мониторь размер Documents Directory: превышение 100 МБ для некритичных данных — архитектурная проблема.

Мы разработаем мобильное приложение под ключ

IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.

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

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