Chiave API App Store Connect (.p8): crearla e usarla
Di Mehdi Azizi
Pubblicato il , 10 min
La chiave API App Store Connect (.p8) si scarica una sola volta. Ruolo, Issuer ID, Key ID, revoca e uso con Expo, fastlane o uno script.
Una chiave API App Store Connect permette a uno strumento, come EAS, fastlane, RevenueCat o un tuo script, di agire sul tuo account senza la tua password né l'autenticazione a due fattori. Apple conserva la metà pubblica della chiave, e tu scarichi la metà privata, un file .p8, una sola volta. Con questo file, l'Issuer ID e il Key ID firmi dei token validi al massimo 20 minuti per la maggior parte delle richieste.
Pubblico le mie app iOS, tra cui TradaZen e Nolera, con Expo. Una chiave del team con ruolo App Manager serve a RevenueCat, alle mie build Expo e a uno strumento da riga di comando che modifica le mie schede. Questa guida segue le pagine di Apple, Expo e fastlane rilette il 3 novembre 2026. Non confonderla con le chiavi di servizi inserite nel codice di un'app: quelle sono trattate in chiave API segreta in un'app Expo.
Cosa fa una chiave API App Store Connect
Secondo la documentazione di Apple, l'API App Store Connect richiede un token JWT per ogni richiesta. Lo generi e lo firmi con la tua chiave privata. La chiave serve solo a questa API: non puoi usarla per altri servizi Apple.
Il suo vantaggio sta in una frase: nessuna persona deve confermare l'accesso. Il tuo Apple ID si scontra con l'autenticazione a due fattori, e questo blocca qualsiasi automazione. La guida EAS Submit iOS mostra cosa cambia per l'invio di un'app Expo.
Prima di tutto: richiedere l'accesso all'API
La prima chiave non si crea subito. L'aiuto di App Store Connect è chiaro: l'Account Holder deve prima richiedere l'accesso all'API. Apre Users and Access, clicca su Integrations, poi su Request Access. Apple esamina la richiesta caso per caso.
L'Account Holder è la persona che ha registrato l'account. Se sei agli inizi, sei tu: la guida account sviluppatore Apple spiega la registrazione nel dettaglio.
Chiave del team o chiave individuale
Apple offre due tipi di chiavi. Ecco le differenze, prese dalla documentazione e dall'aiuto di App Store Connect:
| Criterio | Chiave del team | Chiave individuale |
|---|---|---|
| Chi può generarla | Account Holder o Admin | Quasi tutti gli utenti |
| App accessibili | Tutte, senza eccezioni | Quelle dell'utente |
| Permessi | Il ruolo scelto | Quelli dell'utente |
| Numero di chiavi | Più di una | Una attiva per persona |
| Certificati e profili | Sì, secondo il ruolo | No |
| Vendite, finanze, notaryTool | Secondo il ruolo | No |
| Campo del token | iss = Issuer ID | sub = user |
"Quasi tutti gli utenti" significa, secondo Apple: Account Holder, Admin, App Manager, Customer Support, Developer e Marketing, a meno che un Admin o l'Account Holder non abbia tolto loro il permesso di generare una chiave individuale.
Per Expo o fastlane, scegli una chiave del team. Una chiave individuale non ha accesso agli endpoint di provisioning, quelli che creano certificati e profili. La documentazione di fastlane lo conferma: le chiavi del team sono necessarie per qualsiasi accesso legato al provisioning.
Che ruolo dare alla tua chiave
Una chiave del team accede a tutte le app dell'account, qualunque sia il suo ruolo. Il ruolo decide cosa può fare. Apple avverte che una chiave Admin può creare ed eliminare utenti: dai il ruolo più basso che copre il tuo uso. I permessi qui sotto vengono dalla tabella dei ruoli di Apple.
| Uso della chiave | Ruoli che lo consentono |
|---|---|
| Inviare build | Admin, App Manager, Developer |
| Gestire le build TestFlight | Admin, App Manager |
| Creare certificati e profili | Admin, App Manager |
| Inviare un'app in revisione | Admin, App Manager |
| Importare prodotti e prezzi (RevenueCat) | Almeno App Manager |
| Generare altre chiavi del team | Admin |
La riga RevenueCat viene dalla sua documentazione. La guida di Expo, invece, assegna il ruolo Admin alla chiave. Sulle mie app basta il ruolo App Manager: EAS ci crea i profili di distribuzione, e RevenueCat importa i prodotti.
Una volta generata la chiave, non puoi più modificarne né il nome né il ruolo. Per cambiare, devi revocarla e generarne un'altra.
Creare una chiave del team, passo per passo
Serve un account Admin o Account Holder. Secondo Apple:
- Apri Users and Access, poi la scheda Integrations.
- Scegli App Store Connect API nella colonna di sinistra, poi la scheda Team Keys.
- Clicca su Generate API Key, o sul pulsante +.
- Dai un nome alla chiave. Serve solo a te, non fa parte della chiave. Chiamala come lo strumento che la userà.
- Scegli il ruolo sotto Access, poi clicca su Generate.
- Scarica la chiave privata con il link Download API Key.
Il link di download sparisce appena hai scaricato il file, e Apple non ne conserva nessuna copia. Metti al sicuro il
.p8prima di chiudere la pagina.
Poi annota i due identificativi. Secondo la pagina di Apple sui token, l'Issuer ID compare in alto nella pagina Integrations, con un pulsante Copy. Il Key ID appare nell'elenco delle chiavi attive: passaci sopra col mouse per far comparire Copy Key ID. L'Issuer ID è lo stesso per tutte le chiavi del team dell'account. Il Key ID è specifico di ogni chiave.
Per una chiave individuale è più rapido: apri il tuo profilo utente, scendi fino a Individual API Key e clicca su Generate API Key. Anche qui il download è unico.
Conservare il file .p8
Apple chiede di trattare la chiave come una password: non condividerla, non metterla in un repository di codice, non inserirla mai nel codice di un'app. La mia routine:
- Una cartella fuori dal progetto, o il gestore di segreti del tuo strumento di integrazione continua.
- La cartella delle chiavi nel tuo
.gitignore, se il file deve stare nel progetto il tempo di un invio. - Permessi rigidi. Uno strumento da riga di comando per App Store Connect ha rifiutato il mio
.p8finché il file era leggibile da altri account. Unchmod 600ha risolto il problema. - Una chiave per strumento. Apple permette di generare più chiavi, con i ruoli che vuoi.
Quest'ultimo punto, all'inizio non l'ho applicato. La mia chiave App Manager serve sia a RevenueCat, sia alle mie build, sia al mio strumento per le schede. Se devo revocarla, tre strumenti si fermano insieme. Se dovessi rifarlo, creerei una chiave per strumento, per poterne disattivare una senza toccare le altre.
Usarla con Expo
Tre modi di dare la chiave a EAS:
- Farla gestire a EAS.
eas credentials --platform iospuò creare una chiave e conservarla sui server di Expo. È la strada più semplice. - Dichiararla in
eas.json. Il profilosubmitaccettaascApiKeyPath,ascApiKeyIssuerIdeascApiKeyId. Secondo il riferimento di eas.json, questi campi accettano variabili d'ambiente, come$ASC_API_KEY_PATH. - Passarla tramite l'ambiente. Il repository di EAS CLI documenta
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_IDeEXPO_ASC_ISSUER_ID. Per una chiave individuale si omette l'Issuer ID.
Un limite da conoscere per le build: Expo precisa che l'API ufficiale non sa collegare un App Group, un Merchant ID o un container CloudKit. Serve allora un accesso con il tuo Apple ID, in locale. Mi è successo su Nolera con l'app group del suo widget: la chiave attivava la capability, senza collegare il gruppo. Ho fatto il collegamento nel portale sviluppatori di Apple. Se la sincronizzazione delle capability si blocca, EXPO_NO_CAPABILITY_SYNC=1 la disattiva, e attivi tu la capability sull'identificativo dell'app. La firma delle build è spiegata in certificato e provisioning profile iOS.
Usarla con fastlane
fastlane legge la chiave da un file JSON. I campi key_id, issuer_id e key, il contenuto del .p8, sono obbligatori. duration e in_house sono facoltativi. Valori fittizi:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "your-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Poi passi il file a un'azione, per esempio fastlane pilot distribute --api_key_path fastlane/cle.json. In un Fastfile, l'azione app_store_connect_api_key accetta key_id, issuer_id e key_filepath. La durata della sessione non supera 1.200 secondi, cioè 20 minuti. Non tutte le azioni la supportano: fastlane segnala per esempio che produce e pem non funzionano con una chiave API.
Usarla in un tuo script
Senza strumenti, il token lo costruisci tu. Apple fissa la ricetta:
- Header:
algvaleES256,kidvale il tuo Key ID,typvaleJWT. - Payload, chiave del team:
iss, il tuo Issuer ID;iat, l'ora di creazione;exp, l'ora di scadenza;aud, che valeappstoreconnect-v1. - Payload, chiave individuale:
subvaleuseral posto diiss. - Durata: oltre i 20 minuti, Apple rifiuta il token per la maggior parte delle richieste.
In Python, con la libreria PyJWT e la sua dipendenza crittografica, installata con pip install pyjwt[crypto] secondo la sua documentazione. Nel terminale del Mac, usa le virgolette: pip install "pyjwt[crypto]", altrimenti zsh rifiuta le parentesi quadre.
import time
import jwt
KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "your-issuer-id"
with open("AuthKey_XXXXXXXXXX.p8") as f:
private_key = f.read()
now = int(time.time())
token = jwt.encode(
{"iss": ISSUER_ID, "iat": now, "exp": now + 20 * 60, "aud": "appstoreconnect-v1"},
private_key,
algorithm="ES256",
headers={"kid": KEY_ID, "typ": "JWT"},
)
print(token)
Poi lo invii nell'header Authorization, come nell'esempio di Apple:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Ho eseguito questo script il 3 novembre 2026 con una chiave usa e getta generata sul mio computer: header e payload del token corrispondono alla pagina di Apple, e la firma ES256 risulta valida. Non l'ho inviato all'API di Apple con questa chiave di test, che per Apple non esiste. Riusa lo stesso token finché è valido: Apple lo consiglia per prestazioni migliori.
Revocare una chiave
Revoca una chiave appena è persa, compromessa, o quando uno strumento non la usa più. Secondo l'aiuto di App Store Connect, con un account Account Holder o Admin:
- Apri Users and Access, poi Integrations.
- Scegli Team Keys, o Individual Keys, poi clicca su Edit.
- Seleziona le chiavi da revocare, poi Revoke Key.
- Conferma con Revoke.
Una chiave revocata non si riattiva mai. Apple la mostra per 30 giorni sotto Revoked. Ogni strumento che la usava fallisce allora l'autenticazione. Con Expo, il messaggio è "App Store Connect rejected the API authentication credentials". Questo messaggio e gli altri errori di invio sono spiegati in gli errori di invio con EAS e come correggerli. Se la chiave non è compromessa, prepara quella nuova prima di disattivare la vecchia. Se lo è, Apple chiede di revocarla subito.
Per la tua chiave individuale: il tuo profilo, Individual API Key, poi Revoke.
La mia checklist della chiave .p8
- L'Account Holder ha richiesto l'accesso all'API.
- La chiave è una chiave del team se serve per build o profili.
- Il suo ruolo è il più basso che copre l'uso, e il suo nome dice quale strumento la usa.
- Il
.p8è conservato fuori dal repository, con permessi rigidi e una copia di backup cifrata. - Issuer ID e Key ID sono annotati a parte, senza il file.
- Ogni strumento ha la sua chiave, per poterne revocare una sola.
Automatizzare la pubblicazione senza lasciarci la chiave
La chiave è solo un pezzo del percorso. L'iOS & Android Kit parte dal codice di base delle mie app, abbonamenti compresi, e segue quattro tappe fino all'App Store, con i tuoi tempi. Se colleghi RevenueCat con questa chiave, la configurazione completa è in RevenueCat e l'abbonamento in-app iOS.
Se stai preparando la tua prima uscita, fai la tua diagnosi gratuita: ti dice cosa ti blocca davvero e ti manda la mia checklist anti-rifiuto Apple. La pagina pubblicare un'app sull'App Store riprende ogni tappa, dalla scheda all'approvazione.
Domande frequenti
Come si crea una chiave API App Store Connect?
L'Account Holder richiede prima l'accesso all'API. Poi un Admin apre Users and Access, scheda Integrations, App Store Connect API, Team Keys. Clicca su Generate API Key, sceglie un nome e un ruolo, genera la chiave, poi scarica il file .p8.
Si può riscaricare una chiave .p8 persa?
No. Il file si scarica una sola volta, e Apple non ne conserva nessuna copia. Revoca la chiave persa, poi generane una nuova e aggiorna ogni strumento che la usava.
Dove trovo l'Issuer ID e il Key ID?
In App Store Connect, menu Users and Access, scheda Integrations. L'Issuer ID compare in alto nella pagina. Il Key ID è nell'elenco delle chiavi attive. Una chiave individuale non usa l'Issuer ID.
Che ruolo dare a una chiave usata da Expo?
La guida di Expo assegna il ruolo Admin. Secondo la tabella dei ruoli di Apple, App Manager basta per inviare build e creare certificati e profili. È il ruolo della mia chiave, usata per le mie build Expo.
Si può cambiare il ruolo di una chiave API?
No. Apple non permette di modificare né il nome né il ruolo di una chiave dopo la creazione. Revocala, poi generane una nuova con il ruolo giusto.
Una chiave API App Store Connect scade?
Le pagine di Apple non parlano di nessuna scadenza della chiave, solo della sua revoca. Sono i token firmati con la chiave a scadere, dopo al massimo 20 minuti per la maggior parte delle richieste.

