# Klíč API App Store Connect (.p8): vytvoření a použití

> 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.

Původní stránka: [Klíč API App Store Connect (.p8): vytvoření a použití](https://devoria.fr/cs/blog/klic-api-app-store-connect-p8-vytvoreni-pouziti)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-11-04
Poslední revize obsahu: 2026-11-04


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](https://devoria.fr/cs/blog/tajny-api-klic-aplikace-expo).

## Co dělá klíč API App Store Connect

Podle [dokumentace Apple](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) 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](https://devoria.fr/cs/blog/eas-submit-ios-publikovat-expo-app-app-store) 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](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api) 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](https://devoria.fr/cs/blog/apple-developer-ucet-cena).

## Týmový, nebo individuální klíč

Apple nabízí dva typy klíčů. Tady jsou jejich rozdíly podle [dokumentace](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) a [nápovědy App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api):

| 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](https://docs.fastlane.tools/app-store-connect-api/) 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](https://developer.apple.com/help/account/access/roles/).

| 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](https://www.revenuecat.com/docs/service-credentials/itunesconnect-app-specific-shared-secret/app-store-connect-api-key-configuration). Návod Expo naopak klíči [dává roli Admin](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md). 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](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api). 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](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api):

1. **Otevři Users and Access** a pak záložku Integrations.
2. **V levém sloupci zvol App Store Connect API** a pak záložku Team Keys.
3. **Klikni na Generate API Key** nebo na tlačítko +.
4. **Pojmenuj klíč.** Název slouží jen tobě, není součástí klíče. Pojmenuj ho podle nástroje, který ho bude používat.
5. **Zvol roli** v části Access a klikni na Generate.
6. **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ž `.p8` do bezpečí dřív, než stránku zavřeš.

Pak si poznamenej oba identifikátory. Podle [stránky Apple o tokenech](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests) **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. Pomohl `chmod 600`.
- **Jeden klíč na nástroj.** Apple umožňuje [vygenerovat více klíčů](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) 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 ios` umí klíč vytvořit a uložit na serverech Expo. Je to nejjednodušší cesta.
- **Zadat ho v `eas.json`.** Profil `submit` přijímá `ascApiKeyPath`, `ascApiKeyIssuerId` a `ascApiKeyId`. Podle [reference eas.json](https://docs.expo.dev/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](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/README.md) dokumentuje `EXPO_ASC_API_KEY_PATH`, `EXPO_ASC_KEY_ID` a `EXPO_ASC_ISSUER_ID`. U individuálního klíče Issuer ID vynecháš.

U buildů je dobré znát jedno omezení: [Expo upozorňuje](https://docs.expo.dev/build-reference/ios-capabilities/), ž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](https://devoria.fr/cs/blog/ios-certifikat-vyvojare-provisioning-profile-expo).

## Použití s fastlane

[fastlane](https://docs.fastlane.tools/app-store-connect-api/) č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:

```json
{
  "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](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests):

- **Hlavička**: `alg` je `ES256`, `kid` je tvoje Key ID, `typ` je `JWT`.
- **Obsah, týmový klíč**: `iss`, tvoje Issuer ID; `iat`, čas vytvoření; `exp`, čas vypršení; `aud`, které je `appstoreconnect-v1`.
- **Obsah, individuální klíč**: místo `iss` je `sub` s hodnotou `user`.
- **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](https://pyjwt.readthedocs.io/en/stable/installation.html) 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.

```python
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:

```bash
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](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api), s účtem Account Holder nebo Admin:

1. Otevři Users and Access a pak Integrations.
2. Zvol Team Keys nebo Individual Keys a klikni na Edit.
3. Zaškrtni klíče, které chceš zrušit, a pak Revoke Key.
4. Potvrď tlačítkem Revoke.

**Zrušený klíč už nikdy znovu neaktivuješ.** [Apple ho zobrazuje](https://developer.apple.com/documentation/appstoreconnectapi/revoking-api-keys) 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](https://github.com/expo/eas-cli/blob/main/packages/build-tools/src/steps/utils/ios/AscApiClient.ts)“. 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](https://devoria.fr/cs/blog/eas-submit-ios-caste-chyby-oprava). 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á.
- `.p8` je 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](https://devoria.fr/cs/kits/ios) 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](https://devoria.fr/cs/blog/revenuecat-predplatne-ios-aplikace).

Pokud chystáš své první vydání, [udělej si bezplatnou diagnostiku](https://devoria.fr/cs/diagnostic): ř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](https://devoria.fr/cs/expertise/jak-vydat-aplikaci-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.


## Tvůj projekt

[Review Kit](https://devoria.fr/cs/kits/app-review): Můj checklist pro review v App Store, moje opravená zamítnutí od Applu, checklist pro Google Play a tři skilly pro Claude Code. 1 199 Kč.

[iOS & Android Kit](https://devoria.fr/cs/kits/ios): Vytvoř si aplikaci pro iPhone a Android s Claude Code: startovní kód mých aplikací, cesta až do obchodů a všechny kity. 2 399 Kč.

[Diagnostika: co tě dělí od tvé iPhone aplikace](https://devoria.fr/cs/diagnostic): 7 otázek, 60 sekund: zjistíš, co ti doopravdy brání vydat iPhone aplikaci, dostaneš cestu ve 4 krocích a kit přesně pro tebe.
