App Bundle ID — είναι ένα μοναδικό αναγνωριστικό εφαρμογής που χρησιμοποιείται στα οικοσυστήματα Apple και Google για εγγραφή, υπογραφή και διανομή του λογισμικού προϊόντος. Κάθε εφαρμογή λαμβάνει το δικό της Bundle ID κατά τη δημιουργία του έργου, και αυτό το αναγνωριστικό παραμένει αμετάβλητο κατά τη διάρκεια του κύκλου ζωής. Σύμφωνα με την Apple Developer Documentation, το Bundle ID χρησιμοποιείται για τη σύνδεση υπηρεσιών, πιστοποιητικών και προφίλ υπογραφής.
Βασικά σημεία
Bundle Identifier — είναι μια σειρά που αναγνωρίζει μοναδικά την εφαρμογή στο λειτουργικό σύστημα και στο κατάστημα εφαρμογών. Στο iOS και macOS ονομάζεται Bundle ID, στο Android — Package Name, αν και λειτουργικά και τα δύο εκτελούν τον ίδιο ρόλο: εξασφαλίζουν τη μοναδικότητα της εφαρμογής στη συσκευή και στο κατάστημα.
Το λειτουργικό σύστημα χρησιμοποιεί το Bundle ID για να διαχωρίσει τις εφαρμογές στη συσκευή. Δύο εφαρμογές με το ίδιο αναγνωριστικό δεν μπορούν να εγκατασταθούν ταυτόχρονα — το σύστημα τις αντιλαμβάνεται ως το ίδιο προϊόν. Τα καταστήματα εφαρμογών ελέγχουν επίσης τη μοναδικότητα του Bundle ID κατά τη δημοσίευση.
Η Apple εισήγαγε το Bundle ID με την κυκλοφορία του iOS SDK το 2008. Η μορφή reverse domain notation δανείστηκε από τη Java (package naming convention), όπου χρησιμοποιείται για την αποφυγή συγκρούσεων ονομάτων κλάσεων. Η Google υιοθέτησε αυτή την πρακτική για το Android, εξασφαλίζοντας ομοιομορφία και στα δύο κινητά οικοσυστήματα.
| Πλατφόρμα | Όνομα πεδίου | Παράδειγμα |
|---|---|---|
| iOS/macOS | Bundle Identifier | com.example.myapp |
| Android | Package Name | com.example.myapp |
| watchOS | Bundle Identifier | com.example.myapp.watchkit |
| tvOS | Bundle Identifier | com.example.myapp.tvos |
Bundle ID αποτελείται από πολλά τμήματα χωρισμένα με τελείες. Το πρώτο μέρος — το αναγνωριστικό του προγραμματιστή ή της εταιρείας (com, org, net). Το δεύτερο — το domain της εταιρείας (example, google, apple). Τα επόμενα τμήματα προσδιορίζουν το όνομα της εφαρμογής και της πλατφόρμας.
Ένα τυπικό Bundle ID μοιάζει με com.company.appname. Η Apple συνιστά τη χρήση αντίστροφης σημείωσης του ονόματος domain για να εγγυηθεί την παγκόσμια μοναδικότητα. Αν η εταιρεία δεν έχει domain, επιτρέπεται η χρήση email: com.example.myapp ή org.example.myapp.
Η Apple υποστηρίζει το Wildcard Bundle ID — ένα πρότυπο αναγνωριστικού με αστερίσκο: com.example.*. Ένα τέτοιο πρότυπο επιτρέπει τη χρήση ενός App ID για πολλές εφαρμογές μιας εταιρείας. Το Wildcard ID είναι βολικό στο στάδιο ανάπτυξης, αλλά δεν συνιστάται για παραγωγή, επειδή περιορίζει τη χρήση ορισμένων υπηρεσιών Apple.
Περιορισμοί wildcard: Τα Push Notifications, CloudKit, In-App Purchase και Game Center απαιτούν ακριβές (explicit) Bundle ID. Κατά τη χρήση του προτύπου com.example.*, αυτές οι υπηρεσίες δεν είναι διαθέσιμες. Για εφαρμογές παραγωγής, να χρησιμοποιείτε πάντα explicit Bundle ID για να εξασφαλίσετε την πλήρη λειτουργικότητα όλων των υπηρεσιών Apple.
Εκτός από wildcard, η Apple υποστηρίζει αναγνωριστικά προθέματος που αποδίδονται σε ομάδες ανάπτυξης κατά την εγγραφή στο Apple Developer Program. Το πρόθεμα (Team ID) προστίθεται αυτόματα σε όλα τα App ID και προφίλ υπογραφής. Δύο διαφορετικά Team ID μπορούν να δημιουργήσουν το ίδιο Bundle ID, αλλά στη συσκευή θεωρούνται διαφορετικές εφαρμογές.
Εγγραφή Bundle ID — υποχρεωτικό στάδιο πριν τη δημοσίευση της εφαρμογής. Στο οικοσύστημα Apple, η εγγραφή γίνεται στο Apple Developer Portal μέσω της ενότητας Certificates, Identifiers & Profiles. Στο Google Play, το Bundle ID καθορίζεται κατά τη δημιουργία της εφαρμογής στην κονσόλα προγραμματιστή.
Στην πύλη Apple Developer, επιλέξτε την ενότητα Identifiers, πατήστε το κουμπί Register και καθορίστε τον τύπο App ID. Εισάγετε το ακριβές όνομα του Bundle ID και επιλέξτε τις απαραίτητες capabilities: Push Notifications, CloudKit, Sign in with Apple. Μετά την εγγραφή, το αναγνωριστικό γίνεται διαθέσιμο για τη δημιουργία προφίλ υπογραφής.
// Έλεγχος Bundle ID στον κώδικα εφαρμογής
let bundleID = Bundle.main.bundleIdentifier
print("Τρέχον Bundle ID: \(bundleID ?? "unknown")")
// Έλεγχος Bundle ID για συνθήκες μεταγλώττισης
if bundleID == "com.example.app.production" {
// Ρύθμιση παραγωγής
Analytics.shared.configure(.production)
}
Google Play Console δεν απαιτεί προηγούμενη εγγραφή του Bundle ID. Το αναγνωριστικό καθορίζεται στο αρχείο build.gradle της ενότητας της εφαρμογής και πρέπει να είναι μοναδικό σε ολόκληρο το Google Play. Μετά τη δημιουργία της εφαρμογής, η αλλαγή του Package Name είναι αδύνατη, γι' αυτό επιλέξτε το αναγνωριστικό προσεκτικά και ελέγξτε τη μοναδικότητά του μέσω αναζήτησης στο Google Play. Η Google δεν απελευθερώνει τα αναγνωριστικά των διαγραμμένων εφαρμογών, επομένως ένα Bundle ID που καταλήφθηκε μια φορά παραμένει μη διαθέσιμο για άλλους προγραμματιστές.
Κατά την εγγραφή στο App Store Connect πρέπει να καθορίσετε ένα Bundle ID από το υπάρχον σύνολο εγγεγραμμένων αναγνωριστικών. Αν το αναγνωριστικό δεν έχει ακόμα εγγραφεί στην πύλη Apple Developer, το σύστημα θα προτείνει την αυτόματη δημιουργία του. Μετά την εγγραφή, το Bundle ID συνδέεται με την ομάδα και δεν μπορεί να μεταφερθεί σε άλλο λογαριασμό προγραμματιστή χωρίς επικοινωνία με την υποστήριξη της Apple. Κάθε Bundle ID μπορεί να έχει πολλά προφίλ υπογραφής για διαφορετικά περιβάλλοντα: Development, Ad Hoc, App Store.
Κατά την εγγραφή Bundle ID για εφαρμογή iOS με επεκτάσεις, κάθε στοιχείο πρέπει να εγγραφεί ξεχωριστά. Οι επεκτάσεις widget, πληκτρολογίου, Notification Service και Watch App έχουν δικά τους αναγνωριστικά που προέρχονται από το κύριο αναγνωριστικό. Το App Store Connect τα συνδυάζει σε μια ομάδα κατά τη δημιουργία ενός App Record, επιτρέποντας τη δημοσίευση όλων των στοιχείων ως μιας εφαρμογής.
Ρύθμιση Bundle ID στο Xcode γίνεται σε πολλά σημεία: Info.plist, Build Settings και Signing & Capabilities. Το κεντρικό πεδίο — Bundle Identifier στο target της εφαρμογής. Όλες οι υπηρεσίες Apple, από τα Push Notifications μέχρι CloudKit, συνδέονται σε αυτό το αναγνωριστικό. Ένα λανθασμένο Bundle ID οδηγεί σε σφάλματα υπογραφής και αδυναμία δημοσίευσης στο App Store.
<!-- Info.plist — βασικό Bundle ID του έργου -->
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<!-- Build Settings — μεταβλητή PRODUCT_BUNDLE_IDENTIFIER -->
<!-- Debug: com.example.app.dev -->
<!-- Release: com.example.app -->
Το Xcode χρησιμοποιεί τη μεταβλητή PRODUCT_BUNDLE_IDENTIFIER στο Build Settings. Για διαφορετικές ρυθμίσεις μεταγλώττισης μπορούν να οριστούν διαφορετικές τιμές: com.example.app.dev για Debug και com.example.app για Release. Αυτό είναι βολικό για παράλληλη εγκατάσταση της έκδοσης ανάπτυξης δίπλα στην έκδοση παραγωγής στην ίδια συσκευή για δοκιμή.
Αν η εφαρμογή έχει επεκτάσεις (Notification Service, Widget, Watch App), κάθε επέκταση λαμβάνει το δικό της Bundle ID με επίθεμα. Κύρια εφαρμογή: com.example.app. Επέκταση widget: com.example.app.widget. Watch App: com.example.app.watchkit. Κάθε αναγνωριστικό εγγράφεται ξεχωριστά στο Apple Developer Portal και λαμβάνει ξεχωριστό προφίλ υπογραφής. Το Xcode διαχειρίζεται αυτόματα αυτές τις εξαρτήσεις κατά τη μεταγλώττιση.
App Bundle ID (Apple) και Package Name (Google) — είναι ανάλογες οντότητες με τον ίδιο σκοπό, αλλά με διαφορετικούς κανόνες χρήσης στα οικοσυστήματα iOS και Android. Και τα δύο αναγνωριστικά χρησιμοποιούν reverse domain notation και δεν μπορούν να αλλάξουν μετά τη δημοσίευση σε επίσημα καταστήματα εφαρμογών.
Στο οικοσύστημα Apple, το Bundle ID συνδέεται με το προφίλ υπογραφής και τα πιστοποιητικά. Κατά την αλλαγή της ομάδας ανάπτυξης, το Bundle ID μπορεί να μεταφερθεί μεταξύ λογαριασμών μέσω App Store Connect. Στο Android, το Package Name είναι απόλυτα δεσμευμένο στην εφαρμογή στο Google Play και δεν μπορεί να μεταφερθεί μεταξύ λογαριασμών προγραμματιστών.
| Χαρακτηριστικό | iOS Bundle ID | Android Package Name |
|---|---|---|
| Μέγιστο μήκος | Απεριόριστο | 150 χαρακτήρες |
| Διαχωριστής τμημάτων | Τελεία (.) | Τελεία (.) |
| Επιτρεπόμενοι χαρακτήρες | A-Z, a-z, 0-9, τελεία, παύλα | A-Z, a-z, 0-9, τελεία, υπογράμμιση |
| Wildcard | Υποστηρίζεται (*) | Δεν υποστηρίζεται |
| Χρήση σε κώδικα | Bundle.main.bundleIdentifier | BuildConfig.APPLICATION_ID |
Παρά τις διαφορές, και τα δύο αναγνωριστικά παίζουν κρίσιμο ρόλο: χωρίς αυτά, η δημοσίευση της εφαρμογής στο επίσημο κατάστημα είναι αδύνατη. Σύσταση για διαπλατφορμικά έργα — χρησιμοποιείτε το ίδιο αναγνωριστικό σε εκδόσεις iOS και Android για να απλοποιηθεί η ενταξη με Firebase, Analytics και άλλες υπηρεσίες. Αυτό επίσης διευκολύνει την πλοήγηση για την ομάδα ανάπτυξης: ένα αναγνωριστικό και για τα δύο έργα μειώνει τη σύγχυση κατά τη ρύθμιση CI/CD και περιβαλλόντων.
Κατά την ανάπτυξη με χρήση Flutter ή React Native, ένα ενιαίο αναγνωριστικό είναι ιδιαίτερα σημαντικό, διότι η βάση κώδικα είναι κοινή και πολλά εργαλεία αυτόματης μεταγλώττισης αναμένουν το ίδιο όνομα πακέτου και για τις δύο πλατφόρμες. Το έργο Firebase συνδέεται επίσης με ένα αναγνωριστικό για iOS και Android, πράγμα που απλοποιεί τη ρύθμιση αναλυτικής και αναφοράς σφαλμάτων.
Συχνές ερωτήσεις
Η αλλαγή του Bundle ID μετά τη δημοσίευση στο App Store ή Google Play είναι αδύνατη. Το σύστημα θα αντιληφθεί το νέο αναγνωριστικό ως μια εντελώς διαφορετική εφαρμογή. Για την ενημέρωση υπάρχοντος προϊόντος, το Bundle ID πρέπει να παραμείνει αμετάβλητο κατά τη διάρκεια του κύκλου ζωής της εφαρμογής.
Η συσκευή iOS ή Android δεν θα επιτρέψει την εγκατάσταση της δεύτερης εφαρμογής με το ίδιο αναγνωριστικό πάνω από την πρώτη. Το σύστημα θα εμφανίσει σφάλμα και θα προτείνει τη διαγραφή της υπάρχουσας εφαρμογής. Στα καταστήματα, η δημοσίευση με διπλότυπο Bundle ID θα αποκλειστεί επίσης.
Χρησιμοποιήστε την reverse domain notation της εταιρείας σας: com.όνομαεταιρείας.όνομαεφαρμογής. Αποφύγετε παύλες και ειδικούς χαρακτήρες. Αν η εφαρμογή έχει επεκτάσεις, προσθέστε επιθέματα μέσω τελείας. Βεβαιωθείτε ότι το αναγνωριστικό είναι μοναδικό και δεν έχει καταληφθεί από άλλο προγραμματιστή.
Ναι, κάθε επέκταση — widget, Watch App, Notification Service — απαιτεί το δικό της Bundle ID. Τα αναγνωριστικά σχηματίζουν μια ιεραρχία: com.example.app ως βάση, com.example.app.widget για το widget, com.example.app.watchkit για το Watch. Όλα εγγράφονται ξεχωριστά στο Apple Developer Portal και χρησιμοποιούν κοινό App ID με τη μητρική εφαρμογή.
Bundle ID — είναι η σειρά αναγνωριστικού στον κώδικα της εφαρμογής. App ID — είναι ένα αντικείμενο στην πύλη Apple Developer που συνδυάζει το Bundle ID με ένα σύνολο ενεργοποιημένων υπηρεσιών (capabilities). Το App ID δημιουργείται βάσει του Bundle ID και χρησιμοποιείται για τη δημιουργία προφίλ υπογραφής.
Συμπεράσματα
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης