API key App Store Connect (.p8): cara membuat dan memakainya
Oleh Mehdi Azizi
Terbit , 10 mnt
API key App Store Connect (.p8) hanya bisa diunduh sekali. Role, Issuer ID, Key ID, pencabutan, dan pemakaiannya dengan Expo, fastlane, atau script.
API key App Store Connect memungkinkan sebuah tool, seperti EAS, fastlane, RevenueCat, atau script buatanmu sendiri, bertindak atas akunmu tanpa password dan tanpa autentikasi dua faktor. Apple menyimpan bagian publik key, dan kamu mengunduh bagian privatnya, sebuah file .p8, hanya sekali. Dengan file ini, Issuer ID, dan Key ID, kamu menandatangani token yang berlaku paling lama 20 menit untuk sebagian besar request.
Aku memublikasikan app iOS-ku, termasuk TradaZen dan Nolera, dengan Expo. Satu team key dengan role App Manager kupakai untuk RevenueCat, build Expo-ku, dan sebuah tool command line yang mengedit halaman app-ku. Panduan ini mengikuti halaman Apple, Expo, dan fastlane yang kubaca ulang pada 3 November 2026. Jangan tertukar dengan key layanan yang diselipkan di kode app: yang itu dibahas di API key rahasia di app Expo.
Apa fungsi API key App Store Connect
Menurut dokumentasi Apple, App Store Connect API mewajibkan token JWT untuk setiap request. Kamu membuat dan menandatanganinya dengan private key-mu. Key ini hanya untuk API tersebut: kamu tidak bisa memakainya untuk layanan Apple lain.
Kegunaannya bisa diringkas dalam satu kalimat: tidak ada orang yang perlu menyetujui login. Apple ID-mu terganjal autentikasi dua faktor, dan itu memblokir semua otomatisasi. Panduan EAS Submit iOS menunjukkan dampaknya untuk pengiriman app Expo.
Sebelum mulai: minta akses ke API
Key pertama tidak bisa langsung dibuat. Bantuan App Store Connect jelas soal ini: Account Holder harus lebih dulu meminta akses ke API. Dia membuka Users and Access, klik Integrations, lalu Request Access. Apple meninjau permintaan itu kasus per kasus.
Account Holder adalah orang yang mendaftarkan akun. Kalau kamu pemula, itu kamu sendiri: panduan akun developer Apple menjelaskan pendaftarannya.
Team key atau individual key
Apple menawarkan dua jenis key. Ini perbedaannya, diambil dari dokumentasi dan bantuan App Store Connect:
| Kriteria | Team key | Individual key |
|---|---|---|
| Siapa yang bisa membuatnya | Account Holder atau Admin | Hampir semua pengguna |
| App yang bisa diakses | Semua, tanpa kecuali | App milik pengguna itu |
| Hak akses | Role yang dipilih | Hak milik pengguna itu |
| Jumlah key | Beberapa | Satu aktif per orang |
| Sertifikat dan profile | Ya, tergantung role | Tidak |
| Penjualan, keuangan, notaryTool | Tergantung role | Tidak |
| Field token | iss = Issuer ID | sub = user |
"Hampir semua pengguna" artinya, menurut Apple: Account Holder, Admin, App Manager, Customer Support, Developer, dan Marketing, kecuali kalau Admin atau Account Holder mencabut hak mereka untuk membuat individual key.
Untuk Expo atau fastlane, pilih team key. Individual key tidak punya akses ke endpoint provisioning, yaitu yang membuat sertifikat dan profile. Dokumentasi fastlane menegaskannya: team key wajib untuk semua akses yang berkaitan dengan provisioning.
Role apa yang diberikan ke key-mu
Team key mengakses semua app di akun, apa pun role-nya. Role menentukan apa yang bisa dilakukannya. Apple memperingatkan bahwa key Admin bisa membuat dan menghapus pengguna: berikan role terkecil yang mencukupi kebutuhanmu. Hak akses di bawah ini diambil dari tabel role Apple.
| Kegunaan key | Role yang mengizinkannya |
|---|---|
| Mengirim build | Admin, App Manager, Developer |
| Mengelola build TestFlight | Admin, App Manager |
| Membuat sertifikat dan profile | Admin, App Manager |
| Mengirim app untuk review | Admin, App Manager |
| Mengimpor produk dan harga (RevenueCat) | Minimal App Manager |
| Membuat team key lain | Admin |
Baris RevenueCat berasal dari dokumentasinya. Sementara panduan Expo memberi role Admin ke key. Di app-ku, role App Manager sudah cukup: EAS membuat distribution profile dengannya, dan RevenueCat mengimpor produk.
Setelah key dibuat, kamu tidak bisa lagi mengubah nama maupun role-nya. Untuk mengubahnya, kamu harus mencabutnya lalu membuat yang baru.
Membuat team key, langkah demi langkah
Kamu perlu akun Admin atau Account Holder. Menurut Apple:
- Buka Users and Access, lalu tab Integrations.
- Pilih App Store Connect API di kolom kiri, lalu tab Team Keys.
- Klik Generate API Key, atau tombol +.
- Beri nama key. Nama ini hanya untukmu, bukan bagian dari key. Namai sesuai tool yang akan memakainya.
- Pilih role di bawah Access, lalu klik Generate.
- Unduh private key lewat link Download API Key.
Link unduhan hilang begitu kamu mengunduh file, dan Apple tidak menyimpan salinannya. Simpan
.p8sebelum menutup halaman.
Lalu catat dua identifier. Menurut halaman Apple soal token, Issuer ID tampil di bagian atas halaman Integrations, dengan tombol Copy. Key ID muncul di daftar key aktif: arahkan kursor ke sana untuk memunculkan Copy Key ID. Issuer ID sama untuk semua team key di akun. Key ID unik untuk tiap key.
Untuk individual key, caranya lebih singkat: buka profil penggunamu, gulir ke Individual API Key, lalu klik Generate API Key. Unduhannya juga hanya sekali.
Menyimpan file .p8
Apple meminta key diperlakukan seperti password: jangan dibagikan, jangan disimpan di repository kode, jangan pernah dimasukkan ke kode app. Rutinitasku:
- Folder di luar project, atau secret manager dari tool CI-mu.
- Folder key di
.gitignore-mu, kalau file harus berada di project selama proses pengiriman. - Permission ketat. Sebuah tool command line untuk App Store Connect menolak
.p8-ku selama file itu masih bisa dibaca akun lain.chmod 600menyelesaikan masalahnya. - Satu key per tool. Apple memungkinkan kamu membuat beberapa key, dengan role pilihanmu.
Poin terakhir ini tidak kuterapkan di awal. Key App Manager-ku dipakai sekaligus untuk RevenueCat, build, dan tool halaman app-ku. Kalau aku harus mencabutnya, tiga tool mati bersamaan. Kalau bisa mengulang, aku akan membuat satu key per tool, supaya bisa mematikan satu tanpa mengganggu yang lain.
Memakainya dengan Expo
Tiga cara memberikan key ke EAS:
- Biarkan EAS yang mengelolanya.
eas credentials --platform iosbisa membuat key dan menyimpannya di server Expo. Ini jalan paling mudah. - Deklarasikan di
eas.json. ProfilesubmitmenerimaascApiKeyPath,ascApiKeyIssuerId, danascApiKeyId. Menurut referensi eas.json, field ini menerima environment variable, seperti$ASC_API_KEY_PATH. - Kirim lewat environment. Repository EAS CLI mendokumentasikan
EXPO_ASC_API_KEY_PATH,EXPO_ASC_KEY_ID, danEXPO_ASC_ISSUER_ID. Untuk individual key, Issuer ID dihilangkan.
Ada satu batasan untuk build: Expo menjelaskan bahwa API resmi tidak bisa menautkan App Group, Merchant ID, atau container CloudKit. Untuk itu kamu perlu login dengan Apple ID-mu, secara lokal. Aku mengalaminya di Nolera dengan app group untuk widget-nya: key mengaktifkan capability, tapi tidak menautkan grupnya. Aku melakukan penautan itu di portal developer Apple. Kalau sinkronisasi capability macet, EXPO_NO_CAPABILITY_SYNC=1 mematikannya, dan kamu mengaktifkan capability sendiri di app identifier. Penandatanganan build dijelaskan di sertifikat dan provisioning profile iOS.
Memakainya dengan fastlane
fastlane membaca key dari file JSON. Field key_id, issuer_id, dan key (isi .p8) wajib ada. duration dan in_house opsional. Nilai contoh:
{
"key_id": "XXXXXXXXXX",
"issuer_id": "your-issuer-id",
"key": "-----BEGIN PRIVATE KEY-----\nMIGT...\n-----END PRIVATE KEY-----",
"duration": 1200,
"in_house": false
}
Lalu kamu berikan file ini ke sebuah action, misalnya fastlane pilot distribute --api_key_path fastlane/cle.json. Di Fastfile, action app_store_connect_api_key menerima key_id, issuer_id, dan key_filepath. Durasi sesi tidak lebih dari 1.200 detik, yaitu 20 menit. Tidak semua action mendukungnya: fastlane misalnya menyebutkan bahwa produce dan pem tidak berfungsi dengan API key.
Memakainya di script buatanmu sendiri
Tanpa tool, kamu membuat token sendiri. Apple menetapkan resepnya:
- Header:
algbernilaiES256,kidbernilai Key ID-mu,typbernilaiJWT. - Payload, team key:
iss, Issuer ID-mu;iat, waktu pembuatan;exp, waktu kedaluwarsa;aud, yang bernilaiappstoreconnect-v1. - Payload, individual key:
subbernilaiusersebagai gantiiss. - Durasi: lebih dari 20 menit, Apple menolak token untuk sebagian besar request.
Di Python, dengan library PyJWT dan dependency kriptografinya, diinstal dengan pip install pyjwt[crypto] menurut dokumentasinya. Di terminal Mac, pakai tanda kutip: pip install "pyjwt[crypto]", kalau tidak zsh menolak tanda kurung siku.
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)
Lalu kirim token di header Authorization, seperti contoh dari Apple:
curl -H "Authorization: Bearer $TOKEN" "https://api.appstoreconnect.apple.com/v1/apps"
Aku menjalankan script ini pada 3 November 2026 dengan key sekali pakai yang dibuat di komputerku: header dan payload token sesuai halaman Apple, dan tanda tangan ES256 terverifikasi. Aku tidak mengirimkannya ke API Apple dengan key tes ini, karena key itu tidak ada di Apple. Pakai ulang token yang sama selama masih berlaku: Apple menyarankannya demi performa yang lebih baik.
Mencabut key
Cabut key begitu key hilang, bocor, atau tidak dipakai lagi oleh tool mana pun. Menurut bantuan App Store Connect, dengan akun Account Holder atau Admin:
- Buka Users and Access, lalu Integrations.
- Pilih Team Keys, atau Individual Keys, lalu klik Edit.
- Centang key yang akan dicabut, lalu Revoke Key.
- Konfirmasi dengan Revoke.
Key yang sudah dicabut tidak bisa diaktifkan lagi. Apple menampilkannya selama 30 hari di bawah Revoked. Setiap tool yang memakainya akan gagal autentikasi. Dengan Expo, pesannya "App Store Connect rejected the API authentication credentials". Pesan ini dan kegagalan pengiriman lainnya dijelaskan di error pengiriman dengan EAS dan cara memperbaikinya. Kalau key tidak bocor, siapkan key baru sebelum mematikan yang lama. Kalau bocor, Apple meminta kamu mencabutnya segera.
Untuk individual key milikmu sendiri: profilmu, Individual API Key, lalu Revoke.
Checklist key .p8-ku
- Account Holder sudah meminta akses ke API.
- Key-nya team key kalau dipakai untuk build atau profile.
- Role-nya yang terkecil yang mencukupi kebutuhan, dan namanya menyebut tool yang memakainya.
.p8disimpan di luar repository, dengan permission ketat dan salinan cadangan terenkripsi.- Issuer ID dan Key ID dicatat terpisah, tanpa file-nya.
- Tiap tool punya key sendiri, supaya bisa mencabut satu saja.
Mengotomatiskan publikasi tanpa membahayakan key-mu
Key hanyalah satu bagian dari perjalanan. iOS & Android Kit berangkat dari starter code app-ku, termasuk langganan, dan mengikuti empat tahap sampai ke App Store, sesuai ritmemu. Kalau kamu menyambungkan RevenueCat dengan key ini, setup lengkapnya ada di RevenueCat dan langganan in-app iOS.
Kalau kamu sedang menyiapkan rilis pertamamu, ikuti diagnostik gratisnya: diagnostik ini memberi tahu apa yang benar-benar menghambatmu dan mengirimkan checklist anti-penolakan Apple milikku. Halaman memublikasikan aplikasi di App Store membahas setiap tahap, dari halaman app sampai disetujui.
Pertanyaan umum
Bagaimana cara membuat API key App Store Connect?
Account Holder lebih dulu meminta akses ke API. Lalu seorang Admin membuka Users and Access, tab Integrations, App Store Connect API, Team Keys. Dia klik Generate API Key, memilih nama dan role, membuat key, lalu mengunduh file .p8.
Apakah key .p8 yang hilang bisa diunduh ulang?
Tidak. File hanya bisa diunduh sekali, dan Apple tidak menyimpan salinannya. Cabut key yang hilang, lalu buat yang baru dan perbarui setiap tool yang memakainya.
Di mana menemukan Issuer ID dan Key ID?
Di App Store Connect, menu Users and Access, tab Integrations. Issuer ID tampil di bagian atas halaman. Key ID ada di daftar key aktif. Individual key tidak memakai Issuer ID.
Role apa yang diberikan ke key yang dipakai Expo?
Panduan Expo memberi role Admin. Menurut tabel role Apple, App Manager sudah cukup untuk mengirim build serta membuat sertifikat dan profile. Itu role key-ku, yang kupakai untuk build Expo-ku.
Apakah role API key bisa diubah?
Tidak. Apple tidak mengizinkan perubahan nama maupun role key setelah dibuat. Cabut key itu, lalu buat yang baru dengan role yang tepat.
Apakah API key App Store Connect bisa kedaluwarsa?
Halaman Apple tidak menyebutkan masa kedaluwarsa key, hanya pencabutannya. Yang kedaluwarsa adalah token yang ditandatangani dengannya, paling lama setelah 20 menit untuk sebagian besar request.

