App Group: τι είναι, δημιουργία κοινόχρηστου δοχείου και ρύθμιση πρόσβασης

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

Το App Group είναι ένας μηχανισμός iOS που δημιουργεί ένα κοινόχρηστο δοχείο για ανταλλαγή δεδομένων μεταξύ της εφαρμογής και των επεκτάσεών της. Χωρίς αυτό, κάθε διεργασία (κύρια εφαρμογή, widget, share extension) λειτουργεί σε ένα απομονωμένο sandbox και δεν έχει πρόσβαση στα δεδομένα ενός γειτονικού στοιχείου. Σύμφωνα με το Apple Developer Documentation, 2026, το App Group λύνει αυτό το πρόβλημα μέσω ενός μοναδικού αναγνωριστικού ομάδας που καθορίζεται στα entitlements. Είναι ένα θεμελιώδες εργαλείο για τη δημιουργία μιας συνεπούς εμπειρίας χρήστη στο οικοσύστημα iOS.

Κύρια σημεία

  • App Group — κοινόχρηστος κατάλογος στο σύστημα αρχείων iOS, προσβάσιμος στην εφαρμογή και τις επεκτάσεις της.
  • Identifier σχηματίζεται με το πρότυπο group.* και προστίθεται στα Capabilities του έργου Xcode.
  • UserDefaults με suite name επιτρέπει τον συγχρονισμό ρυθμίσεων μεταξύ διεργασιών χωρίς επιπλέον κώδικα.
  • Core Data μέσω App Group επιτρέπει στις επεκτάσεις να διαβάζουν και να γράφουν δεδομένα στην κοινόχρηστη βάση με σωστή ρύθμιση του Store URL.
  • Ασφάλεια εγγυάται το γεγονός ότι μόνο διεργασίες με το ίδιο team ID και entitlement έχουν πρόσβαση στο δοχείο.

Τι είναι το App Group;

App Group είναι ένας μηχανισμός του λειτουργικού συστήματος iOS που παρέχει μια κοινόχρηστη περιοχή αποθήκευσης για πολλές διεργασίες ενός προγραμματιστή. Χωρίς αυτό, κάθε επέκταση λειτουργεί στο δικό της sandbox και δεν μπορεί να διαβάσει δεδομένα που έγραψε ένα άλλο στοιχείο. Το App Group λύνει αυτή την απομόνωση δημιουργώντας έναν κατάλογο στο σύστημα αρχείων προσβάσιμο σε όλες τις διεργασίες με σωστά entitlements.

Το αναγνωριστικό ομάδας ξεκινά με το πρόθεμα group. και καθορίζεται στο αρχείο entitlements του έργου. Στο Xcode, αυτό το αναγνωριστικό προστίθεται μέσω Capabilities — το σύστημα το συμπεριλαμβάνει αυτόματα στην υπογραφή της εφαρμογής. Μετά τη ρύθμιση, όλα τα μέλη της ομάδας αποκτούν πρόσβαση στον κοινόχρηστο κατάλογο στη διαδρομή Library/Application Support/ εντός του δοχείου.

Σύμφωνα με το Apple WWDC 2020 Session 10026, το App Group καλύπτει τρία βασικά σενάρια: συγχρονισμό ρυθμίσεων μέσω NSUserDefaults, κοινόχρηστη πρόσβαση σε αρχεία μέσω FileManager και κοινή χρήση Core Data με ένα ενιαίο αποθετήριο. Για κάθε σενάριο, αρκεί να καθορίσετε το αναγνωριστικό ομάδας στο αντίστοιχο API.

Πώς λειτουργεί το κοινόχρηστο δοχείο App Group

Το iOS δημιουργεί το κοινόχρηστο δοχείο κατά την πρώτη εκτέλεση οποιασδήποτε διεργασίας που έχει entitlement com.apple.security.application-groups. Φυσικά, το δοχείο βρίσκεται σε έναν κατάλογο συστήματος — η διαδρομή του διαφέρει από το sandbox της κύριας εφαρμογής και των επεκτάσεων, αλλά όλες οι εξουσιοδοτημένες διεργασίες έχουν δικαιώματα ανάγνωσης και εγγραφής.

Δικαιώματα πρόσβασης και ασφάλεια

Η Apple εγγυάται την ασφάλεια του App Group μέσω της σύνδεσης team ID και υπογραφής κώδικα. Μια διεργασία που δεν είναι υπογεγραμμένη με το ίδιο πιστοποιητικό προγραμματιστή δεν μπορεί να αποκτήσει πρόσβαση στο δοχείο της ομάδας. Αυτό αποτρέπει τη διαρροή δεδομένων μεταξύ εφαρμογών διαφορετικών προγραμματιστών.

Αναγνωριστικό ομάδας

Μορφή αναγνωριστικού: group.<team-id>.<name>. Για παράδειγμα, group.ABC123DEFG.widget-data. Σε μία συσκευή μπορούν να δημιουργηθούν πολλές ομάδες, η καθεμία με το δικό της σύνολο συμμετεχόντων. Μία εφαρμογή μπορεί να ανήκει σε πολλά App Group ταυτόχρονα — αυτό είναι χρήσιμο για τον διαχωρισμό δεδομένων διαφορετικών επεκτάσεων.

swift
// Λάβετε το URL του δοχείου App Group
guard let containerURL = FileManager.default
    .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.widget")
else { return }

// Δημιουργήστε ένα αρχείο στο κοινόχρηστο δοχείο
let fileURL = containerURL.appendingPathComponent("shared.data")
try "Hello from main app".write(to: fileURL, atomically: true, encoding: .utf8)

Το FileManager παρέχει τη μέθοδο containerURL(forSecurityApplicationGroupIdentifier:) που επιστρέφει το URL του κοινόχρηστου καταλόγου. Είναι σημαντικό να καλείτε αυτή τη μέθοδο σε κάθε διεργασία ξεχωριστά — η διαδρομή είναι φυσικά η ίδια, αλλά κάθε διεργασία τη βλέπει μέσω του δικού της πρίσματος ασφαλείας.

Ρύθμιση App Group στο Xcode

Η ενεργοποίηση του App Group στο Xcode ξεκινά από τα Capabilities — ο διακόπτης App Groups προσθέτει entitlement στο έργο. Το Apple Developer Portal απαιτεί επίσης το αναγνωριστικό της εφαρμογής να περιλαμβάνει αυτή τη δυνατότητα. Χωρίς αυτήν, η υπογραφή κώδικα δεν θα λειτουργήσει σε πραγματική συσκευή.

Βήμα προς βήμα ρύθμιση

Ανοίξτε το έργο στο Xcode, επιλέξτε το target της εφαρμογής και μεταβείτε στην καρτέλα Signing & Capabilities. Πατήστε + και επιλέξτε App Groups. Δημιουργήστε μια νέα ομάδα ή επιλέξτε μια υπάρχουσα. Επαναλάβετε τα ίδια βήματα για κάθε επέκταση που πρέπει να έχει πρόσβαση στο κοινόχρηστο δοχείο. Όλοι οι συμμετέχοντες πρέπει να χρησιμοποιούν το ίδιο αναγνωριστικό ομάδας.

Έλεγχος entitlements

Μετά την ενεργοποίηση των Capabilities, το Xcode δημιουργεί αυτόματα το αρχείο .entitlements με το κλειδί com.apple.security.application-groups και έναν πίνακα αναγνωριστικών. Βεβαιωθείτε ότι όλες οι απαραίτητες επεκτάσεις έχουν αυτό το αρχείο με το σωστό team ID στο αναγνωριστικό ομάδας.

xml
<!-- Example entitlements file -->
<key>com.apple.security.application-groups</key>
<array>
    <string>group.com.example.shared</string>
</array>

Εάν το έργο σας έχει πολλές επεκτάσεις (Today Widget, Share Extension, Notification Service), η καθεμία πρέπει να έχει το δικό της αρχείο entitlements με την ίδια ομάδα. Η απουσία entitlements σε οποιοδήποτε target είναι μια συχνή αιτία για την οποία μια επέκταση δεν βλέπει κοινόχρηστα δεδομένα.

Χρήση UserDefaults με App Group

Ο απλούστερος τρόπος συγχρονισμού δεδομένων μεταξύ της εφαρμογής και των επεκτάσεων — UserDefaults με καθορισμό suite name. Αντί για το τυπικό UserDefaults.standard, δημιουργείτε ένα στιγμιότυπο με το αναγνωριστικό App Group και όλες οι διεργασίες διαβάζουν τις ίδιες ρυθμίσεις.

Σύμφωνα με τις Apple Human Interface Guidelines, αυτός ο μηχανισμός είναι κατάλληλος για συγχρονισμό κατάστασης: επιλεγμένο θέμα, αγαπημένα στοιχεία, σημαίες onbording. Ωστόσο, δεν προορίζεται για μεγάλους όγκους δεδομένων ή ταυτόχρονες εγγραφές — γι' αυτό χρησιμοποιήστε αρχεία ή Core Data.

swift
// Εγγραφή στο UserDefaults App Group (κύρια εφαρμογή)
let defaults = UserDefaults(suiteName: "group.com.example.shared")
defaults?.set(true, forKey: "isDarkMode")
defaults?.synchronize()

// Ανάγνωση από UserDefaults App Group (επέκταση widget)
let sharedDefaults = UserDefaults(suiteName: "group.com.example.shared")
let isDark = sharedDefaults?.bool(forKey: "isDarkMode") ?? false

Σημειώστε: το στιγμιότυπο UserDefaults με suiteName δημιουργείται σε κάθε διεργασία ξεχωριστά, αλλά διαβάζει από ένα αρχείο plist στο κοινόχρηστο δοχείο. Η μέθοδος synchronize() εγγυάται άμεση εγγραφή στο δίσκο — σε iOS 13+ μπορεί να παραλειφθεί, καθώς το σύστημα συγχρονίζει περιοδικά τα δεδομένα.

Κοινόχρηστη πρόσβαση σε αρχεία και Core Data

Για πιο σύνθετα σενάρια, το App Group παρέχει πρόσβαση στο κοινόχρηστο σύστημα αρχείων. Οποιοδήποτε αρχείο δημιουργείται στον κατάλογο του δοχείου είναι προσβάσιμο σε όλες τις διεργασίες της ομάδας. Αυτό επιτρέπει την υλοποίηση μιας κοινόχρηστης βάσης Core Data, προσωρινής μνήμης εικόνων ή προσωρινών αρχείων.

Ρύθμιση Core Data με App Group

Για να χρησιμοποιήσετε κοινόχρηστο αποθετήριο Core Data, δημιουργήστε ένα NSPersistentContainer με το URL του αρχείου .sqlite που βρίσκεται στον κατάλογο App Group. Βεβαιωθείτε ότι μόνο μία διεργασία γράφει στη βάση κάθε φορά — η ταυτόχρονη εγγραφή μπορεί να καταστρέψει δεδομένα. Τυπική αρχιτεκτονική: η κύρια εφαρμογή γράφει, οι επεκτάσεις διαβάζουν.

swift
// Ρύθμιση Core Data με δοχείο App Group
lazy var persistentContainer: NSPersistentContainer = {
    let container = NSPersistentContainer(name: "SharedModel")
    guard let appGroupURL = FileManager.default
        .containerURL(forSecurityApplicationGroupIdentifier: "group.com.example.shared")
    else { return container }

    let storeURL = appGroupURL.appendingPathComponent("SharedModel.sqlite")
    container.persistentStoreDescriptions = [NSPersistentStoreDescription(url: storeURL)]
    container.loadPersistentStores { _, error in
        if let error = error { fatalError(error.localizedDescription) }
    }
    return container
}()

Μια εναλλακτική προσέγγιση — προσωρινή μνήμη εικόνων σε αρχεία. Το NSCache ζει μόνο στη μνήμη, αλλά μέσω του App Group μπορείτε να αποθηκεύσετε εικόνες στην προσωρινή μνήμη στο δίσκο στον κοινόχρηστο κατάλογο. Η επέκταση widget αποκτά πρόσβαση στα ίδια αρχεία και εμφανίζει ενημερωμένα δεδομένα χωρίς επιπλέον φόρτωση από το δίκτυο.

ΣενάριοΣυνιστώμενο APIΜέγεθος δεδομένων
Ρυθμίσεις και σημαίεςUserDefaults suiteNameέως 1 KB
Προσωρινή μνήμη εικόνωνFileManager + NSCacheέως 100 MB
Δομημένα δεδομέναCore Data storeέως 500 MB
Προσωρινά αρχείαFileManager temporaryέως 50 MB

Κατά την εργασία με κοινόχρηστα αρχεία, λάβετε υπόψη ότι το σύστημα μπορεί να αφαιρέσει την επέκταση ανά πάσα στιγμή. Χρησιμοποιήστε το NSFileCoordinator για συντονισμό πρόσβασης, ώστε να αποφύγετε την καταστροφή δεδομένων κατά την ταυτόχρονη εγγραφή από διαφορετικές διεργασίες.

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

Τι είναι το App Group στο iOS;

App Group είναι ένας μηχανισμός iOS που δημιουργεί ένα κοινόχρηστο δοχείο για αποθήκευση δεδομένων μεταξύ της εφαρμογής και των επεκτάσεών της. Επιτρέπει σε διεργασίες με το ίδιο αναγνωριστικό ομάδας να ανταλλάσσουν αρχεία, ρυθμίσεις UserDefaults και δεδομένα Core Data μέσω ενός ενιαίου καταλόγου στο σύστημα αρχείων.

Πώς δημιουργώ ένα App Group στο Xcode;

Ανοίξτε τα Capabilities του target στο Xcode, ενεργοποιήστε τα App Groups και προσθέστε ένα αναγνωριστικό στη μορφή group.*. Στη συνέχεια, επαναλάβετε τα ίδια βήματα για κάθε επέκταση που πρέπει να έχει πρόσβαση στο κοινόχρηστο δοχείο. Βεβαιωθείτε ότι όλοι οι συμμετέχοντες χρησιμοποιούν το ίδιο αναγνωριστικό ομάδας.

Ποιες επεκτάσεις μπορούν να χρησιμοποιήσουν το App Group;

Όλοι οι τύποι επεκτάσεων iOS υποστηρίζουν το App Group: Today Widget (widget extension), Share Extension, Notification Service Extension, Custom Keyboard και άλλες. Κάθε επέκταση πρέπει να έχει ξεχωριστό αρχείο entitlements με το ίδιο αναγνωριστικό ομάδας με την κύρια εφαρμογή.

Μπορεί το App Group να χρησιμοποιηθεί μεταξύ διαφορετικών εφαρμογών;

Ναι, αλλά μόνο αν οι εφαρμογές είναι υπογεγραμμένες με το ίδιο πιστοποιητικό προγραμματιστή και έχουν το ίδιο team ID. Η Apple εγγυάται την ασφάλεια μέσω της υπογραφής κώδικα: δύο εφαρμογές από διαφορετικούς προγραμματιστές δεν μπορούν να αποκτήσουν πρόσβαση στο ίδιο δοχείο ακόμη και με το ίδιο αναγνωριστικό ομάδας.

Πώς συγχρονίζω δεδομένα μέσω App Group μεταξύ εφαρμογής και widget;

Χρησιμοποιήστε UserDefaults με suite name για μικρές ρυθμίσεις, FileManager για αρχεία και Core Data για δομημένα δεδομένα. Όλα αυτά τα API λειτουργούν με τον κατάλογο App Group — αρκεί να καθορίσετε το αναγνωριστικό ομάδας κατά την αρχικοποίηση. Για Core Data, βεβαιωθείτε ότι το URL του αποθετηρίου δείχνει στον κοινόχρηστο κατάλογο.

Σύνοψη

  • Το App Group είναι ο μόνος τρόπος να οργανώσετε την ανταλλαγή δεδομένων μεταξύ μιας εφαρμογής iOS και των επεκτάσεών της μέσω ενός κοινόχρηστου δοχείου στο σύστημα αρχείων.
  • Το αναγνωριστικό ομάδας έχει μορφή group.<team-id>.<name> και προστίθεται μέσω Capabilities Xcode με υποχρεωτικό αρχείο entitlements για κάθε target.
  • Το UserDefaults με suite name είναι η απλούστερη μέθοδος συγχρονισμού ρυθμίσεων και σημαιών μεταξύ διεργασιών χωρίς διαχείριση αρχείων.
  • Το Core Data με App Group απαιτεί τον καθορισμό του URL αποθετηρίου εντός του δοχείου και συντονισμό πρόσβασης μεταξύ διεργασιών για αποφυγή καταστροφής της βάσης.
  • Το FileManager.containerURL επιστρέφει τη διαδρομή προς τον κοινόχρηστο κατάλογο που είναι ίδια για όλες τις διεργασίες με σωστά entitlements.
  • Η ασφάλεια δεδομένων διασφαλίζεται με έλεγχο team ID και υπογραφής κώδικα — μόνο εφαρμογές του ίδιου προγραμματιστή έχουν πρόσβαση στο κοινόχρηστο δοχείο.
  • Για ταυτόχρονη εγγραφή σε κοινόχρηστα αρχεία χρησιμοποιήστε NSFileCoordinator, και για συγχρονισμό αλλαγών μεταξύ διεργασιών — Darwin Notifications ή CFNotificationCenter.

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

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

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

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