Documents Directory: τι είναι, σκοπός και πρόσβαση σε αρχεία

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-07-10 Χρόνος ανάγνωσης: 10 λεπ

Documents Directory — είναι ένας κατάλογος στο sandbox της εφαρμογής 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 — είναι ένας κατάλογος μέσα στο sandbox της εφαρμογής iOS, προορισμένος για την αποθήκευση δεδομένων χρήστη που πρέπει να διατηρούνται μεταξύ εκκινήσεων και να είναι προσβάσιμα στον χρήστη. Κάθε εφαρμογή λαμβάνει το δικό της απομονωμένο sandbox, και το 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 συνιστά τη χρήση API βασισμένου σε URL αντί για καλύτερη συμβατότητα με τις σύγχρονες δυνατότητες του 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. Κάθε gigabyte στο Documents είναι ένα gigabyte στο αντίγραφο ασφαλείας 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 — μία από τις συχνές αιτίες απόρριψης εφαρμογών κατά την αξιολόγηση: εάν η εφαρμογή αποθηκεύει περισσότερα από λίγα megabyte αποκαταστάσιμων δεδομένων στο 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 εμφανίζεται στην εφαρμογή Files στην ενότητα «Στο iPhone μου». Ο χρήστης μπορεί να βλέπει, να αντιγράφει και να διαγράφει αρχεία.

Τι θα συμβεί στο Documents Directory κατά τη διαγραφή της εφαρμογής;

Ολόκληρο το sandbox της εφαρμογής, συμπεριλαμβανομένου του Documents Directory, Caches, tmp και Library, διαγράφεται πλήρως από τη συσκευή. Τα αντίγραφα ασφαλείας στο iCloud παραμένουν μέχρι την αποκατάσταση ή την μανυαλική διαγραφή. Κατά την επανεγκατάσταση, η εφαρμογή ξεκινά με καθαρό sandbox.

Πώς να ελέγξω το μέγεθος του 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 και της εφαρμογής Files — χρησιμοποίησε το συνειδητά.
  • Παρακολούθησε τακτικά το μέγεθος του Documents Directory: η υπέρβαση των 100 MB για μη κρίσιμα δεδομένα είναι αρχιτεκτονικό πρόβλημα.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης