# Sertifikat developer iOS: provisioning profile dan Expo

> Sertifikat membuktikan siapa penanda tangan app, provisioning profile menentukan app dan iPhone-nya. EAS di Expo mengurus keduanya.

Halaman asli: [Sertifikat developer iOS: provisioning profile dan Expo](https://devoria.fr/id/blog/sertifikat-developer-ios-provisioning-profile-expo)
Penulis: [Mehdi Azizi](https://devoria.fr/id/mehdi-azizi)
Terbit: 2026-11-04
Revisi konten terakhir: 2026-11-04


Sertifikat developer iOS membuktikan siapa yang menandatangani app kamu. Provisioning profile menghubungkan sertifikat itu dengan satu app tertentu dan menentukan di mana app itu boleh berjalan. **Dengan Expo, kamu hampir tidak pernah perlu membuatnya secara manual: EAS membuat, menyimpan, dan memperbaruinya saat kamu menjalankan build.**

Tetap saja, memahami fungsi tiap file itu berguna. Saat suatu hari build menolak terpasang atau pengiriman macet, pengetahuan inilah yang menghemat satu hari kerja kamu. Panduan ini membahas keempat elemen, masa berlakunya, batasan dari Apple, dan error yang sering muncul, lengkap dengan solusinya masing-masing.

Saya memublikasikan app iOS saya dengan Expo dan EAS, termasuk Solys dan TradaZen. Alur lengkapnya ada di [memublikasikan app iOS tanpa Mac](https://devoria.fr/id/blog/publish-aplikasi-ios-tanpa-mac-expo-eas). Di sini, kita bongkar mesin penandatanganan.

## Kenapa Apple mewajibkan tanda tangan

App iOS harus ditandatangani agar bisa dipasang di iPhone atau dikirim ke App Store Connect. Tanda tangan menjamin bahwa app berasal dari developer yang dikenal Apple dan tidak ada yang mengubahnya sejak itu.

Untuk App Store, ada satu detail yang menenangkan. Menurut [catatan teknis TN3161 dari Apple](https://developer.apple.com/documentation/technotes/tn3161-inside-code-signing-certificates), App Store memeriksa bahwa sertifikat distribusi kamu valid saat pengiriman, lalu menandatangani ulang app tersebut, sehingga app tidak lagi bergantung pada tanggal kedaluwarsa sertifikat kamu. **Jadi sertifikat kamu harus valid saat pengiriman, bukan sepanjang umur app.**

## Empat elemen yang perlu kamu ketahui

[Dokumentasi Expo tentang kredensial](https://docs.expo.dev/app-signing/app-credentials/) menyebut tiga untuk iOS: sertifikat distribusi, profil, dan kunci push notification. Saya menambahkan App ID, karena tanpanya tidak ada profil.

### Sertifikat distribusi

Ini tanda tangan kamu sebagai developer. [Bantuan Apple tentang sertifikat](https://developer.apple.com/help/account/certificates/certificates-overview) membedakan dua jenis:

- **Apple Development** dipakai untuk menjalankan app di perangkatmu selama pengembangan. Sertifikat ini milik satu orang.
- **Apple Distribution** dipakai untuk mendistribusikan ke perangkat uji yang ditentukan atau mengirim ke App Store Connect. Sertifikat ini milik tim, dan hanya pemilik akun atau admin yang bisa membuatnya.

Sertifikat distribusi tidak terikat pada app tertentu: satu sertifikat menandatangani semua app kamu. Sertifikat ini disertai private key, dan kunci itulah yang memungkinkan penandatanganan. Menurut TN3161, sertifikat Apple umumnya berlaku satu tahun sejak dibuat.

### App ID

App ID mengidentifikasi app kamu di dalam profil. Isinya adalah bundle identifier kamu, misalnya `com.example.myapp` (contoh fiktif). Menurut [bantuan Apple](https://developer.apple.com/help/account/identifiers/register-an-app-id), App ID juga memuat daftar capability yang diizinkan: push notification, App Groups, Sign in with Apple…

Di Expo, ini adalah field `ios.bundleIdentifier` di konfigurasi kamu. **Pilih sekali untuk selamanya**: nilainya harus sama di mana pun, baik di konfigurasi maupun di App Store Connect. App ID tidak kedaluwarsa. Dan menurut [dokumentasi Expo tentang capability iOS](https://docs.expo.dev/build-reference/ios-capabilities/), EAS menyinkronkan capability-nya dengan konfigurasi kamu di setiap build.

### Provisioning profile

Profil adalah penghubungnya. Isinya satu App ID, satu sertifikat, dan, tergantung jenisnya, daftar perangkat yang diizinkan. Ada tiga jenis yang relevan untuk kamu:

- **Development**: app uji kamu di perangkat yang sudah terdaftar.
- **Ad hoc**: build yang bisa dipasang di daftar perangkat tertentu, masing-masing dikenali lewat UDID-nya. Inilah "internal distribution" di EAS.
- **App Store**: untuk App Store Connect dan TestFlight. Profil ini tidak berisi daftar perangkat, seperti dijelaskan [catatan TN3125](https://developer.apple.com/documentation/technotes/tn3125-inside-code-signing-provisioning-profiles).

Setiap profil punya tanggal kedaluwarsa: umumnya tidak lebih dari satu tahun menurut Apple, 12 bulan menurut Expo.

### Kunci push notification (APNs)

Kunci APNs mengizinkan server kamu, atau server Expo, mengirim notifikasi ke app kamu. Bentuknya file .p8 yang hanya bisa diunduh sekali: [Apple tidak menyimpannya](https://developer.apple.com/help/account/keys/create-a-private-key) di akun kamu. Satu kunci bisa dipakai untuk semua app kamu, dan [kunci ini tidak pernah kedaluwarsa](https://developer.apple.com/support/expiration/).

## Tabel ringkasan

| Elemen                | Fungsi                  | Masa berlaku       | Siapa yang mengelola di Expo |
| --------------------- | ----------------------- | ------------------ | ---------------------------- |
| Sertifikat distribusi | Menandatangani build    | Umumnya satu tahun | EAS, setelah login           |
| App ID                | Mengidentifikasi app    | Tidak kedaluwarsa  | Kamu, lalu EAS               |
| Profil App Store      | Mengirim ke Apple       | Hingga 12 bulan    | EAS                          |
| Profil ad hoc         | Memasang di iPhone kamu | Hingga 12 bulan    | EAS dan perangkat kamu       |
| Kunci push APNs       | Mengirim notifikasi     | Tidak kedaluwarsa  | EAS atau kamu                |
| Profil akun gratis    | Menguji lewat Xcode     | 7 hari             | Xcode, bukan EAS             |

"Kamu, lalu EAS": kamu memilih bundle identifier, EAS mengurus capability-nya. "EAS dan perangkat kamu": kamu mendaftarkan setiap iPhone uji, EAS membuat profilnya. Baris terakhir berlaku untuk akun Apple gratis: menurut [bantuan Apple tentang akun](https://developer.apple.com/help/account/basics/about-your-developer-account), profilnya kedaluwarsa 7 hari setelah dibuat.

## Batasan Apple yang perlu kamu ketahui

- **Sertifikat distribusi**: sangat sedikit per akun. Bantuan Apple menyebut hanya satu per jenis distribusi per tim, sedangkan tabel Expo menyebut batas 2. Ingat aturannya: **jangan membuat sertifikat baru di setiap build atau di setiap komputer.**
- **Kunci APNs**: maksimal 2 per akun, menurut Expo.
- **Profil**: tidak ada batas, menurut Expo.
- **Perangkat**: hingga 100 per keluarga produk per tahun keanggotaan, menurut [bantuan Apple tentang perangkat](https://developer.apple.com/help/account/devices/devices-overview). Menonaktifkan perangkat tidak mengosongkan slot. Hitungan kembali ke 100 di awal tahun keanggotaan berikutnya, jika kamu menghapus perangkat tersebut.

## Apa yang dilakukan EAS untuk kamu

Menurut [halaman Expo tentang managed credentials](https://docs.expo.dev/app-signing/managed-credentials/), build iOS pertama kamu akan menawarkan untuk membuat apa yang belum ada. Kamu login ke akun Apple Developer, EAS membuat sertifikat distribusi, profil, dan kunci push, lalu menyimpannya di servernya. Build berikutnya memakainya kembali.

Tiga hal penting:

- **Password Apple kamu tetap di komputer kamu.** [Halaman keamanan Expo](https://docs.expo.dev/app-signing/security/) menjelaskan bahwa password tidak dikirim ke server mereka, dan kredensial yang disimpan dienkripsi.
- **`eas credentials` menampilkan semuanya**: sertifikat, profil, kunci push. Perintah ini juga bisa dipakai untuk mengganti atau menghapusnya.
- **Menghapus di EAS tidak menghapus di Apple.** Untuk mengosongkan slot, kamu harus melakukan revoke di portal Apple.

Kamu juga bisa memegang kendali sendiri dengan kredensial lokal: file `credentials.json` menunjuk ke sertifikat (.p12) dan profil (.mobileprovision) kamu. Expo meminta file-file ini ditambahkan ke `.gitignore`. Aturannya sama seperti untuk [API key di app Expo](https://devoria.fr/id/blog/kunci-api-rahasia-aplikasi-expo): rahasia tidak pernah masuk ke repositori.

## Error yang sering muncul dan cara mengatasinya

### Profil kedaluwarsa

Build ad hoc membawa profilnya sendiri: saat profil kedaluwarsa, app tidak bisa dibuka lagi di iPhone uji kamu. Sebaliknya, di App Store, Expo memastikan kedaluwarsa ini tidak berdampak apa pun pada app di produksi. **Solusinya: jalankan build lagi.** EAS membuat profil baru, atau kamu membuatnya sendiri dengan `eas credentials`. Setelah itu pasang ulang build baru di perangkat kamu.

Jangan tertukar dengan TestFlight: build TestFlight kedaluwarsa setelah 90 hari, apa pun sertifikatnya. Detailnya ada di [TestFlight untuk menguji app iPhone kamu](https://devoria.fr/id/blog/testflight-cara-tes-aplikasi-iphone).

### Sertifikat kedaluwarsa atau di-revoke

Apple jelas soal ini: jika keanggotaan kamu masih aktif, app yang sudah ada di App Store tidak terpengaruh. Tapi kamu tidak bisa lagi mengirim build yang ditandatangani dengan sertifikat itu. Build yang sudah dikirim tapi belum di-submit bisa ditandai Invalid Binary jika sertifikatnya sudah di-revoke. Dan [profil yang berisi sertifikat yang di-revoke menjadi tidak valid](https://developer.apple.com/help/account/certificates/revoke-a-certificate).

**Solusinya: buat sertifikat baru lewat `eas credentials` atau di build berikutnya**, lalu biarkan EAS membuat ulang profilnya. Dan jangan pernah me-revoke sertifikat yang masih berfungsi hanya karena refleks.

### Perangkat tidak ada di profil ad hoc

Link instalasi berfungsi di perangkat kamu, tapi tidak di iPhone seorang tester. Penyebabnya: [dokumentasi Expo tentang internal distribution](https://docs.expo.dev/build/internal-distribution/) menjelaskan bahwa hanya perangkat yang ada di profil saat build yang bisa memasang app.

Solusinya:

1. Daftarkan perangkat dengan `eas device:create`.
2. Jalankan build lagi dalam mode interaktif, dengan login ke akun Apple kamu, agar EAS memperbarui profilnya. Atau tandatangani ulang build yang ada dengan `eas build:resign`, tanpa mengompilasi ulang semuanya.
3. Di continuous integration, mode non-interaktif memakai ulang profil tanpa memperbarui daftarnya. Tambahkan opsi `--refresh-ad-hoc-provisioning-profile`.

Di akun baru atau yang baru diperpanjang, Apple bisa butuh 24 sampai 72 jam untuk memproses perangkat baru. Jadi build pertama yang menyertakannya bisa gagal: tunggu, lalu jalankan lagi.

### Batas sertifikat tercapai

Apple menolak membuat sertifikat distribusi baru. Sering kali ada sertifikat lama yang tertinggal: dibuat dari Xcode di Mac lain atau oleh layanan build lain. **Pakai ulang sertifikat yang ada jika kamu punya file .p12-nya. Jika tidak, revoke yang sudah tidak dipakai** di portal Apple. Revoke tidak memengaruhi app kamu yang sudah online, tapi membuat profil yang memuatnya menjadi tidak valid.

### "Provisioning profile doesn't include signing certificate"

Pesan dari Xcode ini berarti profil tidak berisi sertifikat yang private key-nya ada di komputer kamu. Penyebab umumnya: mencampur automatic signing di Xcode dengan kredensial EAS. **Pilih satu sumber kebenaran saja**: build EAS dengan managed credentials, atau kredensial lokal, tapi jangan keduanya.

### Notifikasi mati setelah kunci di-revoke

Jika kamu me-revoke kunci APNs, Expo mengingatkan bahwa semua app yang memakainya tidak akan menerima notifikasi lagi. Buat kunci baru dan unggah dengan `eas credentials`. Token Expo Push pengguna kamu tidak berubah.

### Capability ditambahkan, profil tidak valid

Mengaktifkan layanan seperti push notification atau App Groups [membuat profil tidak valid](https://developer.apple.com/help/account/provisioning-profiles/edit-download-or-delete-profiles): profil harus dibuat ulang. Dengan EAS, sinkronisasi capability terjadi di setiap build. Jika profil masih ditolak, `eas credentials` bisa membuat profil baru.

## Langkah setelah penandatanganan

Build yang sudah ditandatangani hanyalah satu tahap. Halaman listing, screenshot, privasi, dan pengiriman untuk review dibahas lengkap di [memublikasikan aplikasi di App Store](https://devoria.fr/id/expertise/publikasi-aplikasi-di-app-store). Kalau kamu belum punya keanggotaan, mulai dari [akun developer Apple](https://devoria.fr/id/blog/biaya-akun-developer-apple-2026). Dan untuk memahami kenapa saya menyarankan Expo untuk pemula, baca [React Native dan Expo untuk app mobile](https://devoria.fr/id/expertise/aplikasi-mobile-react-native-expo).

## Kalau kamu sedang menyiapkan publikasi pertama

Sebelum pengiriman pertama, lakukan [diagnostik gratis](https://devoria.fr/id/diagnostic): diagnostik ini memberi tahu apa yang benar-benar menghambat proyek kamu dan mengirimkan checklist anti-penolakan Apple saya.

Untuk membangun app, memasang langganan, dan memublikasikannya tanpa bergulat dengan penandatanganan, [iOS & Android Kit](https://devoria.fr/id/kits/ios) memandu alurnya dalam empat tahap dengan Starter Code dari app saya, sesuai ritme kamu.

## Pertanyaan umum

### Apa itu provisioning profile?

Ini file yang mengizinkan app kamu berjalan atau dikirim ke Apple. File ini menghubungkan App ID, sertifikat, dan, tergantung jenisnya, daftar perangkat. Profil App Store tidak berisi perangkat apa pun, sedangkan profil ad hoc mencantumkan beberapa perangkat.

### Apakah sertifikat developer iOS gratis?

Tidak ada biaya terpisah: sertifikat distribusi sudah termasuk dalam Apple Developer Program, seharga 99 $ per tahun. Dengan akun Apple gratis, Xcode mengizinkan kamu menguji di maksimal 3 perangkat, tapi profilnya kedaluwarsa setelah 7 hari dan publikasi tidak mungkin dilakukan.

### Berapa lama sertifikat distribusi Apple berlaku?

Umumnya satu tahun sejak dibuat, menurut Apple. Provisioning profile juga berlaku maksimal 12 bulan. Sementara itu, kunci push notification tidak pernah kedaluwarsa.

### Apa yang terjadi jika sertifikat distribusi saya kedaluwarsa?

Tidak ada dampak pada app kamu yang sudah ada di App Store, selama keanggotaan kamu masih aktif. Kamu hanya tidak bisa lagi mengirim build baru yang ditandatangani dengan sertifikat itu. Dengan EAS, sertifikat baru dibuat di build berikutnya atau lewat `eas credentials`.

### Apakah perlu Mac untuk membuat sertifikat iOS?

Tidak, jika kamu memakai EAS. Kamu login ke akun Apple dari command line, lalu EAS membuat sertifikat dan profil, baik di Windows maupun Linux. Tanpa EAS, cara klasiknya lewat Xcode atau Keychain Access di Mac.

### Berapa banyak perangkat yang bisa dimuat profil ad hoc?

Akun kamu bisa mendaftarkan hingga 100 iPhone per tahun keanggotaan, dan jumlah yang sama untuk setiap keluarga perangkat lainnya. Perangkat yang dinonaktifkan tetap dihitung. Untuk menguji dengan lebih banyak orang, gunakan TestFlight.


## Proyekmu

[Review Kit](https://devoria.fr/id/kits/app-review): Checklist review App Store saya, penolakan Apple yang sudah saya perbaiki, checklist Google Play, dan tiga skill Claude Code. Rp 999.000.

[iOS & Android Kit](https://devoria.fr/id/kits/ios): Bikin app iPhone dan Android kamu dengan Claude Code: kode awal dari app-app saya, langkah demi langkah sampai ke store, dan semua kit. Rp 1.999.000.

[Diagnosis: apa yang memisahkanmu dari app iPhone-mu](https://devoria.fr/id/diagnostic): 7 pertanyaan, 60 detik: kamu tahu apa yang benar-benar menghambatmu merilis app iPhone, jalurmu dalam 4 tahap, dan kit yang cocok untukmu.
