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-based API-ја уместо string-based ради боље компатибилности са савременим могућностима 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-а се приказује у апликацији Фајлови у одељку „Na mom iPhone-u“. Корисник може да прегледа, копира и брише датотеке.

Шта ће се догодити са 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. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође