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 използва строга пясъчница: приложението няма достъп до файловата система на други приложения и системните директории без специални разрешения. 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 синхронизация.

Тип данниПодходящ за 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 срещу 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 MB за данни, които не са потребителски — това е повод да преоцениш архитектурата на хранилището.

Изключване на възстановими файлове от резервното копиране

За всички файлове, които могат да бъдат изтеглени отново от мрежата, задай isExcludedFromBackup = true. Това намалява натоварването на iCloud хранилището на потребителя и намалява риска от отказ на приложението от App Review.

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

При промяна на формата на данните в Documents, предвиждай миграция: не изтривай старите файлове, докато не си сигурен, че новите са създадени правилно. Използвай поддиректории, специфични за версията.

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 MB за некритични данни е архитектурен проблем.

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

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също