Το Provisioning Profile συνδέει τα πιστοποιητικά του προγραμματιστή, το αναγνωριστικό εφαρμογής και τη λίστα επιτρεπόμενων συσκευών για την υπογραφή του κώδικα εφαρμογών iOS. Σύμφωνα με τα δεδομένα του Apple Developer Documentation, 2026, το προφίλ είναι απαραίτητο για οποιαδήποτε εκκίνηση εφαρμογής σε φυσική συσκευή — χωρίς αυτό το Xcode δεν θα μπορεί να εγκαταστήσει το build σε iPhone ή iPad. Στο άρθρο θα αναλύσουμε τη δομή, τους τύπους και τη διαδικασία δημιουργίας προφίλ.
Κύρια σημεία
Το Provisioning Profile είναι ένα ψηφιακό αρχείο διαμόρφωσης σε μορφή .mobileprovision (για iOS) ή .provisionprofile (για macOS) που χρησιμοποιεί η Apple για τον έλεγχο εγκατάστασης και εκκίνησης εφαρμογών σε συσκευές. Το προφίλ περιέχει μεταδεδομένα υπογραφής κώδικα, χωρίς τα οποία η εφαρμογή δεν μπορεί να εκκινηθεί σε φυσικό iPhone, iPad ή Apple Watch — ο προσομοιωτής δεν απαιτεί προφίλ, επειδή ο κώδικας δεν υπογράφεται για εκτέλεση σε πραγματικό επεξεργαστή.
Το προφίλ εκδίδεται μέσω του Apple Developer Portal και έχει διάρκεια ισχύος — συνήθως ένα έτος για τα Development και Distribution προφίλ. Σύμφωνα με την πολιτική της Apple, το προφίλ συνδέεται αυτόματα με το πιστοποιητικό Apple Developer Program με το οποίο υπογράφηκε: αν το πιστοποιητικό ανακληθεί ή λήξει, το προφίλ σταματά να λειτουργεί.
Κάθε προφίλ περιέχει ένα μοναδικό UUID που χρησιμοποιεί το Xcode για την αναγνώριση του προφίλ στην αλυσίδα κλειδιών. Το Xcode επιλέγει αυτόματα το κατάλληλο προφίλ κατά τη μεταγλώττιση, αλλά ο προγραμματιστής μπορεί να αλλάξει την επιλογή στις ρυθμίσεις Signing & Capabilities. Σε μία συσκευή μπορεί να εγκατασταθεί απεριόριστος αριθμός προφίλ — το σύστημα διαχείρισης συσκευών της Apple (MDM) το χρησιμοποιεί για εταιρική διανομή εφαρμογών.
Η υπογραφή κώδικα είναι ο κύριος λόγος ύπαρξης των προφίλ. Η Apple απαιτεί κάθε εφαρμογή που εκκινείται σε συσκευή με iOS να υπογράφεται με πιστοποιητικό που έχει εκδώσει η Apple. Το Provisioning Profile λειτουργεί ως συνδετικός κρίκος: επιβεβαιώνει ότι ο προγραμματιστής έχει το δικαίωμα να εκκινήσει την εφαρμογή σε αυτή τη συσκευή. Σύμφωνα με το Apple Security Guide (2025), ο μηχανισμός προφίλ αποτρέπει την εγκατάσταση κακόβουλου λογισμικού στις συσκευές των χρηστών ακόμα και σε περίπτωση παραβίασης του πιστοποιητικού του προγραμματιστή.
Το προφίλ καθορίζει επίσης ποιες υπηρεσίες συστήματος είναι διαθέσιμες στην εφαρμογή. Αν η εφαρμογή χρησιμοποιεί ειδοποιήσεις Push, η Apple Push Notification service (APNs) απαιτεί σωστά entitlements μέσα στο προφίλ. Χωρίς αυτά, οι ειδοποιήσεις του διακομιστή δεν θα παραδοθούν στη συσκευή. Παρόμοιος κανόνας ισχύει για το iCloud, τα App Groups, το Wallet, το HealthKit και άλλα frameworks της Apple.
Οι προγραμματιστές συχνά μπερδεύουν το Provisioning Profile με το Apple Certificate. Το πιστοποιητικό είναι ένα ψηφιακό έγγραφο που επιβεβαιώνει την ταυτότητα (ποιος υπογράφει), ενώ το προφίλ είναι μια διαμόρφωση (ποια εφαρμογή, σε ποιες συσκευές, με ποια δικαιώματα). Ένα πιστοποιητικό μπορεί να χρησιμοποιηθεί σε πολλά προφίλ, και ένα προφίλ συνδέεται με ακριβώς ένα πιστοποιητικό. Η Apple συνιστά τη δημιουργία ξεχωριστού προφίλ για κάθε εφαρμογή και κάθε σενάριο — Development, Ad Hoc, App Store.
Η διαδικασία υπογραφής της εφαρμογής αποτελείται από διάφορα βήματα που εκτελούνται διαδοχικά. Το Xcode παίρνει το δυαδικό αρχείο της εφαρμογής (App Bundle), το υπογράφει με το ιδιωτικό κλειδί του προγραμματιστή, ενσωματώνει το Provisioning Profile και το στέλνει στη συσκευή. Η συσκευή ελέγχει την υπογραφή με το δημόσιο κλειδί της Apple, συγκρίνει το UUID του προφίλ με τη λίστα αξιόπιστων προφίλ στο σύστημα και εκκινεί την εφαρμογή μόνο αν όλοι οι έλεγχοι είναι επιτυχείς.
Όταν ο χρήστης κατεβάζει την εφαρμογή από το App Store, ο μηχανισμός είναι διαφορετικός. Το App Store Connect υπογράφει ξανά την εφαρμογή με το δικό της πιστοποιητικό Distribution της Apple, αντικαθιστώντας το προφίλ του προγραμματιστή με ένα προφίλ Store. Αυτό σημαίνει ότι η εφαρμογή που δημοσιεύεται μέσω του App Store υπογράφεται τεχνικά από την Apple, όχι από τον προγραμματιστή — αν και η αρχική υπογραφή του προγραμματιστή ελέγχεται στο στάδιο της μεταφόρτωσης του build στο App Store Connect.
Για διανομή Ad Hoc, το προφίλ καταχωρεί τα συγκεκριμένα UDID συσκευών στις οποίες επιτρέπεται η εκκίνηση. Ο δωρεάν λογαριασμός Apple Developer Program περιορίζει 100 συσκευές ετησίως για δοκιμές. Τα Enterprise προφίλ (για εσωτερική διανομή εντός οργανισμού) δεν έχουν περιορισμό στον αριθμό συσκευών, αλλά απαιτούν ενεργή συνδρομή Apple Developer Enterprise Program με κόστος 299 δολαρίων ετησίως.
Η διάρκεια ισχύος του Provisioning Profile είναι ένα έτος από τη στιγμή δημιουργίας. 30 ημέρες πριν τη λήξη, η Apple αρχίζει να στέλνει push ειδοποιήσεις στον προγραμματιστή μέσω Xcode και Developer Portal. Αν το προφίλ λήξει, η εφαρμογή στη συσκευή συνεχίζει να λειτουργεί (αν είναι ήδη εγκατεστημένη), αλλά ένα νέο build με αυτό το προφίλ δεν θα μπορεί να εγκατασταθεί. Το Xcode κατά την προσπάθεια μεταγλώττισης με ληγμένο προφίλ εμφανίζει σφάλμα υπογραφής κώδικα με κωδικό -402620394. Η Apple συνιστά τη ρύθμιση αυτόματης ανανέωσης προφίλ μέσω του Xcode Accounts Preferences — τότε το Xcode ενημερώνει το προφίλ 24 ώρες πριν τη λήξη.
Η Apple προσφέρει τέσσερις κύριους τύπους Provisioning Profile, ο καθένας για ένα συγκεκριμένο στάδιο του κύκλου ζωής της εφαρμογής. Το Development προφίλ επιτρέπει την εκκίνηση της εφαρμογής σε φυσικές συσκευές που έχουν προστεθεί στο Apple Developer Portal και χρησιμοποιείται στο στάδιο ανάπτυξης και δοκιμών QA. Για τη δημιουργία Development προφίλ αρκεί ένας δωρεάν λογαριασμός προγραμματιστή της Apple.
Το Ad Hoc προφίλ προορίζεται για τη διανομή της εφαρμογής σε περιορισμένο κύκλο δοκιμαστών χωρίς τη χρήση του App Store. Το προφίλ καταχωρεί έως 100 συσκευές με βάση το UDID και η εφαρμογή μπορεί να εγκατασταθεί απευθείας μέσω iTunes, Apple Configurator ή λύσεων MDM. Τα Ad Hoc builds έχουν διάρκεια ισχύος 12 μηνών και δεν απαιτούν έγκριση από την Apple.
Το App Store προφίλ χρησιμοποιείται αποκλειστικά για τη δημοσίευση της εφαρμογής στο App Store και δεν περιέχει λίστα συσκευών — η ίδια η Apple διαχειρίζεται τη διανομή μετά την έγκριση του build. Κατά τη μεταφόρτωση του αρχείου στο App Store Connect, το Xcode χρησιμοποιεί αυτόματα το App Store προφίλ αν είναι εγκατεστημένο στο σύστημα. Το Enterprise προφίλ προορίζεται για οργανισμούς με Apple Developer Enterprise Program και επιτρέπει τη διανομή εφαρμογών εντός της εταιρείας χωρίς περιορισμό στον αριθμό συσκευών και χωρίς έγκριση από την Apple.
| Τύπος προφίλ | Σκοπός | Συσκευές | Κόστος συνδρομής |
|---|---|---|---|
| Development | Ανάπτυξη και δοκιμές | Έως 100 UDID | Δωρεάν / 99 δολάρια ετησίως |
| Ad Hoc | Διανομή σε δοκιμαστές | Έως 100 UDID | 99 δολάρια ετησίως |
| App Store | Δημοσίευση στο App Store | Οποιοδήποτε (μέσω Apple) | 99 δολάρια ετησίως |
| Enterprise | Εσωτερική διανομή | Απεριόριστες | 299 δολάρια ετησίως |
Το Provisioning Profile είναι ένα αρχείο σε μορφή DER υπογεγραμμένο από την Apple, το περιεχόμενο του οποίου μπορεί να προβληθεί μέσω της γραμμής εντολών. Το Security framework του macOS επιτρέπει την αποκωδικοποίηση του .mobileprovision σε αναγνώσιμο XML plist. Μέσα στο προφίλ υπάρχουν: το UUID του προφίλ, το App ID (πρόθεμα ομάδας + Bundle Identifier), η λίστα πιστοποιητικών, η λίστα επιτρεπόμενων συσκευών (μόνο για Development και Ad Hoc), τα entitlements και η διάρκεια ισχύος.
Το App ID — το μοναδικό αναγνωριστικό της εφαρμογής που αποτελείται από Team ID (10 χαρακτήρες που αποδίδονται από την Apple) και Bundle Identifier (για παράδειγμα, com.example.myapp). Το App ID μπορεί να είναι explicit (ακριβής αντιστοίχιση με το Bundle Identifier) ή wildcard (πρότυπο *.example.com για πολλές εφαρμογές). Η Apple δεν συνιστά τη χρήση wildcard για εφαρμογές που χρησιμοποιούν ειδοποιήσεις Push ή iCloud — αυτές οι υπηρεσίες απαιτούν ρητό App ID.
Τα Entitlements — μπλοκ XML μέσα στο προφίλ που καθορίζει τα δικαιώματα πρόσβασης της εφαρμογής σε πόρους συστήματος. Τυπικά entitlements περιλαμβάνουν: aps-environment (ειδοποιήσεις Push), com.apple.developer.icloud-services (iCloud), com.apple.security.application-groups (App Groups για Widget και Share Extension). Η Apple προσθέτει αυτόματα entitlements στο προφίλ με βάση τα ενεργοποιημένα Capabilities στο Xcode. Οποιαδήποτε ασυμφωνία μεταξύ των entitlements στο προφίλ και των ζητούμενων στον κώδικα οδηγεί σε σφάλμα υπογραφής.
Η δημιουργία προφίλ είναι δυνατή με δύο τρόπους: μέσω της διεπαφής ιστού του Apple Developer Portal ή αυτόματα μέσω Xcode. Για ένα τυπικό έργο, το Xcode διαχειρίζεται τα προφίλ αυτόματα όταν είναι ενεργοποιημένη η επιλογή Automatically manage signing. Το Xcode δημιουργεί πιστοποιητικό, προφίλ και App ID μέσα σε λίγα δευτερόλεπτα, συγχρονίζοντας με το Apple Developer Portal. Ωστόσο, για τα CI/CD pipelines απαιτείται χειροκίνητη διαχείριση.
Για χειροκίνητη δημιουργία προφίλ στο Apple Developer Portal είναι απαραίτητο: να μεταβείτε στην ενότητα Certificates, Identifiers & Profiles, να επιλέξετε Profiles και να κάνετε κλικ στο "+". Στη συνέχεια, επιλέξτε τον τύπο προφίλ (Development, Ad Hoc, App Store ή Enterprise), επιλέξτε το App ID από τη λίστα καταχωρημένων, επιλέξτε το πιστοποιητικό προγραμματιστή και (για Development και Ad Hoc) επιλέξτε τις συσκευές. Μετά τη δημιουργία, το προφίλ μεταφορτώνεται σε μορφή .mobileprovision και εγκαθίσταται με διπλό κλικ στο Xcode.
Οι διακομιστές CI/CD απαιτούν ειδική προσέγγιση: το προφίλ και το πιστοποιητικό πρέπει να αποθηκεύονται σε ασφαλές αποθετήριο (για παράδειγμα, στα secrets του GitHub Actions). Κατά τη μεταγλώττιση, το προφίλ φορτώνεται στον agent, τοποθετείται στον φάκελο ~/Library/MobileDevice/Provisioning Profiles και το πιστοποιητικό εισάγεται στην αλυσίδα κλειδιών. Το Fastlane — δημοφιλές εργαλείο για την αυτοματοποίηση υπογραφής — παρέχει την εντολή match, που συγχρονίζει προφίλ και πιστοποιητικά μεταξύ προγραμματιστών μέσω κρυπτογραφημένου αποθετηρίου git.
Για τη διάγνωση προβλημάτων υπογραφής κώδικα, μπορείτε να αποκωδικοποιήσετε το .mobileprovision και να ελέγξετε το περιεχόμενό του. Η παρακάτω εντολή εξάγει το XML plist από το προφίλ και το αποθηκεύει σε αναγνώσιμη μορφή:
# Αποκωδικοποίηση του .mobileprovision σε XML
security cms -D -i "path/to/embedded.mobileprovision" \
-o "profile.plist"
# Έλεγχος της διάρκειας ισχύος του προφίλ
plist -convert xml1 profile.plist -o -
grep -A 1 "ExpirationDate" profile.plist
Το βοηθητικό πρόγραμμα Security από το macOS Command Line Tools αποκωδικοποιεί το CMS υπογεγραμμένο αρχείο του προφίλ. Η σημαία -D σημαίνει αποκωδικοποίηση, -i — το αρχείο εισόδου. Μετά την αποκωδικοποίηση, το βοηθητικό πρόγραμμα plist μετατρέπει το δυαδικό plist σε XML και το grep εξάγει την ημερομηνία λήξης. Αυτή η μέθοδος είναι χρήσιμη στο CI/CD για τον έλεγχο ότι το προφίλ δεν έχει λήξει πριν τη μεταγλώττιση του build έκδοσης.
Το πιο συνηθισμένο σφάλμα είναι το "No matching provisioning profiles found" κατά τη μεταγλώττιση στο Xcode. Εμφανίζεται όταν το Xcode δεν μπορεί να βρει προφίλ που να ταιριάζει με τη διαμόρφωση μεταγλώττισης: το Bundle Identifier δεν ταιριάζει με το App ID στο προφίλ, το πιστοποιητικό δεν είναι εγκατεστημένο στην αλυσίδα κλειδιών ή το προφίλ έχει λήξει. Λύση — ελέγξτε τις ρυθμίσεις Signing & Capabilities στο target και, αν χρειάζεται, μεταβείτε στο Automatically manage signing.
Το σφάλμα "Provisioning profile doesn't include the selected device" εμφανίζεται κατά την προσπάθεια εκκίνησης Development ή Ad Hoc build σε συσκευή της οποίας το UDID δεν έχει προστεθεί στο προφίλ. Το Apple Developer Portal επιτρέπει την προσθήκη συσκευής σε υπάρχον προφίλ — μετά από αυτό το προφίλ πρέπει να μεταφορτωθεί και να εγκατασταθεί ξανά. Το Xcode κατά την αυτόματη διαχείριση υπογραφής προσθέτει αυτόματα τη συνδεδεμένη συσκευή στο προφίλ.
Το πρόβλημα με τα entitlements εκδηλώνεται με το σφάλμα "The executable was signed with invalid entitlements" κατά τη μεταφόρτωση στο App Store Connect. Αιτία — η ασυμφωνία μεταξύ των entitlements στο προφίλ και του αρχείου .entitlements του έργου. Η Apple απαιτεί το σύνολο δικαιωμάτων στο προφίλ να είναι υπερσύνολο των δικαιωμάτων που ζητά η εφαρμογή. Λύση — ελέγξτε τα Capabilities στο target του Xcode και βεβαιωθείτε ότι όλες οι ενεργοποιημένες υπηρεσίες έχουν αντίστοιχα entitlements στο προφίλ. Το Fastlane περιλαμβάνει την εντολή produce, που συγχρονίζει το App ID και τα προφίλ με ενημερωμένα entitlements.
Συχνές ερωτήσεις
Ναι, αν το App ID στο προφίλ χρησιμοποιεί αναγνωριστικό wildcard της μορφής com.example.*. Ωστόσο, τα wildcard προφίλ δεν υποστηρίζουν ειδοποιήσεις Push, iCloud, Game Center και App Groups. Η Apple συνιστά τη δημιουργία ξεχωριστού explicit προφίλ για κάθε εφαρμογή που χρησιμοποιεί προηγμένα Capabilities.
Η εφαρμογή που μεταφορτώθηκε μέσω του App Store χρησιμοποιεί το Store προφίλ της Apple, το οποίο δεν εξαρτάται από το προφίλ του προγραμματιστή. Οι χρήστες θα συνεχίσουν να κατεβάζουν και να εκκινούν την εφαρμογή. Το ληγμένο προφίλ εμποδίζει μόνο τη μεταφόρτωση νέου build στο App Store Connect — η Apple απαιτεί το Distribution προφίλ να είναι έγκυρο τη στιγμή της αποστολής.
Το προφίλ μπορεί να αντιγραφεί στον φάκελο ~/Library/MobileDevice/Provisioning Profiles στον νέο υπολογιστή. Ωστόσο, το προφίλ συνδέεται με το πιστοποιητικό του οποίου το ιδιωτικό κλειδί βρίσκεται στην αλυσίδα κλειδιών. Είναι επίσης απαραίτητο να εξαγάγετε το πιστοποιητικό μαζί με το ιδιωτικό κλειδί μέσω του Keychain Access και να το εισάγετε στη νέα συσκευή.
Δεν υπάρχει περιορισμός στον αριθμό προφίλ σε έναν υπολογιστή. Τα προφίλ αποθηκεύονται στον φάκελο ~/Library/MobileDevice/Provisioning Profiles και αριθμούνται με βάση το UUID. Το Xcode επιλέγει αυτόματα το κατάλληλο προφίλ με βάση το App ID και τον τύπο μεταγλώττισης. Για ευκολότερη διαχείριση, συνιστάται η διαγραφή των μη χρησιμοποιούμενων προφίλ μέσω του Xcode Accounts Preferences.
Το Signing Certificate επιβεβαιώνει την ταυτότητα του προγραμματιστή — είναι ένα κρυπτογραφικό κλειδί που εκδίδεται από την Apple. Το Provisioning Profile είναι ένα αρχείο διαμόρφωσης που καθορίζει ποια εφαρμογή (App ID) μπορεί να εκκινηθεί με ποιο πιστοποιητικό και σε ποιες συσκευές. Το προφίλ αναφέρεται πάντα σε ένα συγκεκριμένο πιστοποιητικό, αλλά δεν το αντικαθιστά.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης