Klíč API App Store Connect (.p8): vytvoření a použití
Autor: Mehdi Azizi
Publikováno , 10 min
Klíč API App Store Connect (.p8) stáhneš jen jednou. Role, Issuer ID, Key ID, zrušení klíče a použití s Expo, fastlane nebo vlastním skriptem.
Klíč API App Store Connect umožňuje nástroji, jako je EAS, fastlane, RevenueCat nebo tvůj vlastní skript, pracovat s tvým účtem bez hesla a bez dvoufázového ověření. Veřejnou polovinu klíče si nechává Apple a soukromou polovinu, soubor .p8, si stáhneš jen jednou. S tímto souborem, Issuer ID a Key ID podepisuješ tokeny, které u většiny požadavků platí nejvýš 20 minut.
Své iOS aplikace, mezi nimi TradaZen a Nolera, publikuji přes Expo. Týmový klíč s rolí App Manager používám pro RevenueCat, pro buildy v Expo a pro nástroj příkazové řádky, kterým upravuji stránky aplikací. Tento návod vychází ze stránek Apple, Expo a fastlane, které jsem znovu prošel 3. listopadu 2026. Nepleť si ho s klíči služeb vloženými do kódu aplikace: ty řeší článek tajný API klíč v aplikaci Expo.
Co dělá klíč API App Store Connect
Podle dokumentace Apple vyžaduje API App Store Connect u každého požadavku token JWT. Vygeneruješ ho a podepíšeš svým soukromým klíčem. Klíč slouží jen pro toto API: pro jiné služby Apple ho použít nemůžeš.
Jeho výhoda se vejde do jedné věty: přihlášení nemusí potvrzovat žádný člověk. Tvoje Apple ID narazí na dvoufázové ověření, a to blokuje jakoukoli automatizaci. Návod EAS Submit pro iOS ukazuje, co to mění při odesílání aplikace z Expo.
Nejdřív: požádej o přístup k API
První klíč nevytvoříš hned. Nápověda App Store Connect je jasná: Account Holder musí nejdřív požádat o přístup k API. Otevře Users and Access, klikne na Integrations a pak na Request Access. Apple žádost posuzuje případ od případu.
Account Holder je člověk, který účet zaregistroval. Pokud začínáš, jsi to ty: registraci podrobně popisuje návod vývojářský účet Apple.
Týmový, nebo individuální klíč
Apple nabízí dva typy klíčů. Tady jsou jejich rozdíly podle dokumentace a nápovědy App Store Connect:
| Kritérium | Týmový klíč | Individuální klíč |
|---|---|---|
| Kdo ho může vygenerovat | Account Holder nebo Admin | Skoro každý uživatel |
| Dostupné aplikace | Všechny, bez výjimky | Aplikace daného uživatele |
| Oprávnění | Zvolená role | Oprávnění uživatele |
| Počet klíčů | Více | Jeden aktivní na osobu |
| Certifikáty a profily | Ano, podle role | Ne |
| Prodeje, finance, notaryTool | Podle role | Ne |
| Pole v tokenu | iss = Issuer ID | sub = user |
„Skoro každý uživatel“ podle Apple znamená: Account Holder, Admin, App Manager, Customer Support, Developer a Marketing, pokud jim Admin nebo Account Holder neodebral právo generovat individuální klíč.
Pro Expo nebo fastlane zvol týmový klíč. Individuální klíč nemá přístup k endpointům pro provisioning, tedy k těm, které vytvářejí certifikáty a profily. Dokumentace fastlane to potvrzuje: týmové klíče jsou nutné pro jakýkoli přístup související s provisioningem.
Jakou roli dát klíči
Týmový klíč má přístup ke všem aplikacím účtu bez ohledu na roli. Role určuje, co s nimi může dělat. Apple upozorňuje, že klíč s rolí Admin může vytvářet a mazat uživatele: dej nejnižší roli, která tvé použití pokryje. Oprávnění níže pocházejí z tabulky rolí Apple.
| Použití klíče | Role, které to umožňují |
|---|---|
| Odesílat buildy | Admin, App Manager, Developer |
| Spravovat buildy v TestFlight | Admin, App Manager |
| Vytvářet certifikáty a profily | Admin, App Manager |
| Odeslat aplikaci ke schválení | Admin, App Manager |
| Importovat produkty a ceny (RevenueCat) | Minimálně App Manager |
| Generovat další týmové klíče | Admin |
Řádek o RevenueCat pochází z jeho dokumentace. Návod Expo naopak klíči dává roli Admin. U mých aplikací stačí role App Manager: EAS s ní vytváří distribuční profily a RevenueCat importuje produkty.
Jakmile klíč vygeneruješ, už nemůžeš změnit jeho název ani roli. Pokud chceš změnu, musíš ho zrušit a vygenerovat nový.
Vytvoření týmového klíče krok za krokem
Potřebuješ účet s rolí Admin nebo Account Holder. Podle Apple:
- Otevři Users and Access a pak záložku Integrations.
- V levém sloupci zvol App Store Connect API a pak záložku Team Keys.
- Klikni na Generate API Key nebo na tlačítko +.
- Pojmenuj klíč. Název slouží jen tobě, není součástí klíče. Pojmenuj ho podle nástroje, který ho bude používat.
- Zvol roli v části Access a klikni na Generate.
- Stáhni soukromý klíč odkazem Download API Key.
Odkaz ke stažení zmizí, jakmile soubor stáhneš, a Apple si žádnou kopii neponechává. Ulož
.p8do bezpečí dřív, než stránku zavřeš.
Pak si poznamenej oba identifikátory. Podle stránky Apple o tokenech se Issuer ID zobrazuje nahoře na stránce Integrations s tlačítkem Copy. Key ID najdeš v seznamu aktivních klíčů: najeď na něj myší a objeví se Copy Key ID. Issuer ID je stejné pro všechny týmové klíče účtu. Key ID je pro každý klíč jiné.
U individuálního klíče je to kratší: otevři svůj uživatelský profil, sjeď k Individual API Key a klikni na Generate API Key. I tady jde stáhnout jen jednou.
Kam uložit soubor .p8
Apple žádá, abys s klíčem zacházel jako s heslem: nesdílej ho, neukládej ho do repozitáře a nikdy ho nevkládej do kódu aplikace. Můj postup:
- Složka mimo projekt, nebo správce tajných údajů ve tvém nástroji pro CI.
- Složka s klíči v
.gitignore, pokud musí soubor po dobu odesílání ležet v projektu. - Přísná oprávnění. Jeden nástroj příkazové řádky pro App Store Connect odmítal můj
.p8, dokud byl soubor čitelný pro jiné účty. Pomohlchmod 600. - Jeden klíč na nástroj. Apple umožňuje vygenerovat více klíčů s rolemi podle tvé volby.
Tenhle poslední bod jsem na začátku nedodržel. Můj klíč App Manager slouží zároveň pro RevenueCat, pro buildy i pro nástroj na stránky aplikací. Když ho budu muset zrušit, padnou tři nástroje najednou. Kdybych začínal znovu, vytvořil bych jeden klíč na každý nástroj, abych mohl jeden vypnout a ostatních se nedotknout.
Použití s Expo
Klíč můžeš EAS předat třemi způsoby:
- Nechat ho spravovat EAS.
eas credentials --platform iosumí klíč vytvořit a uložit na serverech Expo. Je to nejjednodušší cesta. - Zadat ho v
eas.json. ProfilsubmitpřijímáascApiKeyPath,ascApiKeyIssuerIdaascApiKeyId. Podle reference eas.json tato pole přijímají proměnné prostředí, třeba$ASC_API_KEY_PATH. - Předat ho přes prostředí. Repozitář EAS CLI dokumentuje
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_IDaEXPO_ASC_ISSUER_ID. U individuálního klíče Issuer ID vynecháš.
U buildů je dobré znát jedno omezení: Expo upozorňuje, že oficiální API neumí přiřadit App Group, Merchant ID ani kontejner CloudKit. Pak je potřeba přihlášení přes Apple ID, lokálně. Zažil jsem to u Nolery se skupinou aplikací pro její widget: klíč capability zapnul, ale skupinu nepřiřadil. To přiřazení jsem udělal na vývojářském portálu Apple. Pokud se synchronizace capabilities zasekne, vypne ji EXPO_NO_CAPABILITY_SYNC=1 a capability pak zapneš na identifikátoru aplikace sám. Podepisování buildů podrobně popisuje článek certifikát a provisioning profile pro iOS.
Použití s fastlane
fastlane čte klíč ze souboru JSON. Pole key_id, issuer_id a key, tedy obsah .p8, jsou povinná. duration a in_house jsou volitelná. Smyšlené hodnoty:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "your-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Tento soubor pak předáš akci, například fastlane pilot distribute --api_key_path fastlane/cle.json. Ve Fastfile přijímá akce app_store_connect_api_key parametry key_id, issuer_id a key_filepath. Doba relace nepřesáhne 1 200 sekund, tedy 20 minut. Ne všechny akce ho podporují: fastlane například uvádí, že produce a pem s klíčem API nefungují.
Použití ve vlastním skriptu
Bez nástroje si token vyrobíš sám. Apple určuje recept:
- Hlavička:
algjeES256,kidje tvoje Key ID,typjeJWT. - Obsah, týmový klíč:
iss, tvoje Issuer ID;iat, čas vytvoření;exp, čas vypršení;aud, které jeappstoreconnect-v1. - Obsah, individuální klíč: místo
issjesubs hodnotouuser. - Platnost: nad 20 minut Apple token u většiny požadavků odmítne.
V Pythonu s knihovnou PyJWT a její kryptografickou závislostí, kterou podle její dokumentace nainstaluješ příkazem pip install pyjwt[crypto]. V terminálu na Macu použij uvozovky: pip install "pyjwt[crypto]", jinak zsh hranaté závorky odmítne.
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)
Pak ho pošleš v hlavičce Authorization, jako v příkladu od Apple:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Tenhle skript jsem spustil 3. listopadu 2026 s jednorázovým klíčem vygenerovaným na svém počítači: hlavička i obsah tokenu odpovídají stránce Apple a podpis ES256 se dá ověřit. S tímto testovacím klíčem, který u Apple neexistuje, jsem ho do API Apple neposílal. Stejný token používej znovu, dokud platí: Apple to doporučuje kvůli lepšímu výkonu.
Zrušení klíče
Klíč zruš, jakmile ho ztratíš, je kompromitovaný nebo ho už žádný nástroj nepoužívá. Podle nápovědy App Store Connect, s účtem Account Holder nebo Admin:
- Otevři Users and Access a pak Integrations.
- Zvol Team Keys nebo Individual Keys a klikni na Edit.
- Zaškrtni klíče, které chceš zrušit, a pak Revoke Key.
- Potvrď tlačítkem Revoke.
Zrušený klíč už nikdy znovu neaktivuješ. Apple ho zobrazuje 30 dní v části Revoked. Každý nástroj, který ho používal, pak při ověření selže. U Expo zní zpráva „App Store Connect rejected the API authentication credentials“. Tuto zprávu i další chyby při odesílání vysvětluje článek chyby při odesílání přes EAS a jak je opravit. Pokud klíč kompromitovaný není, připrav nový dřív, než starý vypneš. Pokud ano, Apple žádá okamžité zrušení.
Pro vlastní individuální klíč: tvůj profil, Individual API Key a pak Revoke.
Můj checklist pro klíč .p8
- Account Holder požádal o přístup k API.
- Klíč je týmový, pokud slouží pro buildy nebo profily.
- Má nejnižší roli, která pokryje použití, a jeho název říká, který nástroj ho používá.
.p8je uložený mimo repozitář, s přísnými oprávněními a šifrovanou zálohou.- Issuer ID a Key ID jsou poznamenané zvlášť, bez souboru.
- Každý nástroj má svůj klíč, abys mohl zrušit jen jeden.
Automatizuj publikaci a klíč při tom neprozraď
Klíč je jen jedna část cesty. iOS & Android Kit vychází z výchozího kódu mých aplikací včetně předplatných a provede tě čtyřmi kroky až do App Store, vlastním tempem. Pokud tímto klíčem napojuješ RevenueCat, celé nastavení najdeš v článku RevenueCat a předplatné v iOS aplikaci.
Pokud chystáš své první vydání, udělej si bezplatnou diagnostiku: řekne ti, co tě opravdu brzdí, a pošle ti můj checklist proti zamítnutí od Apple. Stránka publikování aplikace v App Store prochází každý krok, od stránky aplikace po schválení.
Časté dotazy
Jak vytvořit klíč API App Store Connect?
Account Holder nejdřív požádá o přístup k API. Pak Admin otevře Users and Access, záložku Integrations, App Store Connect API, Team Keys. Klikne na Generate API Key, zvolí název a roli, vygeneruje klíč a stáhne soubor .p8.
Dá se ztracený klíč .p8 stáhnout znovu?
Ne. Soubor se stahuje jen jednou a Apple si žádnou kopii neponechává. Ztracený klíč zruš, vygeneruj nový a aktualizuj každý nástroj, který ho používal.
Kde najdu Issuer ID a Key ID?
V App Store Connect, v nabídce Users and Access, na záložce Integrations. Issuer ID se zobrazuje nahoře na stránce. Key ID je v seznamu aktivních klíčů. Individuální klíč Issuer ID nepoužívá.
Jakou roli dát klíči, který používá Expo?
Návod Expo uvádí roli Admin. Podle tabulky rolí Apple stačí App Manager k odesílání buildů i k vytváření certifikátů a profilů. Tuhle roli má můj klíč, který používám pro buildy v Expo.
Dá se změnit role klíče API?
Ne. Apple po vytvoření klíče neumožňuje změnit jeho název ani roli. Zruš ho a vygeneruj nový se správnou rolí.
Vyprší platnost klíče API App Store Connect?
Stránky Apple o vypršení klíče nic neuvádějí, jen o jeho zrušení. Vyprší tokeny, které jím podepíšeš, a to u většiny požadavků nejpozději po 20 minutách.

