Τα Entitlements είναι ψηφιακά δικαιώματα και άδειες που αποδίδονται στην εφαρμογή στο στάδιο της υπογραφής κώδικα και καθορίζουν την πρόσβαση σε προστατευμένες λειτουργίες του λειτουργικού συστήματος Apple. Σε αντίθεση με τις άδειες χρήστη, τα Entitlements ελέγχονται από το σύστημα κατά την εκκίνηση της εφαρμογής και δεν μπορούν να αλλάξουν από τον χρήστη. Σύμφωνα με το Apple Developer Documentation (2025), η σωστή διαμόρφωση των Entitlements είναι υποχρεωτική για τη χρήση του iCloud, των Push ειδοποιήσεων και των App Groups. Τα Entitlements αποτελούν βασικό στοιχείο του μοντέλου ασφαλείας των iOS και macOS.
Κύρια σημεία
Entitlements (μετάφραση από τα αγγλικά — «δικαιώματα») — είναι ένα ζεύγος κλειδιού-τιμής που περιλαμβάνεται στην υπογραφή κώδικα της εφαρμογής στο στάδιο κατασκευής και καθορίζει σε ποιες λειτουργίες συστήματος και δεδομένα έχει πρόσβαση η εφαρμογή. Τα Entitlements είναι ενσωματωμένα στο μοντέλο ασφαλείας της Apple από την εμφάνιση του iOS SDK και είναι υποχρεωτικά για όλες τις εφαρμογές που διανέμονται μέσω του App Store.
Η έννοια των Entitlements διαφέρει από τις παραδοσιακές άδειες (permissions) στο Android. Ενώ οι άδειες Android ζητούνται από τον χρήστη τη στιγμή της πρώτης χρήσης της λειτουργίας, τα Entitlements στο iOS ελέγχονται από το σύστημα κατά την εκκίνηση της εφαρμογής βάσει της ψηφιακής υπογραφής. Ο χρήστης δεν μπορεί να ανακαλέσει ή να αλλάξει ένα entitlement — αυτό το δικαίωμα παρέχεται στον προγραμματιστή μέσω του App Store Connect και καθορίζεται στο προφίλ υπογραφής.
Κάθε entitlement έχει αυστηρά καθορισμένο σκοπό και μορφή. Για παράδειγμα, το com.apple.security.application-groups επιτρέπει την πρόσβαση σε κοινόχρηστο δοχείο για ένα σύνολο εφαρμογών του ίδιου προγραμματιστή, και το aps-environment ενεργοποιεί την υποστήριξη για Push ειδοποιήσεις. Η Apple ελέγχει χειροκίνητα τα αιτήματα για entitlements στη διαδικασία App Review, αποτρέποντας την κατάχρηση δικαιωμάτων.
Τα Entitlements ταξινομούνται βάσει λειτουργικού σκοπού σε διάφορες κατηγορίες. Υπηρεσίες συστήματος — iCloud, Push Notifications, Siri. Ασφάλεια και δεδομένα — Keychain Access Groups, App Groups, Data Protection. Δίκτυο και επικοινωνίες — Multipath TCP, VPN, Hotspot Configuration. Δυνατότητες υλικού — Camera, Microphone, Bluetooth (μέσω σχετικών capabilities).
Το Xcode ομαδοποιεί σχετικά entitlements σε Capabilities — διακόπτες υψηλού επιπέδου στην καρτέλα Signing & Capabilities. Η ενεργοποίηση μιας Capability προσθέτει αυτόματα τα απαραίτητα entitlements στο αρχείο .entitlements. Για παράδειγμα, η ενεργοποίηση της Capability Push Notifications προσθέτει το entitlement aps-environment με τιμή development ή production, και η ενεργοποίηση του iCloud προσθέτει ένα σύνολο entitlements για CloudKit και Key-Value storage.
Ορισμένες capabilities απαιτούν πρόσθετη διαμόρφωση στην πύλη Apple Developer. Για παράδειγμα, για τα App Groups πρέπει να καταχωρηθεί ένα αναγνωριστικό ομάδας στην πύλη, μετά από το οποίο γίνεται διαθέσιμο για επιλογή στο Xcode. Για τα Push Notifications πρέπει να δημιουργηθεί ένα κλειδί APNs ή πιστοποιητικό. Χωρίς αυτά τα προκαταρκτικά βήματα, το entitlement δεν θα λειτουργήσει ακόμη και με ένα σωστό αρχείο .entitlements.
Το entitlement com.apple.security.application-groups επιτρέπει σε πολλές εφαρμογές του ίδιου προγραμματιστή να έχουν ένα κοινόχρηστο δοχείο στο σύστημα αρχείων. Αυτό χρησιμοποιείται για κοινή χρήση δεδομένων μεταξύ της κύριας εφαρμογής και των επεκτάσεων (Widget, Watch App, Share Extension). Όλες οι εφαρμογές από μία ομάδα μπορούν να διαβάζουν και να γράφουν αρχεία στον κοινό κατάλογο /Library/Group Containers/.
Keychain Access Groups (κλειδί keychain-access-groups) — ένα ακόμη σημαντικό entitlement που επιτρέπει σε εφαρμογές από μία ομάδα κοινή πρόσβαση σε στοιχεία του Keychain. Αυτό είναι κρίσιμο για την υλοποίηση ενοποιημένης πιστοποίησης: ο χρήστης συνδέεται σε μία εφαρμογή και αποκτά αυτόματα πρόσβαση στον ίδιο λογαριασμό σε άλλη εφαρμογή χωρίς να χρειάζεται να εισάγει ξανά τον κωδικό πρόσβασης.
Η διαμόρφωση των Entitlements γίνεται στο Xcode στην καρτέλα Signing & Capabilities στις ρυθμίσεις target. Ο προγραμματιστής επιλέγει τα απαραίτητα Capabilities από τη λίστα και το Xcode δημιουργεί ή ενημερώνει αυτόματα το αρχείο .entitlements. Αυτό το αρχείο αποθηκεύεται στο έργο σε μορφή XML με δομή plist και περιέχει όλα τα κλειδιά entitlements για αυτό το target.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.security.application-groups</key>
<array>
<string>group.com.example.shared</string>
</array>
<key>aps-environment</key>
<string>development</string>
<key>keychain-access-groups</key>
<array>
<string>$(AppIdentifierPrefix)com.example.keychain</string>
</array>
</dict>
</plist>
Κατά τη μη αυτόματη δημιουργία αρχείου entitlement, είναι σημαντικό να τηρείται η μορφή κλειδιού και τα προθέματα. Τα Entitlements της Apple χρησιμοποιούν το αντίστροφο στυλ τομέα (com.apple.*). Προσαρμοσμένα entitlements για δικούς σας σκοπούς είναι επίσης δυνατά, αλλά πρέπει να καταχωρούνται στην πύλη προγραμματιστή. Το Xcode παρέχει αυτόματη συμπλήρωση για όλα τα τυπικά κλειδιά entitlements.
Για τον εντοπισμό σφαλμάτων Entitlements χρησιμοποιήστε την εντολή codesign στο τερματικό macOS. Η εντολή codesign -d --entitlements :- <διαδρομή_προς_εφαρμογή> εμφανίζει όλα τα entitlements με τα οποία έχει υπογραφεί η εφαρμογή. Αυτό είναι χρήσιμο για τη διάγνωση προβλημάτων: εάν ένα entitlement λείπει από την έξοδο, η εφαρμογή δεν θα αποκτήσει πρόσβαση στην αντίστοιχη λειτουργία ανεξάρτητα από τις ρυθμίσεις στο Xcode.
Αν και το Xcode δημιουργεί αυτόματα το αρχείο entitlement κατά την ενεργοποίηση Capabilities, οι έμπειροι προγραμματιστές συχνά το δημιουργούν ή το επεξεργάζονται μη αυτόματα για λεπτομερή ρύθμιση. Το αρχείο έχει επέκταση .entitlements και μορφή plist (XML). Σε αυτό μπορούν να προστεθούν προσαρμοσμένα κλειδιά entitlement που δεν εμφανίζονται στη διεπαφή του Xcode, ή να συνδυαστούν entitlements από διαφορετικές capabilities σε ένα αρχείο.
Κατά τη μη αυτόματη επεξεργασία είναι σημαντικό να παρακολουθείται η συντακτική ορθότητα του XML. Ένα σφάλμα στη δομή plist θα έχει ως αποτέλεσμα τα entitlements να μην εφαρμόζονται κατά την υπογραφή. Το Xcode ελέγχει το αρχείο .entitlements στο στάδιο μεταγλώττισης και εμφανίζει σφάλμα σε λανθασμένη μορφή. Για σύνθετα έργα με πολλαπλά targets και επεκτάσεις, συνιστάται η αποθήκευση κοινών κλειδιών entitlement σε ξεχωριστά αρχεία και η εισαγωγή τους μέσω του Build Settings.
// cli: έλεγχος entitlements εγκατεστημένης εφαρμογής
codesign -d --entitlements :- /Applications/Safari.app
// Το παράδειγμα εξόδου περιέχει λίστα ενεργών entitlements
<dict>
<key>com.apple.security.ts.apple-wifi</key>
<true/>
<key>com.apple.security.network.client</key>
<true/>
</dict>
Τα Entitlements διαδραματίζουν βασικό ρόλο στο μοντέλο ασφαλείας της Apple. Δεδομένου ότι τα entitlements αποτελούν μέρος της ψηφιακής υπογραφής της εφαρμογής, η παραποίησή τους είναι αδύνατη χωρίς επαναϋπογραφή του κώδικα. Η Apple ελέγχει τα entitlements σε πολλά επίπεδα: κατά την κατασκευή, το Xcode υπογράφει τα entitlements μαζί με το εκτελέσιμο αρχείο· κατά την εγκατάσταση, το σύστημα ελέγχει την ακεραιότητα της υπογραφής· κατά την εκκίνηση, επαληθεύει ξανά τα entitlements.
Μία από τις σημαντικές απαιτήσεις ασφαλείας είναι η αρχή του ελάχιστου entitlement. Ο προγραμματιστής πρέπει να ενεργοποιεί μόνο εκείνα τα entitlements που χρησιμοποιούνται πραγματικά στην εφαρμογή. Τα περιττά entitlements αυξάνουν την επιφάνεια επίθεσης και μπορεί να οδηγήσουν σε απόρριψη της εφαρμογής στο App Review. Η Apple ελέγχει ρητά την αντιστοιχία των entitlements με τη λειτουργικότητα της εφαρμογής.
Ορισμένα entitlements θεωρούνται ευαίσθητα (sensitive) και απαιτούν πρόσθετη έγκριση από την Apple. Αυτά περιλαμβάνουν: com.apple.developer.healthkit (HealthKit), com.apple.developer.passkit (Wallet), com.apple.developer.authentication-services.authentication (Sign in with Apple) και com.apple.developer.nfc.readersession.formats (NFC). Για την απόκτηση αυτών των entitlements, πρέπει να αιτιολογηθεί η αναγκαιότητά τους στη διαδικασία App Review.
Κατά την εργασία με entitlements είναι σημαντικό να λαμβάνονται υπόψη οι διαφορές μεταξύ iOS και macOS. Οι εφαρμογές επιφάνειας εργασίας macOS (Sandboxed) έχουν ευρύτερο σύνολο entitlements σε σύγκριση με το iOS. Για παράδειγμα, το entitlement com.apple.security.temporary-exception.* επιτρέπει την προσωρινή παράκαμψη του sandbox για συγκεκριμένες λειτουργίες — στο iOS τέτοια entitlements απουσιάζουν εντελώς.
Τα Entitlements συνδέονται στενά με τα προφίλ υπογραφής (Provisioning Profiles). Το προφίλ υπογραφής είναι ένα αρχείο που συνδέει το πιστοποιητικό προγραμματιστή, τη λίστα επιτρεπόμενων συσκευών και το σύνολο entitlements για μια συγκεκριμένη εφαρμογή. Κατά την εγκατάσταση της εφαρμογής, το σύστημα συγκρίνει τα entitlements στον κώδικα με τα entitlements στο προφίλ υπογραφής. Εάν ένα entitlement υπάρχει στον κώδικα αλλά λείπει από το προφίλ, η εφαρμογή δεν θα αποκτήσει πρόσβαση στην αντίστοιχη λειτουργία.
Για τη διάγνωση προβλημάτων με entitlements, ελέγξτε πρώτα το προφίλ υπογραφής. Το Xcode δημιουργεί αυτόματα προφίλ βάσει της επιλεγμένης capability στην πύλη Apple Developer. Εάν μια capability προστέθηκε στο Xcode αλλά δεν είναι ενεργή στην πύλη, η εφαρμογή θα καταρρεύσει με σφάλμα υπογραφής κατά την προσπάθεια χρήσης προστατευμένης λειτουργίας.
Ας εξετάσουμε τα πιο συχνά χρησιμοποιούμενα entitlements στην ανάπτυξη iOS. aps-environment (Push Notifications) — υποχρεωτικό για την αποστολή push ειδοποιήσεων. com.apple.developer.ubiquity-container-identifiers (iCloud) — για συγχρονισμό δεδομένων μέσω CloudKit. com.apple.security.application-groups — για κοινή χρήση δεδομένων μεταξύ εφαρμογών και επεκτάσεων. com.apple.developer.associated-domains — για Universal Links και Handoff.
Για καθένα από αυτά τα entitlements υπάρχει αυστηρή διαδικασία διαμόρφωσης. Push Notifications απαιτούν δημιουργία κλειδιού APNs στην πύλη Apple Developer και ενεργοποίηση capability στο Xcode. Μετά από αυτό, το entitlement προστίθεται αυτόματα στο αρχείο .entitlements. Το iCloud απαιτεί διαμόρφωση κοντέινερ στην πύλη και επιλογή του στο Xcode από την αναπτυσσόμενη λίστα.
Associated Domains — entitlement που συνδέει την εφαρμογή με έναν τομέα ιστού. Χρησιμοποιείται για Universal Links (βαθύς σύνδεσμοι που ανοίγουν απευθείας στην εφαρμογή) και Handoff (συνέχεια εργασίας σε άλλη συσκευή Apple). Η τιμή του entitlement περιέχει μια συστοιχία συμβολοσειρών σε μορφή applinks:example.com. Για τη λειτουργία απαιτείται η τοποθέτηση του αρχείου apple-app-site-association στον διακομιστή.
Πίνακας δημοφιλών entitlements και των σκοπών τους:
| Entitlement Key | Σκοπός | Απαιτεί έλεγχο |
|---|---|---|
| aps-environment | Push ειδοποιήσεις | Όχι |
| com.apple.developer.ubiquity-* | Συγχρονισμός iCloud | Όχι |
| application-groups | Κοινόχρηστο δοχείο εφαρμογών | Όχι |
| com.apple.developer.healthkit | Δεδομένα HealthKit | Ναι |
| com.apple.developer.nfc.* | Ανάγνωση ετικετών NFC | Ναι |
| associated-domains | Universal Links | Όχι |
Συχνές Ερωτήσεις
Entitlements — στατικά δικαιώματα ενσωματωμένα στην υπογραφή της εφαρμογής που ελέγχονται από το σύστημα κατά την εκκίνηση. Permissions — δυναμικές άδειες που ζητούνται από τον χρήστη κατά τον χρόνο εκτέλεσης (κάμερα, γεωτοποθεσία).
Χρησιμοποιήστε την εντολή codesign -d --entitlements στο τερματικό macOS. Για εφαρμογές από το App Store, το entitlement ελέγχεται μέσω του βοηθητικού προγράμματος ProvisionQL ή μέσω του Xcode Organizer.
Η αλλαγή entitlements απαιτεί νέα κατασκευή και επαναϋπογραφή της εφαρμογής. Εάν το entitlement απαιτεί έγκριση της Apple, θα χρειαστεί να περάσετε ξανά από το App Review. Χωρίς επαναϋπογραφή, η αλλαγή entitlements είναι αδύνατη.
Το αρχείο .entitlements — ένα έγγραφο XML σε μορφή plist που αποθηκεύεται στο έργο Xcode. Περιέχει μια δομημένη λίστα όλων των entitlements της εφαρμογής και υπογράφεται μαζί με το εκτελέσιμο αρχείο.
Capabilities — διακόπτες υψηλού επιπέδου στην καρτέλα Signing & Capabilities στο Xcode. Η ενεργοποίηση μιας capability προσθέτει αυτόματα τα αντίστοιχα entitlements στο αρχείο .entitlements και διαμορφώνει το προφίλ υπογραφής.
Περίληψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης