Sandbox — τι είναι, αρχή απομόνωσης και σύστημα αρχείων

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

Sandbox — είναι ένα απομονωμένο περιβάλλον εκτέλεσης εφαρμογής iOS που περιορίζει την πρόσβαση στο σύστημα αρχείων, το δίκτυο, τους πόρους υλικού και τα δεδομένα άλλων εφαρμογών. Κάθε εφαρμογή λαμβάνει το δικό της περιβάλλον Sandbox κατά την εγκατάσταση και όλες οι λειτουργίες αρχείων της ανακατευθύνονται αυτόματα σε αυτήν την απομονωμένη περιοχή. Σύμφωνα με τον Apple App Sandbox Design Guide (2026), η αρχιτεκτονική sandbox βασίζεται σε τρία επίπεδα προστασίας: απομόνωση συστήματος αρχείων, έλεγχο επικοινωνίας μεταξύ διεργασιών και διαμοιρασμό πόρων υλικού με ρητό αίτημα δικαιωμάτων μέσω entitlements.

Κύρια σημεία

  • Sandbox — απομονωμένο σύστημα αρχείων και περιβάλλον εκτέλεσης, μοναδικό για κάθε εφαρμογή iOS.
  • Κάθε εφαρμογή έχει τον δικό της κατάλογο Sandbox με υποφακέλους Documents, Library, tmp και Bundle.
  • Πρόσβαση σε άλλες εφαρμογές απαγορεύεται: ανάγνωση, εγγραφή και εκτέλεση κώδικα εκτός Sandbox αποκλείονται από το σύστημα.
  • Entitlements και Capabilities επεκτείνουν το Sandbox: App Groups, iCloud, Security-Scoped Bookmarks απαιτούν ρητή άδεια.
  • UIDocumentPicker και Share Extension — οι μόνοι τρόποι ανταλλαγής αρχείων μεταξύ απομονωμένων εφαρμογών.

Τι είναι το Sandbox

Sandbox — είναι ένα σύστημα υποχρεωτικού ελέγχου πρόσβασης (Mandatory Access Control), που υλοποιείται σε επίπεδο πυρήνα iOS (XNU — kernel extension Sandbox.kext). Κάθε εφαρμογή κατά την εκκίνηση λαμβάνει ένα μοναδικό προφίλ UUID Sandbox που καθορίζει σε ποιους πόρους συστήματος επιτρέπεται η πρόσβαση.

Η αρχιτεκτονική Sandbox περιλαμβάνει τρία βασικά στοιχεία: File System Isolation (κάθε εφαρμογή βλέπει μόνο το δικό της κοντέινερ), Network Access Control (τα αιτήματα στο τοπικό δίκτυο μπορεί να περιοριστούν) και Inter-Process Communication (απαγόρευση άμεσης IPC με άλλες εφαρμογές). Η Apple εισήγαγε το Sandbox στο iOS 2.0 και από τότε έχει ενισχύσει σημαντικά τους περιορισμούς σε κάθε μεγάλη έκδοση.

Το Sandbox δεν είναι προαιρετικό — όλες οι εφαρμογές από το App Store λειτουργούν σε sandbox. Ο προγραμματιστής δεν μπορεί να απενεργοποιήσει το Sandbox ή να παρακάμψει τους περιορισμούς του. Η προσπάθεια πρόσβασης σε απαγορευμένο πόρο καταλήγει σε σφάλμα με κωδικό EPERM (Operation not permitted) και καταγραφή στο αρχείο καταγραφής συστήματος.

swift
import Foundation

// Προσπάθεια πρόσβασης σε αρχείο άλλης εφαρμογής — επιστρέφει nil
let otherAppPath = "/var/mobile/Containers/Data/Application/OTHER-UUID/Documents/file.txt"
let data = try? Data(contentsOf: URL(fileURLWithPath: otherAppPath))
// data == nil — Το Sandbox μπλοκάρει την πρόσβαση

// Σωστή πρόσβαση — εντός του δικού σας Sandbox
let fileManager = FileManager.default
guard let documentsURL = fileManager.urls(
    for: .documentDirectory,
    in: .userDomainMask
).first else { return }

let myFileURL = documentsURL.appendingPathComponent("notes.txt")
try "Hello, Sandbox!".write(to: myFileURL, atomically: true, encoding: .utf8)

Δομή του sandbox εφαρμογής

Το Sandbox κάθε εφαρμογής iOS περιέχει αρκετούς προκαθορισμένους καταλόγους, προσβάσιμους μέσω του Foundation API. Η θέση στο φυσικό μέσο — /var/mobile/Containers/Data/Application/{UUID}/, αλλά οι προγραμματιστές δεν θα πρέπει να χρησιμοποιούν αυτήν τη διαδρομή απευθείας: αλλάζει σε κάθε επανεκκίνηση της συσκευής σε διαφορετικές εκδόσεις iOS.

Οι κύριοι κατάλογοι Sandbox: Bundle (.app — μόνο για ανάγνωση, περιέχει εκτελέσιμο κώδικα και πόρους), Documents (δεδομένα χρήστη, δημιουργία αντιγράφων ασφαλείας στο iCloud), Library (Caches, Preferences, Application Support — με διαφορετικούς κανόνες δημιουργίας αντιγράφων ασφαλείας), tmp (προσωρινά αρχεία, διαγράφονται από το σύστημα όταν δεν υπάρχει αρκετός χώρος). Κάθε κατάλογος έχει τον δικό του κύκλο ζωής και πολιτική αποθήκευσης.

Η φυσική διαδρομή προς το Sandbox μπορεί να ληφθεί μέσω NSHomeDirectory() ή FileManager.url(for: .documentDirectory). Η Apple συνιστά τη χρήση URL-based API, καθώς αφαιρεί την εσωτερική δομή του συστήματος αρχείων και παραμένει σταθερό σε αλλαγές στο macOS Sandbox στην επιφάνεια εργασίας.

Κατάλογος SandboxΛήψη μέσω FileManagerΔικαιώματα
Documents.documentDirectoryΑνάγνωση και εγγραφή
BundleBundle.main.bundlePathΜόνο ανάγνωση
Library.libraryDirectoryΑνάγνωση και εγγραφή
tmpNSTemporaryDirectory()Ανάγνωση και εγγραφή
App Group.containerURL(forSecurityApplicationGroupIdentifier:)Ανάγνωση και εγγραφή

Πρόσβαση σε αρχεία εκτός sandbox

Άμεση πρόσβαση στο σύστημα αρχείων άλλων εφαρμογών στο iOS είναι εντελώς αποκλεισμένη. Ακόμα κι αν ο προγραμματιστής γνωρίζει το UUID του κοντέινερ άλλης εφαρμογής, το Sandbox σε επίπεδο πυρήνα θα επιστρέψει σφάλμα κατά την προσπάθεια ανάγνωσης ή εγγραφής. Αυτή είναι η θεμελιώδης διαφορά μεταξύ iOS και macOS, όπου το Sandbox είναι πιο ευέλικτο.

Η Apple παρέχει τρεις νόμιμους μηχανισμούς για ανταλλαγή δεδομένων μεταξύ εφαρμογών: UIDocumentPickerViewController (ο χρήστης επιλέγει αρχείο μέσω διεπαφής συστήματος, η εφαρμογή λαμβάνει Security-Scoped URL), Share Extension (επέκταση για μεταφορά δεδομένων σε άλλη εφαρμογή) και App Groups (κοινός κατάλογος για εφαρμογές του ίδιου προγραμματιστή).

UIDocumentPicker — ο μόνος τρόπος πρόσβασης σε αρχεία από άλλες εφαρμογές χωρίς προηγούμενη διαμόρφωση. Ο χρήστης επιλέγει ρητά το αρχείο μέσω του τυπικού επιλογέα συστήματος και το iOS παρέχει στην εφαρμογή ένα προσωρινό Security-Scoped URL. Η πρόσβαση ισχύει μέχρι το κλείσιμο του επιλογέα ή μέχρι την κλήση του stopAccessingSecurityScopedResource.

Security-Scoped Bookmarks

Security-Scoped Bookmark — είναι ένας μηχανισμός iOS που επιτρέπει τη διατήρηση πρόσβασης σε ένα αρχείο εκτός Sandbox μεταξύ εκκινήσεων της εφαρμογής. Όταν ο χρήστης επιλέγει ένα αρχείο μέσω UIDocumentPicker, η εφαρμογή μπορεί να δημιουργήσει ένα bookmark από το Security-Scoped URL και να το αποθηκεύσει στο UserDefaults ή σε άλλη αποθήκη.

Στην επόμενη εκκίνηση, η εφαρμογή επαναφέρει την πρόσβαση μέσω URLByResolvingBookmarkData, η οποία επιστρέφει ένα Security-Scoped URL. Στη συνέχεια, πρέπει να κληθεί το startAccessingSecurityScopedResource πριν από την ανάγνωση του αρχείου και το stopAccessingSecurityScopedResource μετά την ολοκλήρωση της εργασίας. Η ισορροπία κλήσεων είναι υποχρεωτική — κάθε start πρέπει να έχει ένα αντίστοιχο stop, διαφορετικά το σύστημα θα εξαντλήσει το όριο των πόρων Security-Scoped.

swift
// Δημιουργία Security-Scoped Bookmark
func createBookmark(for url: URL) -> Data? {
    return try? url.bookmarkData(
        options: .minimalBookmark,
        includingResourceValuesForKeys: nil,
        relativeTo: nil
    )
}

// Επίλυση δεδομένων bookmark σε URL
func resolveBookmark(data: Data) -> URL? {
    var isStale = false
    let url = try? URL.byResolvingBookmarkData(
        data,
        options: .withoutUI,
        relativeTo: nil,
        bookmarkDataIsStale: &isStale
    )
    
    if isStale {
        // Το bookmark είναι παρωχημένο, πρέπει να δημιουργηθεί νέο
    }
    
    return url
}

Σημαντικός περιορισμός: Τα Security-Scoped Bookmarks δεν λειτουργούν για αρχεία εντός του δικού τους Sandbox — μόνο για αρχεία που λαμβάνονται μέσω UIDocumentPicker ή iCloud Drive. Το bookmark περιέχει δεδομένα Security-Scoped που επιτρέπουν στο σύστημα να αναγνωρίσει ποια εφαρμογή και για ποιο αρχείο ζητά πρόσβαση. Εάν το πιστοποιητικό της εφαρμογής λήξει ή αλλάξει, το bookmark καθίσταται άκυρο.

Sandbox και App Groups

App Groups — μηχανισμός iOS που επιτρέπει σε πολλές εφαρμογές (και τις επεκτάσεις τους) από τον ίδιο προγραμματιστή να έχουν έναν κοινό κατάλογο Sandbox. Για ενεργοποίηση, πρέπει να προστεθεί το Capability App Groups στο Xcode και να καθοριστεί το ίδιο αναγνωριστικό ομάδας για όλες τις εφαρμογές-στόχους.

Ο κοινός κατάλογος App Groups βρίσκεται εκτός του Sandbox κάθε μεμονωμένης εφαρμογής, αλλά όλες οι εφαρμογές της ομάδας έχουν πλήρη πρόσβαση ανάγνωσης και εγγραφής σε αυτόν. Αυτό επιτρέπει την ανταλλαγή αρχείων, βάσεων δεδομένων (Core Data με Store URL στο App Group) και UserDefaults (μέσω initWithSuiteName) μεταξύ της κύριας εφαρμογής, Today Widget, Watch Extension και Share Extension.

Η Apple συνιστά τη χρήση App Groups για συγχρονισμό κατάστασης μεταξύ της εφαρμογής και των επεκτάσεών της. Για παράδειγμα, το Today Widget μπορεί να διαβάζει δεδομένα από τον κοινό κατάλογο App Group, όπου η κύρια εφαρμογή γράφει ενημερωμένα δεδομένα. Ωστόσο, κάθε εφαρμογή παραμένει απομονωμένη από άλλα App Groups — μόνο εφαρμογές με το ίδιο αναγνωριστικό ομάδας έχουν πρόσβαση.

Περιορισμοί sandbox στο iOS

Το Sandbox στο iOS επιβάλλει μια σειρά αυστηρών περιορισμών που πρέπει να λαμβάνονται υπόψη κατά την ανάπτυξη. Οι κύριοι: απαγόρευση δυναμικού κώδικα (φόρτωση και εκτέλεση κώδικα εκτός Sandbox), απαγόρευση άμεσης πρόσβασης στο βιβλίο διευθύνσεων, ημερολόγιο και φωτογραφίες χωρίς άδεια χρήστη (Privacy framework) και περιορισμοί στη δημιουργία θυγατρικών διεργασιών (fork, exec απαγορεύονται).

Δίκτυο: οι εφαρμογές μπορούν να συνδεθούν σε οποιουσδήποτε απομακρυσμένους διακομιστές μέσω TCP/UDP, αλλά η πρόσβαση στο localhost είναι περιορισμένη — άλλες εφαρμογές δεν μπορούν να συνδεθούν στον διακομιστή εντός της εφαρμογής σας (εκτός από debug builds). Το multicast και broadcast UDP επίσης μπλοκάρονται για εφαρμογές App Store.

Πόροι υλικού: η πρόσβαση στην κάμερα, το μικρόφωνο, τη γεωγραφική τοποθεσία, το Bluetooth και το HealthKit απαιτεί ρητή άδεια χρήστη μέσω διαλόγου συστήματος. Για κάθε τύπο πόρου, το iOS χρησιμοποιεί ξεχωριστό entitlement και κλειδί Info.plist με περιγραφή του λόγου (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Το αίτημα άδειας χωρίς περιγραφή λόγου στο Info.plist οδηγεί σε τερματισμό της εφαρμογής.

  • Δυναμικός κώδικας — απαγορεύεται: JavaScriptCore για JS σε WebView, αλλά όχι αυθαίρετος κώδικας μηχανής
  • Θυγατρικές διεργασίες — fork, exec, system δεν είναι διαθέσιμες από το Sandbox
  • Πρόσβαση σε συσκευές — κάμερα, μικρόφωνο, GPS απαιτούν διάλογο συστήματος
  • Τοπικό δίκτυο — multicast και broadcast UDP μπλοκάρονται για App Store
  • Κλειδιά κρυπτογράφησης — Keychain διαθέσιμο, αλλά μόνο για τη δική σας εφαρμογή (kSecAttrAccessGroup για App Group)

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

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

Sandbox — απομονωμένο περιβάλλον εκτέλεσης εφαρμογής iOS που περιορίζει την πρόσβαση στο σύστημα αρχείων, το δίκτυο και τα δεδομένα άλλων εφαρμογών. Κάθε εφαρμογή έχει ένα μοναδικό κοντέινερ Sandbox του οποίου η πρόσβαση ελέγχεται σε επίπεδο πυρήνα iOS μέσω Sandbox.kext.

Ποια αρχεία είναι διαθέσιμα στο Sandbox της εφαρμογής;

Η εφαρμογή έχει πρόσβαση σε: Documents (δεδομένα χρήστη), Library (Caches, Preferences, Application Support), tmp (προσωρινά αρχεία) και Bundle (μόνο ανάγνωση). Ο κατάλογος App Group είναι διαθέσιμος για εφαρμογές της ίδιας ομάδας προγραμματιστή.

Πώς μπορώ να αποκτήσω πρόσβαση σε αρχεία άλλης εφαρμογής;

Μέσω UIDocumentPickerViewController — ο χρήστης επιλέγει αρχείο μέσω διεπαφής συστήματος. Το iOS παρέχει ένα Security-Scoped URL, προσβάσιμο μέχρι την κλήση του stopAccessingSecurityScopedResource. Εναλλακτικά — Share Extension για μεταφορά δεδομένων μεταξύ εφαρμογών.

Τι είναι το Security-Scoped Bookmark;

Security-Scoped Bookmark — είναι δεδομένα που διατηρούν την πρόσβαση σε ένα αρχείο εκτός Sandbox μεταξύ εκκινήσεων της εφαρμογής. Δημιουργείται από ένα Security-Scoped URL (που λαμβάνεται από UIDocumentPicker) μέσω bookmarkData. Στην επόμενη εκκίνηση, το bookmark επαναφέρεται μέσω URLByResolvingBookmarkData.

Μπορεί να απενεργοποιηθεί το Sandbox στο iOS;

Όχι, το Sandbox δεν μπορεί να απενεργοποιηθεί για εφαρμογές από το App Store. Σε συσκευές με jailbreak είναι δυνατή η απενεργοποίηση, αλλά αυτό δεν είναι συμβατό με τη δημοσίευση στο App Store. Οι προγραμματιστές μπορούν να δοκιμάζουν χωρίς Sandbox στον προσομοιωτή, αλλά οι πραγματικές συσκευές εφαρμόζουν πάντα το Sandbox.

Σύνοψη

  • Sandbox — το θεμελιώδες σύστημα ασφαλείας iOS που απομονώνει κάθε εφαρμογή σε επίπεδο πυρήνα με Mandatory Access Control.
  • Δομή Sandbox περιλαμβάνει τους καταλόγους Documents, Library, tmp και Bundle με διαφορετικά δικαιώματα πρόσβασης και πολιτικές δημιουργίας αντιγράφων ασφαλείας.
  • Άμεση πρόσβαση στο σύστημα αρχείων άλλων εφαρμογών είναι εντελώς αποκλεισμένη — μόνο UIDocumentPicker και App Groups είναι νόμιμα.
  • Security-Scoped Bookmarks παρέχουν διαρκή πρόσβαση σε αρχεία εκτός Sandbox που λαμβάνονται μέσω διεπαφών συστήματος.
  • App Groups δημιουργούν έναν κοινό χώρο Sandbox για ένα σύνολο εφαρμογών και επεκτάσεων από τον ίδιο προγραμματιστή.
  • Περιορισμοί Sandbox περιλαμβάνουν απαγόρευση δυναμικού κώδικα, θυγατρικών διεργασιών, δικτύου multicast και υποχρεωτικούς διαλόγους συστήματος για πόρους υλικού.
  • Όλες οι εφαρμογές App Store λειτουργούν σε Sandbox — αυτό δεν είναι προαιρετικό, αλλά υποχρεωτικό αρχιτεκτονικό χαρακτηριστικό του iOS.

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

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

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

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