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-орієнтований API замість рядкового для кращої сумісності з сучасними можливостями iOS.

swift
import Foundation

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

// Створити файл в 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!

// Виключити файл з iCloud бекапу
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 року. Ми проконсультуємо вас і запропонуємо найкраще рішення.

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

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