Σύστημα αρχείων και έγγραφα στην ανάπτυξη κινητών: τι είναι, ποιες αρχές και πώς λειτουργεί

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

Η εργασία με το σύστημα αρχείων είναι το θεμέλιο κάθε εφαρμογής κινητού. Κάθε πλατφόρμα προσφέρει το δικό της μοντέλο πρόσβασης: το Sandbox στο iOS απομονώνει τις εφαρμογές σε ξεχωριστά δοχεία, ενώ το Scoped Storage στο Android περιορίζει την άμεση πρόσβαση στον κοινόχρηστο αποθηκευτικό χώρο. Σύμφωνα με Google Developer Documentation (2026), η εισαγωγή του Scoped Storage με το Android 10 απαίτησε πλήρη αναθεώρηση της αρχιτεκτονικής αποθήκευσης δεδομένων. Σε αυτόν τον οδηγό, θα καλύψουμε τα FileManager, MediaStore API, Storage Access Framework και DocumentProvider και για τις δύο πλατφόρμες.

Βασικά σημεία

  • Sandbox — ένα απομονωμένο περιβάλλον iOS όπου κάθε εφαρμογή λειτουργεί μόνο στον δικό της κατάλογο χωρίς πρόσβαση σε δεδομένα άλλων εφαρμογών.
  • Scoped Storage — μοντέλο Android 10+ που περιορίζει την άμεση πρόσβαση στον εξωτερικό αποθηκευτικό χώρο μέσω MediaStore API και SAF.
  • FileManager — η κύρια κλάση iOS για λειτουργίες αρχείων: δημιουργία, ανάγνωση, αντιγραφή, μετακίνηση και διαγραφή.
  • Storage Access Framework — ο μηχανισμός συστήματος Android για επιλογή εγγράφων χρησιμοποιώντας Intent ACTION_OPEN_DOCUMENT.
  • DocumentProvider — ένα στοιχείο Android για δημοσίευση αρχείων εφαρμογής στο κοινόχρηστο σύστημα αρχείων μέσω SAF.

Τι είναι το σύστημα αρχείων σε εφαρμογές κινητών;

Το σύστημα αρχείων σε εφαρμογές κινητών είναι ένα σύνολο API, κανόνων ασφαλείας και περιορισμών που καθορίζουν τον τρόπο αποθήκευσης και πρόσβασης δεδομένων σε συσκευές iOS και Android. Σε αντίθεση με τα λειτουργικά συστήματα επιτραπέζιων υπολογιστών, οι πλατφόρμες κινητών απομονώνουν κάθε εφαρμογή για να προστατεύσουν τα δεδομένα χρήστη από μη εξουσιοδοτημένη ανάγνωση από άλλα προγράμματα.

Αρχιτεκτονικές διαφορές μεταξύ iOS και Android

Το iOS χρησιμοποιεί το μοντέλο Sandbox, όπου κάθε εφαρμογή υπάρχει στο δικό της δοχείο με αυστηρά περιορισμένα δικαιώματα. Πριν από την έκδοση 10, το Android παρείχε πλήρη πρόσβαση στον εξωτερικό αποθηκευτικό χώρο, αλλά με την εισαγωγή του Scoped Storage, η προσέγγιση πλησίασε περισσότερο στο iOS. Η βασική διαφορά είναι ότι το iOS απομονώνει πλήρως το σύστημα αρχείων, ενώ το Android προσφέρει πολλαπλά επίπεδα πρόσβασης: έναν ιδιωτικό κατάλογο, δημόσιο MediaStore και προσωρινή πρόσβαση μέσω SAF.

Κύριοι τύποι αποθήκευσης

Οι εφαρμογές κινητών χρησιμοποιούν τρεις τύπους αποθήκευσης δεδομένων. Ιδιωτική αποθήκευση — ένας κατάλογος προσβάσιμος μόνο από την εφαρμογή για εσωτερικά αρχεία και προσωρινή μνήμη. Κοινόχρηστη αποθήκευση — αρχεία πολυμέσων μέσω MediaStore (Android) ή Files App (iOS). Αποθήκευση cloud — iCloud Drive και Google Drive για συγχρονισμό μεταξύ συσκευών. Κάθε τύπος έχει τα δικά του όρια όσον αφορά το μέγεθος, τη διάρκεια ζωής αρχείων και τις συνθήκες πρόσβασης.

Τύπος αποθήκευσηςiOSAndroid
ΙδιωτικήDocuments, Library, CachesgetFilesDir(), getCacheDir()
Κοινόχρηστα πολυμέσαPHPhotoLibrary μέσω επιλογέαMediaStore API (ContentResolver)
Κοινόχρηστα έγγραφαFiles App μέσω UIDocumentPickerStorage Access Framework (SAF)
CloudiCloud Drive (UIDocument)Google Drive API
Προσωρινή μνήμηΚατάλογος Caches, καθαρίζεται από το σύστημαgetCacheDir(), getExternalCacheDir()

Σύστημα αρχείων στην ανάπτυξη κινητών: Sandbox στο iOS

Sandbox είναι η αρχιτεκτονική ασφαλείας του iOS που απομονώνει κάθε εφαρμογή. Μια εφαρμογή μπορεί να διαβάζει και να γράφει μόνο εντός του δικού της sandbox. Για πρόσβαση σε επαφές, φωτογραφίες ή αρχεία άλλων εφαρμογών, πρέπει να χρησιμοποιούνται επιλογείς συστήματος: UIImagePickerController ή UIDocumentPickerViewController. Η πρόσβαση στο Files App διαμορφώνεται μέσω της σημαίας UIFileSharingEnabled στο Info.plist. Το σύστημα αρχείων στην ανάπτυξη κινητών στο iOS απαιτεί κατανόηση της δομής καταλόγου και επιλογή της σωστής θέσης για κάθε τύπο δεδομένων.

Δομή καταλόγου sandbox

Το sandbox του iOS αποτελείται από πολλούς τυπικούς καταλόγους. Documents — για αρχεία χρήστη, περιλαμβάνεται στο iCloud Backup. Caches — για προσωρινά δεδομένα που το σύστημα μπορεί να διαγράψει όταν ο αποθηκευτικός χώρος είναι χαμηλός. Temporary — για αρχεία τρέχουσας συνεδρίας, καθαρίζεται κατά την επανεκκίνηση. Application Support — για εσωτερικά δεδομένα εφαρμογής κρυμμένα από τον χρήστη. Η επιλογή λάθος καταλόγου οδηγεί σε προβλήματα: η αποθήκευση προσωρινής μνήμης στα Documents σπαταλά χώρο iCloud και παραβιάζει τις οδηγίες της Apple για το σύστημα αρχείων.

swift
import Foundation

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

let fileURL = documentsURL.appendingPathComponent("notes.txt")
let text = "Содержимое файла"

// Ατομική εγγραφή με κρυπτογράφηση
try text.write(
    to: fileURL,
    atomically: true,
    encoding: .utf8
)

FileManager — το κύριο API για λειτουργίες αρχείων

Η κλάση FileManager παρέχει ένα πλήρες σύνολο μεθόδων για διαχείριση αρχείων στο iOS. Το FileManager.default είναι ένα thread-safe singleton κατάλληλο για τις περισσότερες λειτουργίες. Μέθοδοι όπως fileExists(atPath:), createDirectory(at:withIntermediateDirectories:attributes:), copyItem(at:to:) και removeItem(at:) καλύπτουν βασικά σενάρια. Οι λειτουργίες αρχείων μεγαλύτερων από 1 MB θα πρέπει να εκτελούνται σε νήμα παρασκηνίου μέσω DispatchQueue.global(). Για ροή μεγάλων όγκων, χρησιμοποιήστε το FileHandle αντί να φορτώνετε ολόκληρο το αρχείο στη μνήμη.

swift
func readDocumentsFile(named fileName: String) -> String? {
    guard let docsURL = FileManager.default.urls(
        for: .documentDirectory,
        in: .userDomainMask
    ).first else { return nil }

    let fileURL = docsURL.appendingPathComponent(fileName)
    return try? String(contentsOf: fileURL)
}

Σύστημα αρχείων σε εφαρμογές κινητών: Scoped Storage στο Android

Με την κυκλοφορία του Android 10, η Google εισήγαγε το Scoped Storage — ένα μοντέλο περιορισμένης πρόσβασης στο σύστημα αρχείων. Μια εφαρμογή μπορεί να διαβάζει και να γράφει ελεύθερα μόνο στους ιδιωτικούς καταλόγους της. Για αρχεία πολυμέσων (φωτογραφίες, βίντεο, ήχος), χρησιμοποιείται το MediaStore API μέσω ContentResolver. Για αυθαίρετα έγγραφα, χρησιμοποιείται το Storage Access Framework μέσω Intent ACTION_OPEN_DOCUMENT. Στο Android 11+, η άμεση πρόσβαση στη ρίζα του εξωτερικού αποθηκευτικού χώρου απαγορεύεται εντελώς και όλοι οι προγραμματιστές πρέπει να χρησιμοποιούν τα νέα API.

MediaStore API για εργασία με αρχεία πολυμέσων

MediaStore είναι ένα σύστημα ContentProvider για πρόσβαση σε αρχεία πολυμέσων στη συσκευή. Μέσω του ContentResolver, η εφαρμογή ζητά Uri αρχείων αντί για άμεσες διαδρομές. MediaStore.Files — για όλους τους τύπους αρχείων, Images — για εικόνες, Video — για βίντεο, Audio — για ηχογραφήσεις. Η εγγραφή σε κοινόχρηστους καταλόγους γίνεται μέσω insert() με DISPLAY_NAME, MIME_TYPE και RELATIVE_PATH. Μετά την εισαγωγή, η εφαρμογή λαμβάνει ένα Uri μέσω του οποίου γράφονται τα byte. Οι τύποι MIME παίζουν καθοριστικό ρόλο — ένας λανθασμένος τύπος θα προκαλέσει σφάλμα κατά το άνοιγμα του αρχείου.

kotlin
val contentValues = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "report.pdf")
    put(MediaStore.MediaColumns.MIME_TYPE, "application/pdf")
    put(MediaStore.MediaColumns.RELATIVE_PATH, "Documents/Reports")
}

val uri = contentResolver.insert(
    MediaStore.Files.getContentUri("external"),
    contentValues
)

uri?.let {
    contentResolver.openOutputStream(it)?.use { stream ->
        stream.write(pdfBytes)
    }
}

Storage Access Framework για επιλογή αρχείων

Το SAF παρέχει μια ενοποιημένη διεπαφή για επιλογή και δημιουργία αρχείων χωρίς δικαιώματα χρόνου εκτέλεσης. Intent ACTION_OPEN_DOCUMENT ανοίγει τον διαχειριστή αρχείων συστήματος στο Android. Μετά την επιλογή, η εφαρμογή λαμβάνει ένα content:// Uri με προσωρινή πρόσβαση μέσω FLAG_GRANT_READ_URI_PERMISSION. Το ACTION_CREATE_DOCUMENT επιτρέπει την αποθήκευση αρχείων σε οποιαδήποτε θέση εξωτερικού αποθηκευτικού χώρου που επιλέγει ο χρήστης. Το SAF λειτουργεί σε Android 5+ και παρέχει πρόσβαση σε αρχεία από παρόχους cloud που είναι συνδεδεμένοι μέσω DocumentsProvider.

kotlin
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
    addCategory(Intent.CATEGORY_OPENABLE)
    type = "*/*"
    putExtra(Intent.EXTRA_MIME_TYPES, arrayOf(
        "application/pdf",
        "text/plain"
    ))
}
startActivityForResult(intent, REQUEST_CODE)

Επιλογή εγγράφων σε εφαρμογές κινητών: επιλογείς συστήματος

Και οι δύο πλατφόρμες παρέχουν ενσωματωμένους μηχανισμούς για την επιλογή αρχείων από τους χρήστες. Τα έγγραφα σε εφαρμογές κινητών μεταφέρονται μέσω επιλογέων συστήματος που παρέχουν προσωρινή πρόσβαση σε ένα αρχείο χωρίς μόνιμα δικαιώματα. Στο iOS, αυτός είναι ο UIDocumentPickerViewController· στο Android, το ACTION_OPEN_DOCUMENT. Τα έγγραφα σε εφαρμογές κινητών μπορούν να επιλεγούν τόσο από τον τοπικό αποθηκευτικό χώρο όσο και από υπηρεσίες cloud. Ο χρήστης καθορίζει ρητά το αρχείο και η εφαρμογή λαμβάνει ένα Uri ή URL με περιορισμένη περίοδο ισχύος.

UIDocumentPickerViewController στο iOS

UIDocumentPickerViewController ανοίγει το Files App και επιτρέπει την επιλογή ενός ή περισσότερων εγγράφων. Λειτουργίες: εισαγωγή (αντιγραφή στο sandbox) και άνοιγμα (πρόσβαση μέσω URL με πεδίο ασφαλείας). Για φιλτράρισμα αρχείων, μεταδίδεται ένας πίνακας τύπων UTType — για παράδειγμα, .pdf και .plainText. Μετά τη λήψη του URL, η εφαρμογή πρέπει να καλέσει startAccessingSecurityScopedResource() πριν από την ανάγνωση και stopAccessingSecurityScopedResource() μετά την ολοκλήρωση. Η μη κλήση του stopAccessing οδηγεί σε διαρροή πόρων συστήματος. Τα έγγραφα σε εφαρμογές κινητών στο iOS απαιτούν υποχρεωτική απελευθέρωση προσωρινών δικαιωμάτων μετά την ολοκλήρωση της εργασίας με το αρχείο.

swift
let picker = UIDocumentPickerViewController(
    forOpeningContentTypes: [.pdf, .plainText]
)
picker.allowsMultipleSelection = true
picker.delegate = self
present(picker, animated: true)

// Απελευθέρωση πρόσβασης στον εκπρόσωπο
func documentPicker(
    _ controller: UIDocumentPickerViewController,
    didPickDocumentsAt urls: [URL]
) {
    guard let url = urls.first else { return }
    url.startAccessingSecurityScopedResource()
    defer { url.stopAccessingSecurityScopedResource() }
}

FileProvider και DocumentProvider στο Android

FileProvider είναι μια υποκλάση του ContentProvider για ασφαλή κοινή χρήση αρχείων μεταξύ εφαρμογών. Δημιουργεί προσωρινά content:// Uri βάσει αρχείων από καθορισμένους καταλόγους XML. Άλλες εφαρμογές αποκτούν πρόσβαση μέσω Intent με FLAG_GRANT_READ_URI_PERMISSION. Το DocumentProvider, σε αντίθεση με το FileProvider, δημοσιεύει αρχεία στο SAF και επιτρέπει σε άλλες εφαρμογές να περιηγηθούν στο περιεχόμενο της εφαρμογής σας ως μέρος του συστήματος αρχείων. Για να υλοποιήσετε το DocumentsProvider, πρέπει να παρακάμψετε τα queryRoots(), queryChildDocuments() και openDocument(), στη συνέχεια να το καταχωρίσετε στο AndroidManifest.xml

iCloud Drive και συγχρονισμός αρχείων cloud

Ο συγχρονισμός cloud δίνει στους χρήστες πρόσβαση σε έγγραφα σε όλες τις συσκευές τους. Το σύστημα αρχείων σε εφαρμογές κινητών ενισχύεται από ένα επίπεδο cloud: το UIDocument στο iOS παρακολουθεί αυτόματα τις αλλαγές και τις συγχρονίζει μέσω iCloud. Στο Android, παρόμοια λειτουργικότητα δημιουργείται μέσω του Google Drive API ή του DocumentsProvider με ρίζες cloud. Η κατανόηση του συστήματος αρχείων στην ανάπτυξη κινητών είναι κρίσιμη για την κατασκευή αξιόπιστου συγχρονισμού μεταξύ συσκευών.

UIDocument — Συγχρονισμός στο iOS

UIDocument είναι μια αφηρημένη κλάση για εργασία με έγγραφα iCloud. Αποθηκεύει αυτόματα αλλαγές, διαβάζει δεδομένα και ειδοποιεί τον εκπρόσωπο για ενημερώσεις. Σε περίπτωση σύγκρουσης εγγραφής, το NSFileVersion παρέχει μια λίστα διαθέσιμων εκδόσεων — ο προγραμματιστής μπορεί να επιλέξει την πιο πρόσφατη ή να εμφανίσει στον χρήστη επιλογές επίλυσης σύγκρουσης. Η διαμόρφωση του Ubiquity Container στα Capabilities του έργου είναι υποχρεωτική για το iCloud Drive. Τα NSFileCoordinator και NSFilePresenter αποτρέπουν συνθήκες ανταγωνισμού δεδομένων κατά την ταυτόχρονη πρόσβαση από πολλαπλά νήματα ή συσκευές.

Δημιουργία αντιγράφων ασφαλείας και επαναφορά δεδομένων

Το iOS περιλαμβάνει αυτόματα τον κατάλογο Documents στο iCloud Backup. Το Android λειτουργεί με Auto Backup for Apps — το σύστημα αποθηκεύει δεδομένα από getFilesDir(), SharedPreferences και βάσεις δεδομένων SQLite στο Google Drive. Η προσωρινή μνήμη και τα εξωτερικά αρχεία δεν περιλαμβάνονται στα αντίγραφα ασφαλείας. Και οι δύο πλατφόρμες επιτρέπουν τη διαμόρφωση εξαιρέσεων: στο iOS μέσω NSURLIsExcludedFromBackupKey, στο Android μέσω XML διαμόρφωσης κανόνων αντιγράφων ασφαλείας. Η κρυπτογράφηση αρχείων με προσωπικά δεδομένα είναι υποχρεωτική — στο iOS χρησιμοποιήστε NSDataWritingFileProtectionComplete, στο Android χρησιμοποιήστε EncryptedFile από τη βιβλιοθήκη security-crypto.

ΠαράμετροςiOSAndroid
Προεπιλεγμένο αντίγραφο ασφαλείαςDocuments και LibrarygetFilesDir(), SharedPreferences, ΒΔ
Εξαίρεση αρχείωνisExcludedFromBackupKeyΚανόνες XML αντιγράφων ασφαλείας (fullBackupContent)
ΚρυπτογράφησηNSDataWritingFileProtectionCompleteEncryptedFile (security-crypto)
Συγχρονισμός cloudUIDocument + iCloudGoogle Drive API + SAF
Αυτόματη επαναφοράiCloud Restore μετά την εγκατάστασηAuto Backup κατά την επανεγκατάσταση

Συχνές ερωτήσεις

Τι είναι το Sandbox στο iOS;

Sandbox είναι ένα απομονωμένο περιβάλλον για κάθε εφαρμογή στο iOS. Η εφαρμογή δεν μπορεί να έχει πρόσβαση σε αρχεία άλλων εφαρμογών χωρίς χρήση επιλογέων συστήματος όπως το UIDocumentPickerViewController.

Τι είναι το Scoped Storage στο Android;

Scoped Storage είναι ένα μοντέλο περιορισμένης πρόσβασης στο σύστημα αρχείων σε Android 10+. Η εφαρμογή διαβάζει άμεσα μόνο τα δικά της αρχεία, χρησιμοποιεί MediaStore API για πολυμέσα και Storage Access Framework για έγγραφα.

Πώς να επιλέξω ένα αρχείο στο iOS;

Χρησιμοποιήστε UIDocumentPickerViewController — τον επιλογέα συστήματος για επιλογή εγγράφων από το Files App ή το iCloud Drive. Μετά την επιλογή, λαμβάνετε ένα URL με πεδίο ασφαλείας και προσωρινή πρόσβαση.

Πώς να αποκτήσω πρόσβαση σε αρχεία σε Android 11+;

Για αρχεία πολυμέσων, χρησιμοποιήστε MediaStore API μέσω ContentResolver με καθορισμό τύπου MIME. Για αυθαίρετα έγγραφα, χρησιμοποιήστε Storage Access Framework με Intent ACTION_OPEN_DOCUMENT.

Τι είναι το FileProvider στο Android;

FileProvider είναι μια υποκλάση του ContentProvider για ασφαλή κοινή χρήση αρχείων μεταξύ εφαρμογών μέσω προσωρινού content:// Uri με FLAG_GRANT_READ_URI_PERMISSION.

Περίληψη

  • Sandbox — το απομονωμένο σύστημα αρχείων iOS όπου μια εφαρμογή μπορεί να έχει πρόσβαση μόνο στους δικούς της καταλόγους Documents, Caches και Library.
  • FileManager — το κύριο API για λειτουργίες αρχείων στο iOS. Διαβάστε μεγάλα αρχεία μέσω FileHandle σε νήμα παρασκηνίου.
  • Scoped Storage — το μοντέλο συστήματος αρχείων σε Android 10+ που αντικαθιστά την άμεση πρόσβαση στον εξωτερικό αποθηκευτικό χώρο με MediaStore API και SAF.
  • MediaStore API — ένα σύστημα ContentProvider για εργασία με αρχεία πολυμέσων στο Android. Η εγγραφή γίνεται μέσω insert() με ContentValues.
  • Storage Access Framework — ένας καθολικός μηχανισμός επιλογής εγγράφων στο Android μέσω ACTION_OPEN_DOCUMENT και ACTION_CREATE_DOCUMENT.
  • UIDocumentPickerViewController — ο επιλογέας συστήματος iOS που ανοίγει το Files App και το iCloud Drive. Λειτουργεί με URL με πεδίο ασφαλείας.
  • FileProvider — ένας μηχανισμός για ασφαλή κοινή χρήση αρχείων μεταξύ εφαρμογών Android μέσω προσωρινού content:// Uri και δικαιωμάτων χρόνου εκτέλεσης.

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

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

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