Application Support — είναι ένας κατάλογος στο sandbox της εφαρμογής iOS, που προορίζεται για την αποθήκευση βοηθητικών δεδομένων απαραίτητων για τη λειτουργία της εφαρμογής, αλλά που δεν δημιουργούνται απευθείας από τον χρήστη. Σύμφωνα με το Apple File System Basics (2024), αυτός ο κατάλογος είναι βέλτιστος για αρχεία διαμόρφωσης, βάσεις δεδομένων SQLite Core Data, προσωρινά αποθηκευμένα έγγραφα και άλλα δεδομένα που η εφαρμογή δημιουργεί ανεξάρτητα. Σε αντίθεση με το Documents Directory, το Application Support δεν εμφανίζεται στο iTunes File Sharing και ο χρήστης δεν έχει άμεση πρόσβαση σε αυτό, γεγονός που προστατεύει τα δεδομένα υπηρεσίας από τυχαία διαγραφή.
Κύρια σημεία
Application Support — είναι ένας κατάλογος στο sandbox της εφαρμογής iOS, που προορίζεται για την αποθήκευση δεδομένων που η εφαρμογή δημιουργεί και χρησιμοποιεί για τη λειτουργία της, αλλά δεν είναι έγγραφα χρήστη. Αυτή είναι η κύρια τοποθεσία για ρυθμίσεις, βάσεις δεδομένων, προσωρινά αποθηκευμένα μεταδεδομένα και άλλα βοηθητικά αρχεία.
Το iOS διακρίνει το Application Support ως ενδιάμεσο επίπεδο μεταξύ Documents (δεδομένα χρήστη) και Caches (προσωρινά δεδομένα). Τα αρχεία στο Application Support μπορεί να είναι σχετικά μόνιμα, αλλά ο χρήστης δεν θα πρέπει να έχει άμεση πρόσβαση σε αυτά — αυτό το διακρίνει από το Documents Directory.
Σύμφωνα με το Apple Developer Documentation (2024), το Application Support είναι η συνιστώμενη τοποθεσία για την αποθήκευση βάσεων δεδομένων SQLite Core Data, αρχείων Realm, ρυθμίσεων σε μορφή JSON/plist, ληφθέντων υλικών αναφοράς και άλλων δεδομένων που η εφαρμογή χρησιμοποιεί αλλά ο χρήστης δεν έχει δημιουργήσει ρητά.
Σημαντικό: από προεπιλογή, το Application Support περιλαμβάνεται στο αντίγραφο ασφαλείας iCloud και iTunes. Εάν η εφαρμογή αποθηκεύει μεγάλους όγκους δεδομένων που μπορούν να επαναφερθούν σε αυτόν τον κατάλογο (π.χ., ληφθέντες οδηγοί), πρέπει να οριστεί η σημαία isExcludedFromBackup για τα αντίστοιχα αρχεία.
Στο Swift, η διαδρομή προς το Application Support Directory λαμβάνεται μέσω του FileManager.urls(for: .applicationSupportDirectory). Η Apple συνιστά τη δημιουργία ενός υποκαταλόγου με το όνομα της εφαρμογής μέσα στο Application Support για απομόνωση δεδομένων.
import Foundation
let fileManager = FileManager.default
guard let appSupportURL = fileManager.urls(
for: .applicationSupportDirectory,
in: .userDomainMask
).first else { return }
// Δημιουργία υποκαταλόγου εφαρμογής
let bundleID = Bundle.main.bundleIdentifier ?? "com.example.app"
let appDir = appSupportURL.appendingPathComponent(bundleID)
try fileManager.createDirectory(
at: appDir,
withIntermediateDirectories: true
)
Το Objective-C χρησιμοποιεί το NSSearchPathForDirectoriesInDomains με NSApplicationSupportDirectory. Όπως και στο Swift, συνιστάται η δημιουργία ενός υποκαταλόγου με το όνομα της εφαρμογής.
@import Foundation;
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSApplicationSupportDirectory,
NSUserDomainMask,
YES
);
NSString *appSupportPath = paths.firstObject;
NSString *appDir = [appSupportPath stringByAppendingPathComponent:@"com.example.app"];
Κατά την πρώτη εκκίνηση, ο κατάλογος Application Support μπορεί να μην υπάρχει — πρέπει να δημιουργηθεί χρησιμοποιώντας το createDirectory(at:withIntermediateDirectories:). Αυτό το διακρίνει από το Documents Directory που δημιουργείται αυτόματα από το σύστημα.
Application Support είναι κατάλληλο για ένα ευρύ φάσμα δεδομένων που η εφαρμογή χρησιμοποιεί για τη λειτουργία της. Η σωστή επιλογή δεδομένων για αυτόν τον κατάλογο βελτιώνει την οργάνωση του συστήματος αρχείων και απλοποιεί τη δημιουργία αντιγράφων ασφαλείας.
Τα αρχεία SQLite του Core Data δημιουργούνται από προεπιλογή στο Application Support. Η Realm επίσης συνιστά την τοποθέτηση βάσεων δεδομένων σε αυτόν τον κατάλογο. Αυτό απομονώνει τα έγγραφα χρήστη από τις εσωτερικές βάσεις δεδομένων της εφαρμογής.
JSON, plist, αρχεία XML με ρυθμίσεις εφαρμογής, Feature Flags, προσωρινά αποθηκευμένα μεταδεδομένα σχετικά με τον χρήστη (αλλά όχι διακριτικά εξουσιοδότησης — γι’ αυτά υπάρχει το Keychain).
| Τύπος δεδομένων | Application Support | Εναλλακτική |
|---|---|---|
| SQLite Core Data | Ναι (προεπιλογή) | — |
| Ρυθμίσεις .plist / .json | Ναι | UserDefaults (για απλές) |
| Ληφθέντα υλικά αναφοράς | Ναι | Documents (εάν για χρήστη) |
| Αρχεία καταγραφής εφαρμογής | Υπό όρους | Caches (για αρχεία καταγραφής) |
| Διακριτικά εξουσιοδότησης | Όχι | Keychain |
Κριτήριο επιλογής: εάν τα δεδομένα δημιουργούνται και χρησιμοποιούνται από την εφαρμογή, όχι από τον χρήστη, και πρέπει να διατηρούνται μεταξύ εκκινήσεων — η θέση τους είναι στο Application Support.
Core Data — ένας από τους κύριους καταναλωτές του Application Support. Κατά τη δημιουργία του NSPersistentContainer, το Core Data τοποθετεί αυτόματα αρχεία SQLite στο Library/Application Support με μοναδικό όνομα βάσει του ονόματος μοντέλου.
Η κατανόηση του πού αποθηκεύει το Core Data τα αρχεία είναι κρίσιμη για μετεγκαταστάσεις, αντίγραφα ασφαλείας και εντοπισμό σφαλμάτων. Κύρια αρχεία: .sqlite (δεδομένα), .sqlite-wal (Write-Ahead Log), .sqlite-shm (Shared Memory).
import CoreData
// Δημιουργία κοντεινερ Core Data
let container = NSPersistentContainer(name: "MyAppModel")
// Προσαρμοσμένος κατάλογος URL αποθήκης
guard let appSupportURL = FileManager.default
.urls(for: .applicationSupportDirectory,
in: .userDomainMask).first else { return }
let storeURL = appSupportURL
.appendingPathComponent("MyAppModel.sqlite")
let description = NSPersistentStoreDescription(url: storeURL)
container.persistentStoreDescriptions = [description]
Κατά τη χρήση συγχρονισμού CloudKit για Core Data, το αρχείο SQLite παραμένει στο Application Support και το CloudKit χρησιμοποιείται ως επίπεδο μεταφοράς. Σε αυτή την περίπτωση, είναι σημαντικό να μην εξαιρούνται τα αρχεία από το αντίγραφο ασφαλείας — διαφορετικά ο συγχρονισμός μεταξύ συσκευών μπορεί να διαταραχθεί.
Η διαφορά μεταξύ Application Support και Documents — μία από τις πιο σημαντικές για τη σωστή οργάνωση της δομής αρχείων της εφαρμογής iOS. Η λανθασμένη επιλογή μπορεί να οδηγήσει σε τυχαία διαγραφή σημαντικών δεδομένων εφαρμογής από τον χρήστη ή, αντίθετα, στην αδυναμία εύρεσης των δικών του αρχείων.
| Παράμετρος | Application Support | Documents Directory |
|---|---|---|
| Πρόσβαση χρήστη | Όχι (κρυφός) | Μέσω iTunes File Sharing |
| Τύπος δεδομένων | Δεδομένα υπηρεσίας εφαρμογής | Έγγραφα χρήστη |
| Αντίγραφο ασφαλείας iCloud | Ναι (προεπιλογή) | Ναι (προεπιλογή) |
| Κίνδυνος διαγραφής | Χαμηλός (χωρίς πρόσβαση) | Μέτριος (προσβάσιμος στον χρήστη) |
| Παράδειγμα | SQLite Core Data | Εξαγόμενο PDF |
Απλός κανόνας: εάν ο χρήστης πρέπει να βλέπει το αρχείο και να μπορεί να το διαγράψει — χρησιμοποίησε Documents. Εάν το αρχείο είναι απαραίτητο για τη λειτουργία της εφαρμογής αλλά ο χρήστης δεν χρειάζεται να γνωρίζει γι’ αυτό — χρησιμοποίησε Application Support. Εάν τα δεδομένα μπορούν να αποκατασταθούν — χρησιμοποίησε Caches.
Η εργασία με το Application Support απαιτεί τη λήψη υπόψη αρκετών χαρακτηριστικών που το διακρίνουν από άλλους καταλόγους στο sandbox. Η τήρηση αυτών των πρακτικών βοηθά στην αποφυγή απώλειας δεδομένων, προβλημάτων μετεγκατάστασης και απροσδόκητης συμπεριφοράς της εφαρμογής.
Σε αντίθεση με το Documents, το Application Support μπορεί να μην υπάρχει κατά την πρώτη εκκίνηση. Χρησιμοποίησε το createDirectory(at:withIntermediateDirectories:) με την παράμετρο withIntermediateDirectories: true για να εγγυηθείς τη δημιουργία ολόκληρης της αλυσίδας υποκαταλόγων.
Δημιούργησε έναν υποκατάλογο με Bundle Identifier μέσα στο Application Support. Αυτό απομονώνει τα δεδομένα της εφαρμογής σου από δεδομένα άλλων εφαρμογών (αν και το sandbox παρέχει ήδη απομόνωση) και απλοποιεί τη μετεγκατάσταση κατά την αλλαγή παρόχου.
import Foundation
enum AppSupport {
static func ensureDirectory() throws -> URL {
let fm = FileManager.default
let baseURL = try fm.url(
for: .applicationSupportDirectory,
in: .userDomainMask,
appropriateFor: nil,
create: true
)
let appDir = baseURL
.appendingPathComponent(Bundle.main.bundleIdentifier ?? "default")
try fm.createDirectory(at: appDir, withIntermediateDirectories: true)
return appDir
}
}
Η τήρηση αυτών των πρακτικών εγγυάται ότι τα δεδομένα υπηρεσίας της εφαρμογής είναι σωστά οργανωμένα, προστατευμένα από τυχαία διαγραφή από τον χρήστη και σωστά επαναφέρονται από αντίγραφα ασφαλείας.
Συχνές Ερωτήσεις
Ναι, το Application Support δεν δημιουργείται αυτόματα κατά την εγκατάσταση της εφαρμογής. Σε αντίθεση με τα Documents και Caches, που το σύστημα δημιουργεί κατά την πρώτη εκκίνηση, το Application Support πρέπει να δημιουργηθεί από τον προγραμματιστή χρησιμοποιώντας το FileManager.createDirectory(at:withIntermediateDirectories:). Αυτό γίνεται συνήθως στη μέθοδο application(_:didFinishLaunchingWithOptions:).
Όχι, μέσω της τυπικής διεπαφής iOS (Files, iTunes) ο χρήστης δεν έχει πρόσβαση στο Application Support. Ωστόσο, κατά τη διαγραφή της ίδιας της εφαρμογής, ολόκληρο το sandbox, συμπεριλαμβανομένου του Application Support, διαγράφεται πλήρως. Το αντίγραφο ασφαλείας στο iCloud διατηρείται μέχρι την επαναφορά ή τη χειροκίνητη διαγραφή.
Για ληφθέντα βίντεο που προορίζονται για τον χρήστη, είναι καλύτερο να χρησιμοποιήσετε το Documents Directory — ώστε ο χρήστης να μπορεί να διαχειρίζεται αυτά τα αρχεία μέσω του Files. Εάν το βίντεο είναι μέρος της εσωτερικής προσωρινής μνήμης της εφαρμογής (π.χ., περιεχόμενο εκτός σύνδεσης για εκμάθηση), μπορεί να χρησιμοποιηθεί το Application Support με τη σημαία isExcludedFromBackup για μεγάλα αρχεία.
Πρόσθεσε εκδοσήμανση υποκαταλόγων μέσα στο Application Support. Κατά την ενημέρωση, έλεγξε την τρέχουσα έκδοση δεδομένων και εάν χρειάζεται, δημιούργησε έναν νέο υποκατάλογο, διατηρώντας τον παλιό για επαναφορά. Διέγραψε τον παλιό κατάλογο μόνο μετά την επιβεβαίωση ότι όλοι οι χρήστες έχουν μετεγκατασταθεί επιτυχώς στη νέα έκδοση δεδομένων.
Έμμεσα — ναι. Εάν το Application Support περιέχει δεκάδες χιλιάδες μικρά αρχεία, το FileManager.enumerator μπορεί να επιβραδύνει την αρχικοποίηση. Συνιστάται ο περιορισμός του αριθμού αρχείων στο Application Support (όχι περισσότερα από 1000) και η χρήση βάσεων δεδομένων (Core Data, Realm) αντί για πολλαπλά μεμονωμένα αρχεία για δομημένα δεδομένα.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης