# Certificato sviluppatore iOS: provisioning profile ed Expo

> Il certificato dimostra chi firma la tua app, il provisioning profile dice quale app e su quali iPhone. Con Expo, EAS crea e rinnova entrambi per te.

Pagina originale: [Certificato sviluppatore iOS: provisioning profile ed Expo](https://devoria.fr/it/blog/certificato-sviluppatore-ios-provisioning-profile-expo)
Autore: [Mehdi Azizi](https://devoria.fr/it/mehdi-azizi)
Pubblicazione: 2026-11-04
Ultima revisione dei contenuti: 2026-11-04


Un certificato sviluppatore iOS dimostra chi ha firmato la tua app. Il provisioning profile, o profilo di provisioning, collega questo certificato a un'app precisa e dice dove ha il diritto di girare. **Con Expo non devi quasi mai crearli a mano: EAS li crea, li conserva e li rinnova quando lanci una build.**

Capire cosa fa ogni file resta comunque utile. Il giorno in cui una build non si installa o un invio si blocca, è questa conoscenza che ti fa risparmiare una giornata. Questa guida passa in rassegna i quattro elementi, la loro durata, i limiti di Apple e gli errori tipici, con la soluzione per ciascuno.

Pubblico le mie app iOS con Expo ed EAS, tra cui Solys e TradaZen. Il percorso completo è in [pubblicare un'app iOS senza Mac](https://devoria.fr/it/blog/pubblicare-app-ios-senza-mac-expo-eas). Qui apriamo il cofano della firma.

## Perché Apple richiede una firma

Un'app iOS deve essere firmata per installarsi su un iPhone o per essere inviata ad App Store Connect. La firma garantisce che l'app viene da uno sviluppatore noto ad Apple e che nessuno l'ha modificata nel frattempo.

Per l'App Store c'è un dettaglio rassicurante. Secondo [la nota tecnica TN3161 di Apple](https://developer.apple.com/documentation/technotes/tn3161-inside-code-signing-certificates), l'App Store verifica che il tuo certificato di distribuzione sia valido al momento dell'invio, poi firma di nuovo l'app, che a quel punto non dipende più dalla data di scadenza del tuo certificato. **I tuoi certificati devono quindi essere validi al momento dell'invio, non per tutta la vita dell'app.**

## I quattro elementi da conoscere

[La documentazione di Expo sulle credenziali](https://docs.expo.dev/app-signing/app-credentials/) ne conta tre per iOS: il certificato di distribuzione, i profili e la chiave per le notifiche push. Io aggiungo l'identificativo dell'app, senza il quale nessun profilo esiste.

### Il certificato di distribuzione

È la tua firma da sviluppatore. [L'aiuto di Apple sui certificati](https://developer.apple.com/help/account/certificates/certificates-overview) distingue due famiglie:

- **Apple Development** serve a far girare la tua app sui tuoi dispositivi durante lo sviluppo. Appartiene a una persona.
- **Apple Distribution** serve a distribuire su dispositivi di test designati o a inviare ad App Store Connect. Appartiene al team, e solo il titolare dell'account o un admin possono crearlo.

Il certificato di distribuzione non riguarda nessuna app in particolare: lo stesso firma tutte le tue app. È legato a una chiave privata, ed è lei che permette di firmare. Secondo TN3161, un certificato Apple vale in genere un anno dalla sua creazione.

### L'identificativo dell'app (App ID)

L'App ID identifica la tua app in un profilo. Riprende il tuo bundle identifier, per esempio `com.example.myapp` (esempio fittizio). Secondo [l'aiuto di Apple](https://developer.apple.com/help/account/identifiers/register-an-app-id), contiene anche l'elenco delle capability autorizzate: notifiche push, App Groups, Sign in with Apple…

Con Expo è il campo `ios.bundleIdentifier` della tua configurazione. **Sceglilo una volta per tutte**: deve essere identico ovunque, nella configurazione come in App Store Connect. L'App ID non scade. E secondo [la doc Expo sulle capability iOS](https://docs.expo.dev/build-reference/ios-capabilities/), EAS sincronizza le sue capability con la tua configurazione a ogni build.

### Il profilo di provisioning

Il profilo fa da collegamento. Contiene un App ID, un certificato e, a seconda del tipo, un elenco di dispositivi autorizzati. Tre tipi ti riguardano:

- **Development**: la tua app di test sui tuoi dispositivi registrati.
- **Ad hoc**: una build installabile su un elenco preciso di dispositivi, ognuno identificato dal suo UDID. È la "distribuzione interna" di EAS.
- **App Store**: per App Store Connect e TestFlight. Non contiene nessun elenco di dispositivi, spiega [la nota TN3125](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles).

Ogni profilo ha una data di scadenza: non più di un anno in genere secondo Apple, 12 mesi secondo Expo.

### La chiave per le notifiche push (APNs)

La chiave APNs autorizza il tuo server, o quello di Expo, a inviare notifiche alla tua app. È un file .p8 che si scarica una sola volta: [Apple non lo conserva](https://developer.apple.com/help/account/keys/create-a-private-key) nel tuo account. Una stessa chiave serve per tutte le tue app, e [non scade mai](https://developer.apple.com/support/expiration/).

## La tabella riassuntiva

| Elemento                     | Serve a                    | Durata            | Chi lo gestisce con Expo |
| ---------------------------- | -------------------------- | ----------------- | ------------------------ |
| Certificato di distribuzione | Firmare le tue build       | Un anno in genere | EAS, dopo il login       |
| App ID                       | Identificare la tua app    | Nessuna scadenza  | Tu, poi EAS              |
| Profilo App Store            | Inviare ad Apple           | Fino a 12 mesi    | EAS                      |
| Profilo ad hoc               | Installare sui tuoi iPhone | Fino a 12 mesi    | EAS e i tuoi dispositivi |
| Chiave push APNs             | Inviare notifiche          | Nessuna scadenza  | EAS o tu                 |
| Profilo account gratuito     | Testare tramite Xcode      | 7 giorni          | Xcode, non EAS           |

"Tu, poi EAS": scegli tu il bundle identifier, EAS si occupa delle capability. "EAS e i tuoi dispositivi": registri tu ogni iPhone di test, EAS crea il profilo. L'ultima riga riguarda l'account Apple gratuito: secondo [l'aiuto di Apple sugli account](https://developer.apple.com/help/account/basics/about-your-developer-account), i suoi profili scadono 7 giorni dopo la creazione.

## I limiti di Apple da conoscere

- **Certificati di distribuzione**: pochissimi per account. L'aiuto di Apple parla di uno solo per tipo di distribuzione e per team, la tabella di Expo di un limite di 2. Ricorda la regola: **non creare un nuovo certificato a ogni build o su ogni computer.**
- **Chiavi APNs**: al massimo 2 per account, secondo Expo.
- **Profili**: nessun limite, secondo Expo.
- **Dispositivi**: fino a 100 per famiglia di prodotti e per anno di iscrizione, secondo [l'aiuto di Apple sui dispositivi](https://developer.apple.com/help/account/devices/devices-overview). Disattivare un dispositivo non libera posto. Il contatore torna a 100 all'inizio dell'anno di iscrizione successivo, se rimuovi i dispositivi.

## Cosa fa EAS per te

Secondo [la pagina di Expo sulle credenziali gestite](https://docs.expo.dev/app-signing/managed-credentials/), la tua prima build iOS ti propone di generare ciò che manca. Fai il login al tuo account Apple Developer, EAS crea il certificato di distribuzione, il profilo e la chiave push, poi li conserva sui suoi server. Le build successive li riutilizzano.

Tre punti utili:

- **La tua password Apple resta sul tuo computer.** [La pagina sulla sicurezza di Expo](https://docs.expo.dev/app-signing/security/) precisa che non viene inviata ai suoi server e che le credenziali conservate sono cifrate.
- **`eas credentials` ti mostra tutto**: certificato, profili, chiave push. Il comando permette anche di sostituirli o rimuoverli.
- **Eliminare in EAS non elimina da Apple.** Per liberare un posto devi revocare nel portale Apple.

Puoi anche tenere il controllo con le credenziali locali: un file `credentials.json` punta al tuo certificato (.p12) e al tuo profilo (.mobileprovision). Expo chiede di aggiungere questi file al `.gitignore`. È la stessa regola che vale per [le chiavi API di un'app Expo](https://devoria.fr/it/blog/chiave-api-segreta-app-expo): un segreto non finisce mai nel repository.

## Gli errori tipici e come risolverli

### Profilo scaduto

Una build ad hoc contiene il suo profilo: quando scade, l'app non si apre più sui tuoi iPhone di test. Sull'App Store invece Expo conferma che la scadenza non ha alcun effetto sull'app in produzione. **La soluzione: rilancia una build.** EAS genera un nuovo profilo, oppure lo fai tu con `eas credentials`. Poi reinstalla la nuova build sui tuoi dispositivi.

Non confonderlo con TestFlight: una build TestFlight scade dopo 90 giorni, qualunque sia il tuo certificato. I dettagli sono in [TestFlight per testare la tua app iPhone](https://devoria.fr/it/blog/testflight-testare-app-iphone-prima-invio).

### Certificato scaduto o revocato

Apple è chiara: se la tua iscrizione è valida, le tue app già sull'App Store non vengono toccate. Però non puoi più inviare build firmate con quel certificato. Una build inviata ma non ancora sottoposta può essere segnata come Invalid Binary se il suo certificato è stato revocato. E [i profili che contengono un certificato revocato diventano non validi](https://developer.apple.com/help/account/certificates/revoke-a-certificate).

**La soluzione: crea un nuovo certificato da `eas credentials` o alla build successiva**, poi lascia che EAS rifaccia i profili. E non revocare mai d'istinto un certificato che funziona.

### Dispositivo assente dal profilo ad hoc

Il link di installazione funziona da te, ma non sull'iPhone di un tester. Causa: [la doc Expo sulla distribuzione interna](https://docs.expo.dev/build/internal-distribution/) spiega che solo i dispositivi presenti nel profilo al momento della build possono installare l'app.

La soluzione:

1. Registra il dispositivo con `eas device:create`.
2. Rilancia una build in modalità interattiva, collegato al tuo account Apple, così EAS aggiorna il profilo. Oppure firma di nuovo la build esistente con `eas build:resign`, senza ricompilare tutto.
3. In integrazione continua, la modalità non interattiva riutilizza il profilo senza aggiornarne l'elenco. Aggiungi l'opzione `--refresh-ad-hoc-provisioning-profile`.

Su un account nuovo o appena rinnovato, Apple può metterci da 24 a 72 ore a elaborare un nuovo dispositivo. La prima build che lo include può quindi fallire: aspetta, poi rilancia.

### Limite di certificati raggiunto

Apple rifiuta di creare un nuovo certificato di distribuzione. Spesso ci sono vecchi certificati in giro: creati da Xcode su un altro Mac o da un altro servizio di build. **Riutilizza il certificato esistente se hai il suo file .p12. Altrimenti revoca quello che non serve più** nel portale Apple. Una revoca non tocca le tue app già online, ma invalida i profili che lo contenevano.

### "Provisioning profile doesn't include signing certificate"

Questo messaggio di Xcode significa che il profilo non contiene il certificato la cui chiave privata è sul tuo computer. Causa tipica: mescolare la firma automatica di Xcode e le credenziali di EAS. **Scegli una sola fonte di verità**: build EAS con credenziali gestite, oppure credenziali locali, ma non entrambe.

### Notifiche interrotte dopo la revoca di una chiave

Se revochi la tua chiave APNs, Expo avverte che tutte le app che la usano non ricevono più notifiche. Crea una nuova chiave e caricala con `eas credentials`. I token Expo Push dei tuoi utenti non cambiano.

### Capability aggiunta, profilo non valido

Attivare un servizio come le notifiche push o App Groups [rende il profilo non valido](https://developer.apple.com/help/account/provisioning-profiles/edit-download-or-delete-profiles): va rigenerato. Con EAS, la sincronizzazione delle capability avviene a ogni build. Se il profilo continua a essere rifiutato, `eas credentials` ti permette di generarne uno nuovo.

## Cosa viene dopo la firma

Una build firmata è solo una tappa. Scheda, screenshot, privacy e invio in revisione sono riuniti in [pubblicare un'applicazione sull'App Store](https://devoria.fr/it/expertise/pubblicare-app-su-app-store). Se non hai ancora l'iscrizione, comincia da [l'account sviluppatore Apple](https://devoria.fr/it/blog/account-sviluppatore-apple-prezzo). E per capire perché consiglio Expo ai principianti, leggi [React Native ed Expo per un'app mobile](https://devoria.fr/it/expertise/app-mobile-react-native-expo).

## Se stai preparando la tua prima pubblicazione

Prima del tuo primo invio, fai la [diagnosi gratuita](https://devoria.fr/it/diagnostic): ti dice cosa blocca davvero il tuo progetto e ti manda la mia checklist anti-rifiuto Apple.

Per costruire l'app, collegare gli abbonamenti e pubblicarla senza combattere con la firma, l'[iOS & Android Kit](https://devoria.fr/it/kits/ios) segue il percorso in quattro tappe con il codice di partenza delle mie app, al tuo ritmo.

## Domande frequenti

### Cos'è un provisioning profile?

È il file che autorizza la tua app a girare o a essere inviata ad Apple. Collega un identificativo dell'app, un certificato e, a seconda del tipo, un elenco di dispositivi. Un profilo App Store non contiene nessun dispositivo, un profilo ad hoc ne elenca alcuni.

### Il certificato sviluppatore iOS è gratuito?

Non ha un prezzo a parte: il certificato di distribuzione è incluso nell'Apple Developer Program, a 99 dollari l'anno. Con un account Apple gratuito, Xcode ti lascia testare su 3 dispositivi al massimo, ma i profili scadono dopo 7 giorni e la pubblicazione è impossibile.

### Quanto dura un certificato di distribuzione Apple?

In genere un anno dalla creazione, secondo Apple. Anche i profili di provisioning durano al massimo 12 mesi. La chiave per le notifiche push invece non scade mai.

### Cosa succede se il mio certificato di distribuzione scade?

Niente per le tue app già sull'App Store, finché la tua iscrizione è valida. Semplicemente non puoi più inviare nuove build firmate con quel certificato. Con EAS, un nuovo certificato si crea alla build successiva o con `eas credentials`.

### Serve un Mac per creare un certificato iOS?

No, se passi da EAS. Fai il login al tuo account Apple dalla riga di comando, ed EAS genera il certificato e il profilo, su Windows come su Linux. Senza EAS, il metodo classico passa da Xcode o dall'Accesso Portachiavi di un Mac.

### Quanti dispositivi può contenere un profilo ad hoc?

Il tuo account può registrare fino a 100 iPhone per anno di iscrizione, e altrettanti per ogni altra famiglia di dispositivi. Un dispositivo disattivato conta comunque. Per testare con più persone, passa da TestFlight.


## Il tuo progetto

[Review Kit](https://devoria.fr/it/kits/app-review): La mia checklist per la review dell'App Store, i rifiuti di Apple che ho risolto, quella di Google Play e tre skill per Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/it/kits/ios): Crea la tua app iPhone e Android con Claude Code: il codice di partenza delle mie app, il percorso fino agli store e tutti i kit. 99 €.

[Diagnosi: cosa ti separa dalla tua app per iPhone](https://devoria.fr/it/diagnostic): 7 domande, 60 secondi: scopri cosa ti blocca davvero nel pubblicare la tua app per iPhone, il tuo percorso in 4 tappe e il kit giusto per te.
