App Bundle ID — è un identificatore univoco dell’applicazione utilizzato negli ecosistemi Apple e Google per la registrazione, la firma e la distribuzione di un prodotto software. Ogni app riceve il suo Bundle ID alla creazione del progetto e questo identificatore rimane invariato per tutto il ciclo di vita. Secondo la Documentazione per Sviluppatori Apple, il Bundle ID viene utilizzato per collegare servizi, certificati e profili di provisioning.
Punti chiave
Bundle Identifier è una stringa che identifica univocamente un’applicazione nel sistema operativo e nello store delle app. Su iOS e macOS si chiama Bundle ID, su Android — Package Name, sebbene funzionalmente entrambi svolgano lo stesso ruolo: garantire l’unicità dell’app sul dispositivo e nello store.
Il sistema operativo utilizza il Bundle ID per differenziare le app sul dispositivo. Due app con lo stesso identificatore non possono essere installate contemporaneamente — il sistema le tratta come lo stesso prodotto. Anche gli store delle app verificano l’unicità del Bundle ID durante la pubblicazione.
Apple ha introdotto il Bundle ID con il rilascio dell’iOS SDK nel 2008. Il formato di notazione inversa del dominio è stato preso in prestito da Java (convenzione di denominazione dei package), dove viene utilizzato per prevenire conflitti di nomi di classi. Google ha adottato questa pratica per Android, garantendo coerenza in entrambi gli ecosistemi mobili.
| Piattaforma | Nome del campo | Esempio |
|---|---|---|
| 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 |
Il Bundle ID è composto da diversi segmenti separati da punti. La prima parte è l’identificatore dello sviluppatore o dell’azienda (com, org, net). La seconda è il dominio dell’azienda (example, google, apple). I segmenti successivi specificano il nome dell’app e la piattaforma.
Un Bundle ID tipico ha il formato com.company.appname. Apple raccomanda di utilizzare la notazione inversa del dominio per garantire l’unicità globale. Se l’azienda non ha un dominio, è consentito l’uso dell’email: com.example.myapp o org.example.myapp.
Apple supporta il Wildcard Bundle ID — un modello di identificatore con asterisco: com.example.*. Questo modello consente di utilizzare un unico App ID per più app della stessa azienda. Il Wildcard ID è comodo durante lo sviluppo, ma non è raccomandato per la produzione perché limita l’uso di alcuni servizi Apple.
Limitazioni del wildcard: Le notifiche Push, CloudKit, gli acquisti in-app (In-App Purchase) e Game Center richiedono un Bundle ID esplicito (explicit). Utilizzando il modello com.example.*, questi servizi non sono disponibili. Per le app in produzione, utilizzate sempre un Bundle ID esplicito per garantire la piena funzionalità di tutti i servizi Apple.
Oltre al wildcard, Apple supporta identificatori con prefisso che vengono assegnati al team di sviluppo al momento della registrazione all’Apple Developer Program. Il prefisso (Team ID) viene automaticamente aggiunto a tutti gli App ID e ai profili di provisioning. Due Team ID diversi possono creare lo stesso Bundle ID, ma sul dispositivo vengono considerati app diverse.
La registrazione del Bundle ID è un passaggio obbligatorio prima di pubblicare un’app. Nell’ecosistema Apple, la registrazione viene effettuata nell’Apple Developer Portal attraverso la sezione Certificates, Identifiers & Profiles. In Google Play, il Bundle ID viene specificato durante la creazione dell’app nella console sviluppatore.
Nel portale Apple Developer, selezionate la sezione Identifiers, fate clic sul pulsante Register e specificate il tipo di App ID. Inserite il nome esatto del Bundle ID e selezionate le capacità necessarie: Push Notifications, CloudKit, Sign in with Apple. Dopo la registrazione, l’identificatore diventa disponibile per la creazione di profili di provisioning.
// Verifica del Bundle ID nel codice dell’app
let bundleID = Bundle.main.bundleIdentifier
print("Current Bundle ID: \(bundleID ?? "unknown")")
// Verifica del Bundle ID per le condizioni di build
if bundleID == "com.example.app.production" {
// Configurazione di produzione
Analytics.shared.configure(.production)
}
Google Play Console non richiede una registrazione preventiva del Bundle ID. L’identificatore viene specificato nel file build.gradle del modulo dell’app e deve essere univoco in tutto Google Play. Dopo la creazione dell’app, è impossibile modificare il Package Name, quindi scegliete l’identificatore con attenzione e verificate la sua unicità tramite una ricerca in Google Play. Google non rilascia gli identificatori delle app rimosse, quindi un Bundle ID una volta occupato rimane non disponibile per altri sviluppatori.
Durante la registrazione in App Store Connect, dovete specificare un Bundle ID dall’insieme esistente di identificatori registrati. Se l’identificatore non è ancora registrato nel portale Apple Developer, il sistema offrirà di crearlo automaticamente. Dopo la registrazione, il Bundle ID viene legato al team e non può essere trasferito su un altro account sviluppatore senza contattare il supporto Apple. Ogni Bundle ID può avere più profili di provisioning per diversi ambienti: Development, Ad Hoc, App Store.
Durante la registrazione di un Bundle ID per un’app iOS con estensioni, ogni componente deve essere registrato separatamente. Le estensioni dei widget, le tastiere, Notification Service e Watch App hanno i propri identificatori derivati da quello principale. App Store Connect li raggruppa durante la creazione di un App Record, consentendo di pubblicare tutti i componenti come un’unica app.
La configurazione del Bundle ID in Xcode viene effettuata in diversi punti: Info.plist, Build Settings e Signing & Capabilities. Il campo centrale è Bundle Identifier nel target dell’app. Tutti i servizi Apple, dalle notifiche Push a CloudKit, sono legati a questo identificatore. Un Bundle ID specificato in modo errato causa errori di firma e l’impossibilità di pubblicare sull’App Store.
<!-- Info.plist — Bundle ID base del progetto -->
<key>CFBundleIdentifier</key>
<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
<!-- Build Settings — variabile PRODUCT_BUNDLE_IDENTIFIER -->
<!-- Debug: com.example.app.dev -->
<!-- Release: com.example.app -->
Xcode utilizza la variabile PRODUCT_BUNDLE_IDENTIFIER nelle Build Settings. È possibile impostare valori diversi per diverse configurazioni di build: com.example.app.dev per Debug e com.example.app per Release. Ciò è comodo per installare una versione di sviluppo insieme alla versione di produzione sullo stesso dispositivo per i test.
Se l’app ha estensioni (Notification Service, Widget, Watch App), ogni estensione riceve il proprio Bundle ID con un suffisso. App principale: com.example.app. Estensione widget: com.example.app.widget. Watch App: com.example.app.watchkit. Ogni identificatore viene registrato separatamente nell’Apple Developer Portal e riceve il proprio profilo di provisioning. Xcode gestisce automaticamente queste dipendenze durante la compilazione.
App Bundle ID (Apple) e Package Name (Google) sono entità simili con lo stesso scopo ma regole di utilizzo diverse negli ecosistemi iOS e Android. Entrambi gli identificatori utilizzano la notazione inversa del dominio e non possono essere modificati dopo la pubblicazione negli store ufficiali di app.
Nell’ecosistema Apple, il Bundle ID è legato al profilo di provisioning e ai certificati. Quando si cambia team di sviluppo, il Bundle ID può essere trasferito tra account tramite App Store Connect. In Android, il Package Name è strettamente legato all’app in Google Play e non può essere trasferito tra account sviluppatore.
| Caratteristica | iOS Bundle ID | Android Package Name |
|---|---|---|
| Lunghezza massima | Illimitata | 150 caratteri |
| Separatore di segmenti | Punto (.) | Punto (.) |
| Caratteri consentiti | A-Z, a-z, 0-9, punto, trattino | A-Z, a-z, 0-9, punto, trattino basso |
| Wildcard | Supportato (*) | Non supportato |
| Uso nel codice | Bundle.main.bundleIdentifier | BuildConfig.APPLICATION_ID |
Nonostante le differenze, entrambi gli identificatori svolgono un ruolo critico: senza di essi è impossibile pubblicare un’app in uno store ufficiale. Raccomandazione per progetti multipiattaforma — utilizzate lo stesso identificatore nelle versioni iOS e Android per semplificare l’integrazione con Firebase, Analytics e altri servizi. Ciò semplifica anche la navigazione per il team di sviluppo: un identificatore per entrambi i progetti riduce la confusione durante la configurazione di CI/CD e la configurazione degli ambienti.
Durante lo sviluppo con Flutter o React Native, un identificatore unico è particolarmente importante poiché la base di codice è condivisa e molti strumenti di build automatizzati si aspettano lo stesso nome di package per entrambe le piattaforme. Un progetto Firebase è anche legato a un unico identificatore per iOS e Android, semplificando la configurazione di analisi e crash reporting.
Domande frequenti
Modificare il Bundle ID dopo la pubblicazione sull’App Store o Google Play è impossibile. Il sistema tratterà il nuovo identificatore come un’app completamente diversa. Per aggiornare un prodotto esistente, il Bundle ID deve rimanere invariato per tutto il ciclo di vita dell’app.
Un dispositivo iOS o Android non consentirà di installare una seconda app con lo stesso identificatore sopra la prima. Il sistema visualizzerà un errore e suggerirà di eliminare l’app esistente. Negli store, anche la pubblicazione con un Bundle ID duplicato verrà bloccata.
Utilizzate la notazione inversa del dominio della vostra azienda: com.companyname.appname. Evitate trattini e caratteri speciali. Se l’app ha estensioni, aggiungete suffissi separati da punti. Assicuratevi che l’identificatore sia unico e non occupato da un altro sviluppatore.
Sì, ogni estensione — widget, Watch App, Notification Service — richiede il proprio Bundle ID. Gli identificatori formano una gerarchia: com.example.app come base, com.example.app.widget per il widget, com.example.app.watchkit per Watch. Tutti vengono registrati separatamente nell’Apple Developer Portal e condividono un App ID comune con l’app principale.
Bundle ID è una stringa identificativa nel codice dell’app. App ID è un oggetto nell’Apple Developer Portal che combina un Bundle ID con un insieme di servizi abilitati (capabilities). L’App ID viene creato sulla base del Bundle ID e viene utilizzato per generare profili di provisioning.
Riepilogo
Svilupperemo un'applicazione mobile chiavi in mano
IT Sectr crea applicazioni iOS e Android per startup e aziende dal 2017. Ti consulteremo e ti proporremo la soluzione migliore.
Leggi anche