# API ključ App Store Connect (.p8): ustvarjanje in uporaba

> API ključ App Store Connect (.p8) lahko preneseš samo enkrat. Vloga, Issuer ID, Key ID, preklic in uporaba z Expo, fastlane ali lastno skripto.

Izvirna stran: [API ključ App Store Connect (.p8): ustvarjanje in uporaba](https://devoria.fr/sl/blog/api-kljuc-app-store-connect-p8)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-11-04
Zadnja revizija vsebine: 2026-11-04


API ključ App Store Connect omogoča orodju, kot so EAS, fastlane, RevenueCat ali tvoja lastna skripta, da deluje v tvojem računu brez tvojega gesla in brez dvostopenjskega preverjanja. **Apple obdrži javno polovico ključa, ti pa zasebno polovico, datoteko `.p8`, preneseš samo enkrat.** S to datoteko, z Issuer ID in s Key ID podpisuješ žetone, ki za večino zahtev veljajo največ 20 minut.

Svoje iOS aplikacije, med njimi TradaZen in Nolera, objavljam z Expo. Ekipni ključ z vlogo App Manager uporabljam za RevenueCat, za svoje Expo builde in za orodje v ukazni vrstici, s katerim urejam strani aplikacij. Ta vodič sledi stranem Appla, Expa in fastlana, ki sem jih ponovno prebral 3. novembra 2026. Ne zamenjaj ga s ključi storitev, ki jih vstaviš v kodo aplikacije: o teh govori članek [skrivni API ključ v aplikaciji Expo](https://devoria.fr/sl/blog/skrivni-api-kljuc-aplikacija-expo).

## Kaj počne API ključ App Store Connect

Po [Applovi dokumentaciji](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) API App Store Connect zahteva žeton JWT za vsako zahtevo. Ustvariš ga in podpišeš s svojim zasebnim ključem. Ključ služi samo temu API-ju: za druge Applove storitve ga ne moreš uporabiti.

Njegova prednost je povzeta v enem stavku: **nihče ne rabi potrjevati prijave.** Tvoj Apple ID se zatakne pri dvostopenjskem preverjanju, kar blokira vsako avtomatizacijo. Vodič [EAS Submit za iOS](https://devoria.fr/sl/blog/eas-submit-ios-objava-aplikacije-expo-app-store) pokaže, kaj to spremeni pri pošiljanju aplikacije Expo.

## Najprej: zaprosi za dostop do API-ja

Prvega ključa ne moreš ustvariti kar takoj. [Pomoč App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api) je jasna: **Account Holder mora najprej zaprositi za dostop do API-ja.** Odpre Users and Access, klikne Integrations in nato Request Access. Apple vsako prošnjo pregleda posebej.

Account Holder je oseba, ki je registrirala račun. Če šele začenjaš, si to ti: vodič [Applov razvijalski račun](https://devoria.fr/sl/blog/apple-developer-racun-cena) podrobno opiše registracijo.

## Ekipni ali osebni ključ

Apple ponuja dve vrsti ključev. Tu so razlike, povzete iz [dokumentacije](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api) in [pomoči App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api):

| Merilo                       | Ekipni ključ             | Osebni ključ          |
| ---------------------------- | ------------------------ | --------------------- |
| Kdo ga lahko ustvari         | Account Holder ali Admin | Skoraj vsak uporabnik |
| Dostopne aplikacije          | Vse, brez izjeme         | Tiste od uporabnika   |
| Pravice                      | Izbrana vloga            | Pravice uporabnika    |
| Število ključev              | Več                      | En aktiven na osebo   |
| Certifikati in profili       | Da, glede na vlogo       | Ne                    |
| Prodaja, finance, notaryTool | Glede na vlogo           | Ne                    |
| Polje v žetonu               | `iss` = Issuer ID        | `sub` = `user`        |

»Skoraj vsak uporabnik« po Applu pomeni: Account Holder, Admin, App Manager, Customer Support, Developer in Marketing, razen če jim je Admin ali Account Holder odvzel pravico do ustvarjanja osebnega ključa.

**Za Expo ali fastlane izberi ekipni ključ.** Osebni ključ nima dostopa do končnih točk za provisioning, tistih, ki ustvarjajo certifikate in profile. [Dokumentacija fastlana](https://docs.fastlane.tools/app-store-connect-api/) to potrjuje: ekipni ključi so obvezni za vsak dostop, povezan s provisioningom.

## Katero vlogo dati ključu

Ekipni ključ ima dostop do vseh aplikacij v računu, ne glede na vlogo. Vloga določa, kaj lahko počne. **Apple opozarja, da lahko ključ Admin ustvarja in briše uporabnike**: daj najmanjšo vlogo, ki pokrije tvojo uporabo. Spodnje pravice so iz [Applove tabele vlog](https://developer.apple.com/help/account/access/roles/).

| Uporaba ključa                       | Vloge, ki to omogočajo        |
| ------------------------------------ | ----------------------------- |
| Pošiljanje buildov                   | Admin, App Manager, Developer |
| Upravljanje buildov TestFlight       | Admin, App Manager            |
| Ustvarjanje certifikatov in profilov | Admin, App Manager            |
| Pošiljanje aplikacije v pregled      | Admin, App Manager            |
| Uvoz izdelkov in cen (RevenueCat)    | Najmanj App Manager           |
| Ustvarjanje drugih ekipnih ključev   | Admin                         |

Vrstica za RevenueCat je iz [njegove dokumentacije](https://www.revenuecat.com/docs/service-credentials/itunesconnect-app-specific-shared-secret/app-store-connect-api-key-configuration). Expov vodič pa ključu [dodeli vlogo Admin](https://github.com/expo/fyi/blob/main/creating-asc-api-key.md). Pri mojih aplikacijah zadošča vloga App Manager: EAS z njo ustvari distribucijske profile, RevenueCat pa uvozi izdelke.

Ko je ključ ustvarjen, [mu ne moreš več spremeniti ne imena ne vloge](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api). Če želiš spremembo, ga moraš preklicati in ustvariti novega.

## Ustvarjanje ekipnega ključa, korak za korakom

Potrebuješ račun Admin ali Account Holder. Po [Applu](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api):

1. **Odpri Users and Access**, nato zavihek Integrations.
2. **V levem stolpcu izberi App Store Connect API**, nato zavihek Team Keys.
3. **Klikni Generate API Key** ali gumb +.
4. **Ključu daj ime.** Služi samo tebi, ni del ključa. Poimenuj ga po orodju, ki ga bo uporabljalo.
5. **Pod Access izberi vlogo**, nato klikni Generate.
6. **Prenesi zasebni ključ** prek povezave Download API Key.

> Povezava za prenos izgine takoj, ko datoteko preneseš, Apple pa ne hrani nobene kopije. Shrani `.p8`, preden zapreš stran.

Nato si zapiši oba identifikatorja. Po [Applovi strani o žetonih](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests) **je Issuer ID prikazan na vrhu strani Integrations**, z gumbom Copy. Key ID se pojavi na seznamu aktivnih ključev: postavi miško nanj, da se prikaže Copy Key ID. Issuer ID je enak za vse ekipne ključe v računu. Key ID je lasten vsakemu ključu.

Pri osebnem ključu je krajše: odpri svoj uporabniški profil, se pomakni do Individual API Key in klikni Generate API Key. Tudi tu je prenos mogoč samo enkrat.

## Shranjevanje datoteke .p8

Apple zahteva, da s ključem ravnaš kot z geslom: **ne deli ga, ne shranjuj ga v repozitorij kode, nikoli ga ne vgradi v kodo aplikacije.** Moja rutina:

- **Mapa zunaj projekta** ali upravitelj skrivnosti v tvojem orodju za neprekinjeno integracijo.
- **Mapa s ključi v tvojem `.gitignore`**, če mora datoteka med pošiljanjem živeti v projektu.
- **Stroge pravice.** Orodje v ukazni vrstici za App Store Connect je zavračalo moj `.p8`, dokler so ga lahko brali drugi računi. `chmod 600` je težavo rešil.
- **En ključ na orodje.** Apple omogoča [ustvarjanje več ključev](https://developer.apple.com/documentation/appstoreconnectapi/creating-api-keys-for-app-store-connect-api), z vlogami po tvoji izbiri.

Zadnje točke na začetku nisem upošteval. Moj ključ App Manager hkrati služi RevenueCatu, mojim buildom in orodju za strani aplikacij. Če ga moram preklicati, padejo vsa tri orodja hkrati. **Če bi začel znova, bi ustvaril en ključ na orodje**, da bi lahko enega izklopil, ne da bi se dotaknil drugih.

## Uporaba z Expo

Trije načini, kako ključ predati EAS:

- **Prepusti ga EAS.** `eas credentials --platform ios` lahko ustvari ključ in ga hrani na Expovih strežnikih. To je najpreprostejša pot.
- **Navedi ga v `eas.json`.** Profil `submit` sprejme `ascApiKeyPath`, `ascApiKeyIssuerId` in `ascApiKeyId`. Po [referenci za eas.json](https://docs.expo.dev/eas/json/) ta polja sprejemajo okoljske spremenljivke, na primer `$ASC_API_KEY_PATH`.
- **Podaj ga prek okolja.** [Repozitorij EAS CLI](https://github.com/expo/eas-cli/blob/main/packages/eas-cli/README.md) dokumentira `EXPO_ASC_API_KEY_PATH`, `EXPO_ASC_KEY_ID` in `EXPO_ASC_ISSUER_ID`. Pri osebnem ključu Issuer ID izpustiš.

Omejitev, ki jo moraš poznati pri buildih: [Expo pojasnjuje](https://docs.expo.dev/build-reference/ios-capabilities/), da uradni API ne zna povezati App Group, Merchant ID ali vsebnika CloudKit. Takrat potrebuješ prijavo s svojim Apple ID, lokalno. To sem doživel pri Noleri s skupino aplikacij za njen widget: ključ je zmožnost vklopil, skupine pa ni povezal. To povezavo sem naredil v Applovem razvijalskem portalu. **Če sinhronizacija zmožnosti obtiči, jo `EXPO_NO_CAPABILITY_SYNC=1` izklopi**, zmožnost pa na identifikatorju aplikacije vklopiš sam. Podpisovanje buildov je podrobno opisano v članku [certifikat in provisioning profile za iOS](https://devoria.fr/sl/blog/certifikat-razvijalca-ios-provisioning-profile-expo).

## Uporaba s fastlane

[fastlane](https://docs.fastlane.tools/app-store-connect-api/) bere ključ iz datoteke JSON. Polja `key_id`, `issuer_id` in `key`, vsebina `.p8`, so obvezna. `duration` in `in_house` sta neobvezna. Izmišljene vrednosti:

```json
{
  "key_id": "XXXXXXXXXX",
  "issuer_id": "tvoj-issuer-id",
  "key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
  "duration": 1200,
  "in_house": false
}
```

To datoteko nato podaš akciji, na primer `fastlane pilot distribute --api_key_path fastlane/cle.json`. V Fastfile akcija `app_store_connect_api_key` sprejme `key_id`, `issuer_id` in `key_filepath`. Trajanje seje ne presega 1200 sekund, torej 20 minut. Vse akcije tega ne podpirajo: fastlane na primer navaja, da `produce` in `pem` z API ključem ne delujeta.

## Uporaba v lastni skripti

Brez orodja žeton narediš sam. [Apple določa recept](https://developer.apple.com/documentation/appstoreconnectapi/generating-tokens-for-api-requests):

- **Glava**: `alg` je `ES256`, `kid` je tvoj Key ID, `typ` je `JWT`.
- **Vsebina, ekipni ključ**: `iss`, tvoj Issuer ID; `iat`, čas nastanka; `exp`, čas poteka; `aud`, ki je `appstoreconnect-v1`.
- **Vsebina, osebni ključ**: `sub` je `user` namesto `iss`.
- **Trajanje**: če je daljše od 20 minut, Apple žeton za večino zahtev zavrne.

V Pythonu, s knjižnico PyJWT in njeno kriptografsko odvisnostjo, ki jo po [njeni dokumentaciji](https://pyjwt.readthedocs.io/en/stable/installation.html) namestiš z `pip install pyjwt[crypto]`. V terminalu na Macu uporabi narekovaje: `pip install "pyjwt[crypto]"`, sicer zsh zavrne oglate oklepaje.

```python
import time
import jwt

KEY_ID = "XXXXXXXXXX"
ISSUER_ID = "tvoj-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)
```

Nato ga pošlješ v glavi `Authorization`, kot v Applovem primeru:

```bash
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
```

To skripto sem zagnal 3. novembra 2026 z začasnim ključem, ustvarjenim na svojem računalniku: glava in vsebina žetona ustrezata Applovi strani, podpis ES256 pa se preveri. Z tem testnim ključem, ki pri Applu ne obstaja, ga nisem poslal na Applov API. **Isti žeton uporabljaj, dokler je veljaven**: Apple to priporoča zaradi boljše zmogljivosti.

## Preklic ključa

Ključ prekliči takoj, ko je izgubljen, ogrožen ali ga neko orodje ne uporablja več. Po [pomoči App Store Connect](https://developer.apple.com/help/app-store-connect/get-started/app-store-connect-api), z računom Account Holder ali Admin:

1. Odpri Users and Access, nato Integrations.
2. Izberi Team Keys ali Individual Keys, nato klikni Edit.
3. Označi ključe za preklic, nato Revoke Key.
4. Potrdi z Revoke.

**Preklicanega ključa ni mogoče nikoli več aktivirati.** [Apple ga prikazuje](https://developer.apple.com/documentation/appstoreconnectapi/revoking-api-keys) 30 dni pod Revoked. Vsako orodje, ki ga je uporabljalo, nato pri overjanju odpove. Pri Expu je sporočilo »[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)«. To sporočilo in druge napake pri pošiljanju razlaga članek [napake pri pošiljanju z EAS in njihovo odpravljanje](https://devoria.fr/sl/blog/eas-submit-ios-pogoste-napake). Če ključ ni ogrožen, pripravi novega, preden izklopiš starega. Če je, Apple zahteva takojšen preklic.

Za svoj osebni ključ: tvoj profil, Individual API Key, nato Revoke.

## Moj kontrolni seznam za ključ .p8

- Account Holder je zaprosil za dostop do API-ja.
- Ključ je ekipni, če služi buildom ali profilom.
- Njegova vloga je najmanjša, ki pokrije uporabo, ime pa pove, katero orodje ga uporablja.
- `.p8` je shranjen zunaj repozitorija, s strogimi pravicami in šifrirano varnostno kopijo.
- Issuer ID in Key ID sta zapisana posebej, brez datoteke.
- Vsako orodje ima svoj ključ, da lahko prekličeš samo enega.

## Avtomatiziraj objavo, ne da bi tvegal ključ

Ključ je le en del poti. [iOS & Android Kit](https://devoria.fr/sl/kits/ios) izhaja iz začetne kode mojih aplikacij, vključno z naročninami, in sledi štirim korakom do App Store, v tvojem tempu. Če s tem ključem povežeš RevenueCat, je celotna postavitev v članku [RevenueCat in naročnina v aplikaciji iOS](https://devoria.fr/sl/blog/revenuecat-narocnina-v-aplikaciji-ios).

Če pripravljaš svojo prvo objavo, [opravi brezplačno diagnostiko](https://devoria.fr/sl/diagnostic): pove ti, kaj te v resnici ovira, in ti pošlje moj kontrolni seznam proti Applovim zavrnitvam. Stran [objava aplikacije v App Store](https://devoria.fr/sl/expertise/objava-aplikacije-v-app-store) povzame vsak korak, od strani aplikacije do odobritve.

## Pogosta vprašanja

### Kako ustvarim API ključ App Store Connect?

Account Holder najprej zaprosi za dostop do API-ja. Nato Admin odpre Users and Access, zavihek Integrations, App Store Connect API, Team Keys. Klikne Generate API Key, izbere ime in vlogo, ustvari ključ in nato prenese datoteko `.p8`.

### Ali lahko izgubljen ključ .p8 ponovno prenesem?

Ne. Datoteko lahko preneseš samo enkrat, Apple pa ne hrani nobene kopije. Izgubljeni ključ prekliči, ustvari novega in posodobi vsako orodje, ki ga je uporabljalo.

### Kje najdem Issuer ID in Key ID?

V App Store Connect, meni Users and Access, zavihek Integrations. Issuer ID je prikazan na vrhu strani. Key ID je na seznamu aktivnih ključev. Osebni ključ ne uporablja Issuer ID.

### Katero vlogo dati ključu, ki ga uporablja Expo?

Expov vodič dodeli vlogo Admin. Po Applovi tabeli vlog App Manager zadošča za pošiljanje buildov ter ustvarjanje certifikatov in profilov. To je vloga mojega ključa, ki ga uporabljam za svoje Expo builde.

### Ali lahko spremenim vlogo API ključa?

Ne. Apple po ustvarjanju ne dovoli spremeniti ne imena ne vloge ključa. Prekliči ga in ustvari novega s pravo vlogo.

### Ali API ključ App Store Connect poteče?

Applove strani ne omenjajo nobenega poteka ključa, samo njegov preklic. Potečejo žetoni, podpisani z njim, za večino zahtev po največ 20 minutah.


## Tvoj projekt

[Review Kit](https://devoria.fr/sl/kits/app-review): Moj kontrolni seznam za pregled v App Store, moje popravljene zavrnitve Applea, seznam za Google Play in trije skilli za Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sl/kits/ios): Ustvari svojo aplikacijo za iPhone in Android s Claude Code: začetna koda mojih aplikacij, pot do trgovin in vsi kompleti. 99 €.

[Diagnoza: kaj te loči od tvoje aplikacije za iPhone](https://devoria.fr/sl/diagnostic): 7 vprašanj, 60 sekund: izveš, kaj te zares ovira pri objavi aplikacije za iPhone, dobiš pot v 4 korakih in komplet, ki ti ustreza.
