App Bundle ID — est un identifiant unique d’application utilisé dans les écosystèmes Apple et Google pour l’enregistrement, la signature et la distribution d’un produit logiciel. Chaque application reçoit son Bundle ID lors de la création du projet, et cet identifiant reste inchangé tout au long de son cycle de vie. Selon la Documentation Développeur Apple, le Bundle ID est utilisé pour lier les services, les certificats et les profils de provisionnement.
Points clés
Bundle Identifier est une chaîne qui identifie de manière unique une application dans le système d’exploitation et la boutique d’applications. Sous iOS et macOS, on l’appelle Bundle ID, sous Android — Package Name, bien que fonctionnellement les deux jouent le même rôle : garantir l’unicité de l’application sur l’appareil et dans le magasin.
Le système d’exploitation utilise le Bundle ID pour différencier les applications sur l’appareil. Deux applications avec le même identifiant ne peuvent pas être installées simultanément — le système les traite comme le même produit. Les boutiques d’applications vérifient également l’unicité du Bundle ID lors de la publication.
Apple a introduit le Bundle ID avec la sortie du SDK iOS en 2008. Le format de notation inversée de domaine a été emprunté à Java (convention de nommage des packages), où il est utilisé pour éviter les conflits de noms de classes. Google a adopté cette pratique pour Android, assurant ainsi une cohérence dans les deux écosystèmes mobiles.
| Plateforme | Nom du champ | Exemple |
|---|---|---|
| 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 |
Le Bundle ID se compose de plusieurs segments séparés par des points. La première partie est l’identifiant du développeur ou de l’entreprise (com, org, net). La deuxième est le domaine de l’entreprise (example, google, apple). Les segments suivants spécifient le nom de l’application et la plateforme.
Un Bundle ID typique ressemble à com.company.appname. Apple recommande d’utiliser la notation inversée de domaine pour garantir l’unicité globale. Si l’entreprise n’a pas de domaine, l’utilisation de l’email est autorisée : com.example.myapp ou org.example.myapp.
Apple prend en charge le Wildcard Bundle ID — un modèle d’identifiant avec un astérisque : com.example.*. Ce modèle permet d’utiliser un même App ID pour plusieurs applications d’une même entreprise. Le Wildcard ID est pratique pendant le développement, mais il n’est pas recommandé pour la production car il limite l’utilisation de certains services Apple.
Limitations du wildcard : Les notifications Push, CloudKit, les achats intégrés (In-App Purchase) et Game Center nécessitent un Bundle ID explicite (explicit). Lors de l’utilisation du modèle com.example.*, ces services sont indisponibles. Pour les applications de production, utilisez toujours un Bundle ID explicite pour garantir la fonctionnalité complète de tous les services Apple.
En plus du wildcard, Apple prend en charge les identifiants avec préfixe qui sont attribués à l’équipe de développement lors de l’inscription au programme Apple Developer. Le préfixe (Team ID) est automatiquement ajouté à tous les App ID et profils de provisionnement. Deux Team ID différents peuvent créer le même Bundle ID, mais sur l’appareil, ils sont considérés comme des applications distinctes.
L’enregistrement du Bundle ID est une étape obligatoire avant de publier une application. Dans l’écosystème Apple, l’enregistrement s’effectue sur l’Apple Developer Portal via la section Certificates, Identifiers & Profiles. Dans Google Play, le Bundle ID est spécifié lors de la création de l’application dans la console développeur.
Sur le portail Apple Developer, sélectionnez la section Identifiers, cliquez sur le bouton Register et spécifiez le type d’App ID. Saisissez le nom exact du Bundle ID et sélectionnez les capacités nécessaires : Push Notifications, CloudKit, Sign in with Apple. Après l’enregistrement, l’identifiant devient disponible pour la création de profils de provisionnement.
// Vérification du Bundle ID dans le code de l’application
let bundleID = Bundle.main.bundleIdentifier
print("Current Bundle ID: \(bundleID ?? "unknown")")
// Vérification du Bundle ID pour les conditions de build
if bundleID == "com.example.app.production" {
// Configuration de production
Analytics.shared.configure(.production)
}
Google Play Console ne nécessite pas d’enregistrement préalable du Bundle ID. L’identifiant est spécifié dans le fichier build.gradle du module de l’application et doit être unique dans l’ensemble de Google Play. Après la création de l’application, il est impossible de modifier le Package Name, alors choisissez l’identifiant avec soin et vérifiez son unicité via une recherche dans Google Play. Google ne libère pas les identifiants des applications supprimées, donc un Bundle ID une fois attribué reste indisponible pour les autres développeurs.
Lors de l’inscription dans App Store Connect, vous devez spécifier un Bundle ID parmi l’ensemble existant des identifiants enregistrés. Si l’identifiant n’est pas encore enregistré sur le portail Apple Developer, le système proposera de le créer automatiquement. Après l’enregistrement, le Bundle ID est lié à l’équipe et ne peut pas être transféré vers un autre compte développeur sans contacter le support Apple. Chaque Bundle ID peut avoir plusieurs profils de provisionnement pour différents environnements : Development, Ad Hoc, App Store.
Lors de l’enregistrement d’un Bundle ID pour une application iOS avec des extensions, chaque composant doit être enregistré séparément. Les extensions de widgets, les claviers, Notification Service et Watch App ont leurs propres identifiants dérivés de l’identifiant principal. App Store Connect les regroupe lors de la création d’un App Record, permettant de publier tous les composants comme une seule application.
La configuration du Bundle ID dans Xcode s’effectue à plusieurs endroits : Info.plist, Build Settings et Signing & Capabilities. Le champ central est Bundle Identifier dans la cible de l’application. Tous les services Apple, des notifications Push à CloudKit, sont liés à cet identifiant. Un Bundle ID mal spécifié entraîne des erreurs de signature et l’impossibilité de publier sur l’App Store.
<!-- Info.plist — Bundle ID de base du projet -->
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<!-- Build Settings — variable PRODUCT_BUNDLE_IDENTIFIER -->
<!-- Debug: com.example.app.dev -->
<!-- Release: com.example.app -->
Xcode utilise la variable PRODUCT_BUNDLE_IDENTIFIER dans les Build Settings. Différentes valeurs peuvent être définies pour différentes configurations de build : com.example.app.dev pour Debug et com.example.app pour Release. Ceci est pratique pour installer une version de développement à côté de la version de production sur le même appareil pour les tests.
Si l’application a des extensions (Notification Service, Widget, Watch App), chaque extension reçoit son propre Bundle ID avec un suffixe. Application principale : com.example.app. Extension de widget : com.example.app.widget. Watch App : com.example.app.watchkit. Chaque identifiant est enregistré séparément sur l’Apple Developer Portal et reçoit son propre profil de provisionnement. Xcode gère automatiquement ces dépendances lors de la compilation.
App Bundle ID (Apple) et Package Name (Google) sont des entités similaires avec le même objectif mais des règles d’utilisation différentes dans les écosystèmes iOS et Android. Les deux identifiants utilisent la notation inversée de domaine et ne peuvent pas être modifiés après la publication dans les boutiques officielles d’applications.
Dans l’écosystème Apple, le Bundle ID est lié au profil de provisionnement et aux certificats. Lors d’un changement d’équipe de développement, le Bundle ID peut être transféré entre comptes via App Store Connect. Sous Android, le Package Name est strictement lié à l’application dans Google Play et ne peut pas être transféré entre comptes développeur.
| Caractéristique | iOS Bundle ID | Android Package Name |
|---|---|---|
| Longueur maximale | Illimitée | 150 caractères |
| Séparateur de segments | Point (.) | Point (.) |
| Caractères autorisés | A-Z, a-z, 0-9, point, trait d’union | A-Z, a-z, 0-9, point, trait de soulignement |
| Wildcard | Pris en charge (*) | Non pris en charge |
| Utilisation dans le code | Bundle.main.bundleIdentifier | BuildConfig.APPLICATION_ID |
Malgré les différences, les deux identifiants jouent un rôle critique : sans eux, il est impossible de publier une application dans un magasin officiel. Recommandation pour les projets multiplateformes — utilisez le même identifiant dans les versions iOS et Android pour simplifier l’intégration avec Firebase, Analytics et d’autres services. Cela simplifie également la navigation pour l’équipe de développement : un identifiant pour les deux projets réduit la confusion lors de la configuration CI/CD et de la configuration des environnements.
Lors du développement avec Flutter ou React Native, un identifiant unique est particulièrement important car la base de code est partagée et de nombreux outils de build automatisés attendent le même nom de package pour les deux plateformes. Un projet Firebase est également lié à un seul identifiant pour iOS et Android, ce qui simplifie la configuration des analyses et des rapports de crash.
Questions fréquentes
Modifier le Bundle ID après la publication sur l’App Store ou Google Play est impossible. Le système traitera le nouvel identifiant comme une application complètement différente. Pour mettre à jour un produit existant, le Bundle ID doit rester inchangé pendant tout le cycle de vie de l’application.
Un appareil iOS ou Android ne permettra pas d’installer une deuxième application avec le même identifiant par-dessus la première. Le système affichera une erreur et suggérera de supprimer l’application existante. Dans les magasins, la publication avec un Bundle ID en double sera également bloquée.
Utilisez la notation inversée de domaine de votre entreprise : com.companyname.appname. Évitez les traits d’union et les caractères spéciaux. Si l’application a des extensions, ajoutez des suffixes séparés par des points. Assurez-vous que l’identifiant est unique et n’est pas déjà utilisé par un autre développeur.
Oui, chaque extension — widget, Watch App, Notification Service — nécessite son propre Bundle ID. Les identifiants forment une hiérarchie : com.example.app comme base, com.example.app.widget pour le widget, com.example.app.watchkit pour la Watch. Tous sont enregistrés séparément sur l’Apple Developer Portal et partagent un App ID commun avec l’application parente.
Bundle ID est une chaîne d’identification dans le code de l’application. App ID est un objet dans l’Apple Developer Portal qui combine un Bundle ID avec un ensemble de services activés (capabilities). L’App ID est créé sur la base du Bundle ID et est utilisé pour générer des profils de provisionnement.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi