Sandbox — είναι ένα απομονωμένο περιβάλλον εκτέλεσης εφαρμογής iOS που περιορίζει την πρόσβαση στο σύστημα αρχείων, το δίκτυο, τους πόρους υλικού και τα δεδομένα άλλων εφαρμογών. Κάθε εφαρμογή λαμβάνει το δικό της περιβάλλον Sandbox κατά την εγκατάσταση και όλες οι λειτουργίες αρχείων της ανακατευθύνονται αυτόματα σε αυτήν την απομονωμένη περιοχή. Σύμφωνα με τον Apple App Sandbox Design Guide (2026), η αρχιτεκτονική sandbox βασίζεται σε τρία επίπεδα προστασίας: απομόνωση συστήματος αρχείων, έλεγχο επικοινωνίας μεταξύ διεργασιών και διαμοιρασμό πόρων υλικού με ρητό αίτημα δικαιωμάτων μέσω entitlements.
Κύρια σημεία
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) και καταγραφή στο αρχείο καταγραφής συστήματος.
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 κάθε εφαρμογής 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 | Ανάγνωση και εγγραφή |
| Bundle | Bundle.main.bundlePath | Μόνο ανάγνωση |
| Library | .libraryDirectory | Ανάγνωση και εγγραφή |
| tmp | NSTemporaryDirectory() | Ανάγνωση και εγγραφή |
| App Group | .containerURL(forSecurityApplicationGroupIdentifier:) | Ανάγνωση και εγγραφή |
Άμεση πρόσβαση στο σύστημα αρχείων άλλων εφαρμογών στο iOS είναι εντελώς αποκλεισμένη. Ακόμα κι αν ο προγραμματιστής γνωρίζει το UUID του κοντέινερ άλλης εφαρμογής, το Sandbox σε επίπεδο πυρήνα θα επιστρέψει σφάλμα κατά την προσπάθεια ανάγνωσης ή εγγραφής. Αυτή είναι η θεμελιώδης διαφορά μεταξύ iOS και macOS, όπου το Sandbox είναι πιο ευέλικτο.
Η Apple παρέχει τρεις νόμιμους μηχανισμούς για ανταλλαγή δεδομένων μεταξύ εφαρμογών: UIDocumentPickerViewController (ο χρήστης επιλέγει αρχείο μέσω διεπαφής συστήματος, η εφαρμογή λαμβάνει Security-Scoped URL), Share Extension (επέκταση για μεταφορά δεδομένων σε άλλη εφαρμογή) και App Groups (κοινός κατάλογος για εφαρμογές του ίδιου προγραμματιστή).
UIDocumentPicker — ο μόνος τρόπος πρόσβασης σε αρχεία από άλλες εφαρμογές χωρίς προηγούμενη διαμόρφωση. Ο χρήστης επιλέγει ρητά το αρχείο μέσω του τυπικού επιλογέα συστήματος και το iOS παρέχει στην εφαρμογή ένα προσωρινό Security-Scoped URL. Η πρόσβαση ισχύει μέχρι το κλείσιμο του επιλογέα ή μέχρι την κλήση του stopAccessingSecurityScopedResource.
Security-Scoped Bookmark — είναι ένας μηχανισμός iOS που επιτρέπει τη διατήρηση πρόσβασης σε ένα αρχείο εκτός Sandbox μεταξύ εκκινήσεων της εφαρμογής. Όταν ο χρήστης επιλέγει ένα αρχείο μέσω UIDocumentPicker, η εφαρμογή μπορεί να δημιουργήσει ένα bookmark από το Security-Scoped URL και να το αποθηκεύσει στο UserDefaults ή σε άλλη αποθήκη.
Στην επόμενη εκκίνηση, η εφαρμογή επαναφέρει την πρόσβαση μέσω URLByResolvingBookmarkData, η οποία επιστρέφει ένα Security-Scoped URL. Στη συνέχεια, πρέπει να κληθεί το startAccessingSecurityScopedResource πριν από την ανάγνωση του αρχείου και το stopAccessingSecurityScopedResource μετά την ολοκλήρωση της εργασίας. Η ισορροπία κλήσεων είναι υποχρεωτική — κάθε start πρέπει να έχει ένα αντίστοιχο stop, διαφορετικά το σύστημα θα εξαντλήσει το όριο των πόρων Security-Scoped.
// Δημιουργία 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 καθίσταται άκυρο.
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), απαγόρευση άμεσης πρόσβασης στο βιβλίο διευθύνσεων, ημερολόγιο και φωτογραφίες χωρίς άδεια χρήστη (Privacy framework) και περιορισμοί στη δημιουργία θυγατρικών διεργασιών (fork, exec απαγορεύονται).
Δίκτυο: οι εφαρμογές μπορούν να συνδεθούν σε οποιουσδήποτε απομακρυσμένους διακομιστές μέσω TCP/UDP, αλλά η πρόσβαση στο localhost είναι περιορισμένη — άλλες εφαρμογές δεν μπορούν να συνδεθούν στον διακομιστή εντός της εφαρμογής σας (εκτός από debug builds). Το multicast και broadcast UDP επίσης μπλοκάρονται για εφαρμογές App Store.
Πόροι υλικού: η πρόσβαση στην κάμερα, το μικρόφωνο, τη γεωγραφική τοποθεσία, το Bluetooth και το HealthKit απαιτεί ρητή άδεια χρήστη μέσω διαλόγου συστήματος. Για κάθε τύπο πόρου, το iOS χρησιμοποιεί ξεχωριστό entitlement και κλειδί Info.plist με περιγραφή του λόγου (NSPhotoLibraryUsageDescription, NSCameraUsageDescription). Το αίτημα άδειας χωρίς περιγραφή λόγου στο Info.plist οδηγεί σε τερματισμό της εφαρμογής.
Συχνές Ερωτήσεις
Sandbox — απομονωμένο περιβάλλον εκτέλεσης εφαρμογής iOS που περιορίζει την πρόσβαση στο σύστημα αρχείων, το δίκτυο και τα δεδομένα άλλων εφαρμογών. Κάθε εφαρμογή έχει ένα μοναδικό κοντέινερ Sandbox του οποίου η πρόσβαση ελέγχεται σε επίπεδο πυρήνα iOS μέσω Sandbox.kext.
Η εφαρμογή έχει πρόσβαση σε: Documents (δεδομένα χρήστη), Library (Caches, Preferences, Application Support), tmp (προσωρινά αρχεία) και Bundle (μόνο ανάγνωση). Ο κατάλογος App Group είναι διαθέσιμος για εφαρμογές της ίδιας ομάδας προγραμματιστή.
Μέσω UIDocumentPickerViewController — ο χρήστης επιλέγει αρχείο μέσω διεπαφής συστήματος. Το iOS παρέχει ένα Security-Scoped URL, προσβάσιμο μέχρι την κλήση του stopAccessingSecurityScopedResource. Εναλλακτικά — Share Extension για μεταφορά δεδομένων μεταξύ εφαρμογών.
Security-Scoped Bookmark — είναι δεδομένα που διατηρούν την πρόσβαση σε ένα αρχείο εκτός Sandbox μεταξύ εκκινήσεων της εφαρμογής. Δημιουργείται από ένα Security-Scoped URL (που λαμβάνεται από UIDocumentPicker) μέσω bookmarkData. Στην επόμενη εκκίνηση, το bookmark επαναφέρεται μέσω URLByResolvingBookmarkData.
Όχι, το Sandbox δεν μπορεί να απενεργοποιηθεί για εφαρμογές από το App Store. Σε συσκευές με jailbreak είναι δυνατή η απενεργοποίηση, αλλά αυτό δεν είναι συμβατό με τη δημοσίευση στο App Store. Οι προγραμματιστές μπορούν να δοκιμάζουν χωρίς Sandbox στον προσομοιωτή, αλλά οι πραγματικές συσκευές εφαρμόζουν πάντα το Sandbox.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης