App Store Connect API-nøkkel (.p8): opprett og bruk den
Av Mehdi Azizi
Publisert , 10 min
App Store Connect API-nøkkelen (.p8) kan bare lastes ned én gang. Rolle, Issuer ID, Key ID, tilbakekalling og bruk med Expo, fastlane eller et skript.
En App Store Connect API-nøkkel lar et verktøy, som EAS, fastlane, RevenueCat eller ditt eget skript, handle på kontoen din uten passordet ditt og uten tofaktorautentisering. Apple beholder den offentlige halvdelen av nøkkelen, og du laster ned den private halvdelen, en .p8-fil, bare én gang. Med denne filen, Issuer ID og Key ID signerer du tokener som for de fleste forespørsler er gyldige i maks 20 minutter.
Jeg publiserer iOS-appene mine, blant annet TradaZen og Nolera, med Expo. En teamnøkkel med rollen App Manager brukes av RevenueCat, av Expo-byggene mine og av et kommandolinjeverktøy som redigerer appsidene mine. Denne guiden følger sidene til Apple, Expo og fastlane, gjennomlest 3. november 2026. Ikke bland den sammen med tjenestenøkler som legges inn i koden til en app: de tar jeg for meg i hemmelig API-nøkkel i en Expo-app.
Hva en App Store Connect API-nøkkel gjør
Ifølge Apples dokumentasjon krever App Store Connect API et JWT-token for hver forespørsel. Du genererer det og signerer det med den private nøkkelen din. Nøkkelen fungerer bare mot dette API-et: du kan ikke bruke den til andre Apple-tjenester.
Poenget kan sies i én setning: ingen person trenger å godkjenne innloggingen. Apple-ID-en din stopper på tofaktorautentiseringen, og det blokkerer all automatisering. Guiden EAS Submit for iOS viser hva dette endrer når du sender inn en Expo-app.
Aller først: be om tilgang til API-et
Den første nøkkelen kan ikke opprettes med en gang. Hjelpesidene til App Store Connect er tydelige: Account Holder må først be om tilgang til API-et. Hen åpner Users and Access, klikker på Integrations og deretter på Request Access. Apple vurderer hver forespørsel enkeltvis.
Account Holder er personen som registrerte kontoen. Er du nybegynner, er det deg: guiden Apple-utviklerkonto går gjennom registreringen.
Teamnøkkel eller individuell nøkkel
Apple tilbyr to typer nøkler. Her er forskjellene, hentet fra dokumentasjonen og hjelpesidene til App Store Connect:
| Kriterium | Teamnøkkel | Individuell nøkkel |
|---|---|---|
| Hvem kan generere den | Account Holder eller Admin | Nesten alle brukere |
| Tilgjengelige apper | Alle, uten unntak | Brukerens apper |
| Rettigheter | Den valgte rollen | Brukerens rettigheter |
| Antall nøkler | Flere | Én aktiv per person |
| Sertifikater og profiler | Ja, avhengig av rolle | Nei |
| Salg, økonomi, notaryTool | Avhengig av rolle | Nei |
| Felt i tokenet | iss = Issuer ID | sub = user |
«Nesten alle brukere» betyr ifølge Apple: Account Holder, Admin, App Manager, Customer Support, Developer og Marketing, med mindre en Admin eller Account Holder har fjernet retten deres til å generere en individuell nøkkel.
Til Expo eller fastlane velger du en teamnøkkel. En individuell nøkkel har ikke tilgang til provisioning-endepunktene, de som oppretter sertifikater og profiler. Dokumentasjonen til fastlane bekrefter det: teamnøkler kreves for all tilgang som har med provisioning å gjøre.
Hvilken rolle nøkkelen bør få
En teamnøkkel har tilgang til alle appene på kontoen, uansett rolle. Rollen avgjør hva den kan gjøre. Apple advarer om at en Admin-nøkkel kan opprette og slette brukere: gi den minste rollen som dekker behovet ditt. Rettighetene nedenfor kommer fra Apples rolletabell.
| Bruk av nøkkelen | Roller som tillater det |
|---|---|
| Sende inn bygg | Admin, App Manager, Developer |
| Administrere TestFlight-bygg | Admin, App Manager |
| Opprette sertifikater og profiler | Admin, App Manager |
| Sende en app til gjennomgang | Admin, App Manager |
| Importere produkter og priser (RevenueCat) | Minst App Manager |
| Generere andre teamnøkler | Admin |
RevenueCat-raden kommer fra dokumentasjonen deres. Expo-guiden gir derimot nøkkelen rollen Admin. For mine apper holder App Manager: EAS oppretter distribusjonsprofilene med den, og RevenueCat importerer produktene.
Når nøkkelen først er generert, kan du ikke endre verken navnet eller rollen. Vil du endre noe, må du tilbakekalle den og generere en ny.
Opprett en teamnøkkel, steg for steg
Du trenger en Admin- eller Account Holder-konto. Ifølge Apple:
- Åpne Users and Access, og deretter fanen Integrations.
- Velg App Store Connect API i venstre kolonne, og deretter fanen Team Keys.
- Klikk på Generate API Key, eller på +-knappen.
- Gi nøkkelen et navn. Det er bare for deg og er ikke en del av nøkkelen. Gi den navn etter verktøyet som skal bruke den.
- Velg rollen under Access, og klikk på Generate.
- Last ned den private nøkkelen med lenken Download API Key.
Nedlastingslenken forsvinner så snart du har lastet ned filen, og Apple beholder ingen kopi. Legg
.p8-filen på et trygt sted før du lukker siden.
Noter deretter de to ID-ene. Ifølge Apples side om tokener vises Issuer ID øverst på Integrations-siden, med en Copy-knapp. Key ID står i listen over aktive nøkler: hold musepekeren over den for å få fram Copy Key ID. Issuer ID er den samme for alle teamnøklene på kontoen. Key ID er unik for hver nøkkel.
For en individuell nøkkel går det raskere: åpne brukerprofilen din, bla ned til Individual API Key og klikk på Generate API Key. Også her kan du bare laste ned én gang.
Oppbevar .p8-filen
Apple ber deg behandle nøkkelen som et passord: ikke del den, ikke legg den i et kodelager, og bygg den aldri inn i koden til en app. Rutinen min:
- En mappe utenfor prosjektet, eller hemmelighetslageret i CI-verktøyet ditt.
- Nøkkelmappen i
.gitignore, hvis filen må ligge i prosjektet mens du sender inn. - Strenge tilganger. Et kommandolinjeverktøy for App Store Connect nektet å godta
.p8-filen min så lenge andre kontoer kunne lese den. Enchmod 600løste problemet. - Én nøkkel per verktøy. Apple lar deg generere flere nøkler, med rollene du selv velger.
Det siste punktet fulgte jeg ikke i starten. App Manager-nøkkelen min brukes av både RevenueCat, byggene mine og verktøyet for appsidene. Må jeg tilbakekalle den, faller tre verktøy samtidig. Om jeg skulle gjort det på nytt, hadde jeg laget én nøkkel per verktøy, så jeg kunne kutte én uten å røre de andre.
Bruk den med Expo
Tre måter å gi nøkkelen til EAS på:
- La EAS håndtere den.
eas credentials --platform ioskan opprette en nøkkel og lagre den på Expos servere. Det er den enkleste veien. - Oppgi den i
eas.json.submit-profilen godtarascApiKeyPath,ascApiKeyIssuerIdogascApiKeyId. Ifølge referansen for eas.json godtar disse feltene miljøvariabler, som$ASC_API_KEY_PATH. - Send den via miljøet. EAS CLI-repoet dokumenterer
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_IDogEXPO_ASC_ISSUER_ID. For en individuell nøkkel utelater du Issuer ID.
En begrensning du bør kjenne til for bygg: Expo påpeker at det offisielle API-et ikke kan knytte til en App Group, en Merchant ID eller en CloudKit-container. Da trenger du en innlogging med Apple-ID-en din, lokalt. Det opplevde jeg med Nolera og app-gruppen til widgeten: nøkkelen aktiverte funksjonen, men knyttet ikke til gruppen. Den koblingen gjorde jeg i Apples utviklerportal. Hvis synkroniseringen av funksjoner låser seg, slår EXPO_NO_CAPABILITY_SYNC=1 den av, og så aktiverer du funksjonen selv på app-ID-en. Signering av bygg er forklart i iOS-sertifikat og provisioning profile.
Bruk den med fastlane
fastlane leser nøkkelen fra en JSON-fil. Feltene key_id, issuer_id og key, innholdet i .p8-filen, er obligatoriske. duration og in_house er valgfrie. Fiktive verdier:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "din-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Deretter sender du filen til en action, for eksempel fastlane pilot distribute --api_key_path fastlane/cle.json. I en Fastfile tar actionen app_store_connect_api_key imot key_id, issuer_id og key_filepath. Sesjonsvarigheten er maks 1200 sekunder, altså 20 minutter. Ikke alle actions støtter den: fastlane oppgir for eksempel at produce og pem ikke fungerer med en API-nøkkel.
Bruk den i ditt eget skript
Uten verktøy lager du tokenet selv. Apple har fastsatt oppskriften:
- Header:
algerES256,kider Key ID-en din,typerJWT. - Innhold, teamnøkkel:
iss, Issuer ID-en din;iat, tidspunktet det ble laget;exp, utløpstidspunktet;aud, som erappstoreconnect-v1. - Innhold, individuell nøkkel:
suberuseri stedet foriss. - Varighet: over 20 minutter avviser Apple tokenet for de fleste forespørsler.
I Python, med biblioteket PyJWT og kryptografi-avhengigheten, installert med pip install pyjwt[crypto] ifølge dokumentasjonen. I Mac-terminalen må du bruke anførselstegn: pip install "pyjwt[crypto]", ellers nekter zsh å godta hakeparentesene.
import time
import jwt
KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "din-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)
Så sender du det i Authorization-headeren, som i Apples eksempel:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Jeg kjørte dette skriptet 3. november 2026 med en engangsnøkkel generert på maskinen min: headeren og innholdet i tokenet stemmer med Apples side, og ES256-signaturen lar seg verifisere. Jeg sendte det ikke til Apples API med denne testnøkkelen, som ikke finnes hos Apple. Gjenbruk det samme tokenet så lenge det er gyldig: Apple anbefaler det for bedre ytelse.
Tilbakekall en nøkkel
Tilbakekall en nøkkel så snart den er mistet, kompromittert eller ikke lenger brukes av noe verktøy. Ifølge hjelpesidene til App Store Connect, med en Account Holder- eller Admin-konto:
- Åpne Users and Access, og deretter Integrations.
- Velg Team Keys, eller Individual Keys, og klikk på Edit.
- Huk av nøklene som skal tilbakekalles, og velg Revoke Key.
- Bekreft med Revoke.
En tilbakekalt nøkkel kan aldri aktiveres igjen. Apple viser den i 30 dager under Revoked. Alle verktøy som brukte den, feiler da ved autentisering. Med Expo er meldingen «App Store Connect rejected the API authentication credentials». Denne meldingen og andre innsendingsfeil er forklart i innsendingsfeil med EAS og hvordan du fikser dem. Hvis nøkkelen ikke er kompromittert, gjør du klar den nye før du kutter den gamle. Er den kompromittert, ber Apple deg tilbakekalle den umiddelbart.
For din egen individuelle nøkkel: profilen din, Individual API Key, og så Revoke.
Sjekklisten min for .p8-nøkkelen
- Account Holder har bedt om tilgang til API-et.
- Nøkkelen er en teamnøkkel hvis den brukes til bygg eller profiler.
- Rollen er den minste som dekker bruken, og navnet sier hvilket verktøy som bruker den.
.p8-filen ligger utenfor repoet, med strenge tilganger og en kryptert sikkerhetskopi.- Issuer ID og Key ID er notert ved siden av, uten filen.
- Hvert verktøy har sin egen nøkkel, så du kan tilbakekalle bare én.
Automatiser publiseringen uten å legge igjen nøkkelen
Nøkkelen er bare én del av veien. iOS & Android Kit tar utgangspunkt i startkoden til appene mine, abonnementer inkludert, og følger fire steg helt fram til App Store, i ditt eget tempo. Kobler du til RevenueCat med denne nøkkelen, finner du hele oppsettet i RevenueCat og in-app-abonnement på iOS.
Forbereder du din første lansering, ta den gratis diagnosen: den forteller deg hva som faktisk stopper deg, og sender deg sjekklisten min mot avvisning fra Apple. Siden publisere en app på App Store går gjennom hvert steg, fra appsiden til godkjenning.
Ofte stilte spørsmål
Hvordan oppretter jeg en App Store Connect API-nøkkel?
Account Holder ber først om tilgang til API-et. Deretter åpner en Admin Users and Access, fanen Integrations, App Store Connect API, Team Keys. Hen klikker på Generate API Key, velger navn og rolle, genererer nøkkelen og laster ned .p8-filen.
Kan jeg laste ned en mistet .p8-nøkkel på nytt?
Nei. Filen kan bare lastes ned én gang, og Apple beholder ingen kopi. Tilbakekall den mistede nøkkelen, generer en ny og oppdater alle verktøy som brukte den.
Hvor finner jeg Issuer ID og Key ID?
I App Store Connect, menyen Users and Access, fanen Integrations. Issuer ID vises øverst på siden. Key ID står i listen over aktive nøkler. En individuell nøkkel bruker ikke Issuer ID.
Hvilken rolle bør en nøkkel som brukes av Expo få?
Expo-guiden gir rollen Admin. Ifølge Apples rolletabell holder App Manager for å sende inn bygg og opprette sertifikater og profiler. Det er rollen til nøkkelen min, som jeg bruker til Expo-byggene mine.
Kan jeg endre rollen til en API-nøkkel?
Nei. Apple lar deg ikke endre verken navnet eller rollen til en nøkkel etter at den er opprettet. Tilbakekall den, og generer en ny med riktig rolle.
Utløper en App Store Connect API-nøkkel?
Apples sider nevner ingen utløpsdato for nøkkelen, bare tilbakekalling. Det er tokenene som signeres med den som utløper, etter maks 20 minutter for de fleste forespørsler.

