Documents Directory: co to jest, przeznaczenie i dostęp do plików

Autor: IT Sectr Opublikowano: 2026-07-10 Czas czytania: 10 min

Documents Directory „ to katalog w piaskownicy aplikacji iOS przeznaczony do przechowywania danych użytkownika, które powinny być zachowywane między sesjami aplikacji i dostępne dla użytkownika przez iTunes File Sharing oraz iCloud. Według Apple File System Programming Guide (2024) zawartość tego katalogu jest automatycznie uwzględniana w kopii zapasowej iCloud i iTunes, dlatego programista powinien świadomie wybierać, jakie dane umieszczać w Documents. W przeciwieństwie do Caches Directory pliki w Documents nie są usuwane przez system przy braku miejsca „ odpowiedzialność za zarządzanie rozmiarem spoczywa na aplikacji.

Najważniejsze

  • Documents Directory „ główny katalog dla plików użytkownika, które powinny być zachowywane i dostępne przez iTunes.
  • Dane z Documents automatycznie tworzą kopię zapasową w iCloud i iTunes „ uwzględnij to przy projektowaniu przechowywania.
  • System nie usuwa plików z Documents przy czyszczeniu pamięci podręcznej „ za zwalnianie miejsca odpowiada programista.
  • Ścieżkę do katalogu uzyskuje się przez NSSearchPathForDirectoriesInDomains z NSDocumentDirectory lub przez FileManager.urls.
  • W przypadku dużych plików, które można przywrócić, używaj Caches Directory „ aby nie zajmować miejsca w kopii zapasowej iCloud.

Czym jest Documents Directory w iOS?

Documents Directory „ to katalog wewnątrz piaskownicy aplikacji iOS przeznaczony do przechowywania danych użytkownika, które powinny być zachowywane między uruchomieniami i dostępne dla użytkownika. Każda aplikacja otrzymuje własną izolowaną piaskownicę, a Documents jest jednym z kluczowych katalogów obok Caches, tmp i Library.

iOS używa ścisłej piaskownicy (sandbox): aplikacja nie ma dostępu do systemu plików innych aplikacji ani do katalogów systemowych bez specjalnych uprawnień. Documents Directory „ jedyny katalog, którego zawartość użytkownik może przeglądać przez iTunes File Sharing (po włączeniu odpowiedniego klucza UIFileSharingEnabled w Info.plist).

Według danych Apple WWDC 2023 ponad 85% aplikacji w App Store używa Documents Directory do przechowywania co najmniej jednego typu danych użytkownika „ od wyeksportowanych PDF po zapisane pliki gier i wyeksportowane obrazy.

Programista musi zrozumieć: pliki w Documents są automatycznie uwzględniane w kopii zapasowej iCloud i iTunes. Jeśli aplikacja przechowuje w Documents duże ilości danych, które można przywrócić (na przykład pamięć podręczną obrazów lub pliki tymczasowe), doprowadzi to do nieuzasadnionego zużycia miejsca w magazynie iCloud użytkownika.

Jak uzyskać ścieżkę do Documents Directory

W Swift ścieżkę do Documents Directory uzyskuje się przez FileManager. Apple zaleca używanie API opartego na URL zamiast string-based dla lepszej zgodności z nowoczesnymi możliwościami iOS.

swift
import Foundation

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

// Utwórz plik w Documents
let fileURL = documentsURL.appendingPathComponent("report.pdf")
let data = Data("Hello, world!".utf8)
try data.write(to: fileURL)

Objective-C używa NSSearchPathForDirectoriesInDomains „ starszego, ale wciąż obsługiwane podejścia, które zwraca ścieżkę jako ciąg znaków zamiast URL.

objective-c
@import Foundation;

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

Nowoczesne projekty w Swift powinny używać FileManager.urls, ponieważ ta metoda zwraca URL, a nie ciąg znaków, co zmniejsza ryzyko błędów z kodowaniem ścieżek i czyni kod bardziej bezpiecznym typowo.

Jakie dane przechowywać w Documents

Documents Directory jest przeznaczona dla danych utworzonych przez użytkownika lub potrzebnych użytkownikowi w jawnej formie. Apple wyróżnia kilka kategorii, które warto umieszczać w tym katalogu.

Dokumenty i pliki użytkownika

Pliki, które użytkownik tworzy lub importuje „ dokumenty tekstowe, PDF, obrazy, wyeksportowane raporty, pliki kopii zapasowych. Te dane mają bezpośrednią wartość dla użytkownika, a ich utrata byłaby krytyczna.

Zapisane stany gier i stan aplikacji

Sejwy gier, pliki stanu aplikacji, wyeksportowane projekty „ wszystko, co użytkownik oczekuje przywrócić po ponownej instalacji aplikacji. Jednak w przypadku krytycznych danych zaleca się dodatkowo używać iCloud Key-Value Storage lub Core Data z synchronizacją iCloud.

Typ danychOdpowiedni dla DocumentsAlternatywa
PDF i dokumenty tekstoweTak
Pamięć podręczna obrazówNieCaches Directory
Sejwy gierTakiCloud KVS
Logi i dane debugowaniaNieCaches lub tmp
Wyeksportowane raportyTak

Kluczowe kryterium: jeśli dane mogą zostać przywrócone z sieci lub ponownie utworzone „ ich miejsce jest w Caches, a nie w Documents. Każdy gigabajt w Documents to gigabajt w kopii zapasowej iCloud użytkownika.

Kopia zapasowa i synchronizacja

iOS automatycznie uwzględnia zawartość Documents Directory w kopii zapasowej podczas podłączenia urządzenia do iTunes lub synchronizacji z iCloud. Tego zachowania nie można wyłączyć na poziomie katalogu „ tylko dla poszczególnych plików przez atrybut NSURLIsExcludedFromBackupKey.

Począwszy od iOS 5.0 Apple zaczęło odrzucać aplikacje, które przechowują w Documents duże ilości danych podlegających przywróceniu. Zalecenie Apple: pliki, które można ponownie pobrać, powinny być przechowywane w Caches Directory z flagą wyłączenia z kopii zapasowej.

swift
import Foundation

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

// Wyłącz plik z kopii zapasowej iCloud
var resourceValues = URLResourceValues()
resourceValues.isExcludedFromBackup = true

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

Synchronizacja iCloud działa przez NSUbiquitousContainer, jeśli aplikacja używa iCloud Documents. W takim przypadku pliki z Documents Directory są automatycznie synchronizowane między urządzeniami użytkownika. Dla aplikacji bez iCloud synchronizacja jest ograniczona do kopii zapasowej.

Documents Directory vs Caches Directory

Różnica między Documents a Caches „ jedno z najczęstszych nieporozumień wśród początkujących programistów iOS. Główna różnica: system może w każdej chwili usunąć pliki z Caches, aby zwolnić miejsce, ale nigdy nie rusza Documents bez wiedzy użytkownika.

CharakterystykaDocuments DirectoryCaches Directory
Kopia zapasowa w iCloudTak (domyślnie)Nie
Usunięcie przez systemNigdyPrzy braku miejsca
iTunes File SharingTak (po włączeniu flagi)Nie
PrzeznaczenieDane użytkownikaPamięć podręczna, dane tymczasowe
Przywrócenie danychWymaga przywróceniaMożna ponownie pobrać z sieci

Według Apple Developer Documentation (2024) nieprawidłowe używanie Documents Directory „ jedna z częstych przyczyn odrzucenia aplikacji podczas recenzji: jeśli aplikacja przechowuje w Documents więcej niż kilka megabajtów danych, które można przywrócić, Apple zaleca przeniesienie ich do Caches lub zastosowanie NSURLIsExcludedFromBackupKey.

Praktyczna zasada: jeśli użytkownik będzie zmartwiony utratą pliku „ przechowuj w Documents. Jeśli plik można ponownie pobrać lub wygenerować „ przechowuj w Caches.

Najlepsze praktyki pracy z Documents

Doświadczeni programiści iOS wypracowali kilka zasad, które pomagają uniknąć problemów z Documents Directory na wszystkich etapach cyklu życia aplikacji „ od rozwoju do publikacji w App Store.

Monitorowanie rozmiaru katalogu

Regularnie sprawdzaj rozmiar Documents Directory przez FileManager.enumerator(at:includingPropertiesForKeys:). Jeśli rozmiar przekracza 100 MB dla danych niebędących danymi użytkownika „ to powód do przemyślenia architektury przechowywania.

Wyłączanie przywracalnych plików z kopii zapasowej

Dla wszystkich plików, które można ponownie pobrać z sieci, ustaw isExcludedFromBackup = true. Zmniejsza to obciążenie magazynu iCloud użytkownika i zmniejsza ryzyko odrzucenia aplikacji przez App Review.

Migracja przy aktualizacji

Przy zmianie formatu danych w Documents przewidz migrację: nie usuwaj starych plików, dopóki nie upewnisz się, że nowe zostały poprawnie utworzone. Używaj podkatalogów specyficznych dla wersji.

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
)

Przestrzeganie tych praktyk zmniejsza ryzyko utraty danych użytkownika, redukuje rozmiar kopii zapasowej iCloud i ułatwia przejście recenzji w App Store.

Często zadawane pytania

Czy użytkownik może uzyskać dostęp do Documents Directory bez iTunes?

Tak, przez Files „ wbudowaną aplikację iOS od wersji 11. Po włączeniu klucza UIFileSharingEnabled w Info.plist zawartość Documents Directory jest wyświetlana w aplikacji Pliki w sekcji „Na moim iPhonie“. Użytkownik może przeglądać, kopiować i usuwać pliki.

Co stanie się z Documents Directory po usunięciu aplikacji?

Cała piaskownica aplikacji, w tym Documents Directory, Caches, tmp i Library, jest całkowicie usuwana z urządzenia. Kopie zapasowe w iCloud pozostają do momentu przywrócenia lub ręcznego usunięcia. Po ponownej instalacji aplikacja zaczyna z czystą piaskownicą.

Jak sprawdzić rozmiar Documents Directory w kodzie?

Użyj FileManager.enumerator do przejścia wszystkich plików w katalogu i zsumowania ich rozmiarów. Dla każdego pliku uzyskaj atrybut .fileSize przez resourceValues(forKeys:). Alternatywnie użyj URLResourceKey.fileSizeKey i .directoryEnumerationResults.

Czy można przechowywać bazę Core Data SQLite w Documents?

Domyślnie Core Data tworzy plik SQLite w Library/Application Support, nie w Documents. Przenoszenie bazy do Documents nie jest zalecane „ zostanie uwzględniona w iTunes File Sharing i użytkownik będzie mógł ją przypadkowo usunąć lub zmodyfikować. Wyjątkiem jest sytuacja, gdy aplikacja jawnie daje użytkownikowi dostęp do danych przez Core Data.

Czym jest UIFileSharingEnabled i jak go włączyć?

UIFileSharingEnabled (Application supports iTunes file sharing) „ klucz boolowski w Info.plist. Po ustawieniu na YES użytkownik może kopiować pliki z Documents Directory przez iTunes i Files. Dodaj klucz do Info.plist: UIFileSharingEnabled = YES. Włączaj tylko jeśli aplikacja rzeczywiście tworzy dokumenty użytkownika.

Podsumowanie

  • Documents Directory „ główne miejsce dla danych użytkownika w aplikacji iOS, które powinny być zachowywane i tworzyć kopię zapasową.
  • Ścieżkę do katalogu uzyskuje się przez FileManager.urls(for: .documentDirectory) w Swift lub NSSearchPathForDirectoriesInDomains w Objective-C.
  • Wszystkie pliki z Documents domyślnie są uwzględniane w kopii zapasowej iCloud i iTunes „ użyj isExcludedFromBackup do wyłączenia.
  • System nie usuwa plików z Documents samodzielnie, w przeciwieństwie do Caches Directory.
  • Dla danych, które można przywrócić (pamięć podręczna, pliki tymczasowe) używaj Caches Directory, a nie Documents.
  • Klucz UIFileSharingEnabled otwiera dostęp do Documents przez iTunes i aplikację Pliki „ używaj świadomie.
  • Regularnie monitoruj rozmiar Documents Directory: przekroczenie 100 MB dla niekrytycznych danych to problem architektoniczny.

Opracujemy aplikację mobilną pod klucz

IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.

Omów projekt

Przeczytaj również