Build number App Store Connect: versi dan nomor build
Oleh Mehdi Azizi
Terbit , 8 mnt
Versi adalah nomor yang dilihat pelanggan, build number menandai setiap unggahan. Pasangannya harus unik: dengan Expo, EAS menaikkan build untukmu.
Build number di App Store Connect adalah nomor build: key CFBundleVersion, yang menandai setiap unggahan. Versi, CFBundleShortVersionString, adalah nomor yang dilihat pelangganmu di App Store. Apple mewajibkan pasangan versi dan nomor build unik: satu nomor build hanya bisa dipakai sekali untuk versi yang sama.
Dengan Expo, kamu menentukan versi sendiri dan EAS bisa menaikkan nomor build di setiap build production. Panduan ini menjelaskan kedua nomor itu, aturan Apple, error ITMS-90062 dan ITMS-90189, serta apa yang perlu dicek kalau build-mu tidak muncul.
Aku memublikasikan aplikasi iOS-ku dengan Expo dan EAS, termasuk Solys, TradaZen, dan Nolera. Pengaturan yang ditunjukkan di bawah diambil dari file eas.json mereka.
Versi dan nomor build: apa bedanya?
Dua key di Info.plist mengidentifikasi aplikasimu. Dokumentasi Apple tentang CFBundleShortVersionString menyebutnya versi yang terlihat oleh pengguna: tiga bilangan bulat dipisahkan titik, seperti 10.14.1. Dokumentasi tentang CFBundleVersion membahas versi build: satu sampai tiga bilangan bulat, hanya berisi angka dan titik.
| Elemen | Key iOS | Siapa yang melihat | Field Expo |
|---|---|---|---|
| Versi | CFBundleShortVersionString | Pelangganmu | version |
| Nomor build | CFBundleVersion | Kamu dan Apple | ios.buildNumber |
Contoh fiktif: untuk versi 1.4.0, kamu mengirim build 12, 13, dan 14 selama pengujian, lalu memilih salah satunya untuk review. Bantuan App Store Connect merangkumnya: versi mengaitkan build ke halaman aplikasinya, nomor build mengidentifikasinya di seluruh sistem.
Aturan kenaikan nomor dari Apple
- Pasangannya harus unik. Menurut dokumentasi Xcode Cloud, App Store Connect mewajibkan kombinasi versi dan nomor build yang unik. Jadi aplikasi iPhone boleh mulai lagi dari 1 untuk versi baru. Aplikasi Mac tidak: nomornya harus selalu naik.
- Versi yang sudah disetujui itu tertutup. Begitu Apple menyetujui versi 1.4.0, kamu tidak bisa lagi menambahkan build ke versi itu. Versi berikutnya harus bernomor lebih tinggi.
- Setiap angka dibandingkan sebagai bilangan bulat. 1.10 datang setelah 1.9, karena 10 lebih besar dari 9. Versi 1.9 yang dikirim setelah 1.20 disetujui akan ditolak.
Saranku: pakai nomor build bilangan bulat yang selalu naik, tanpa mengulang dari 1. Mengulang dari 1 diperbolehkan di iPhone, tapi nomor yang unik sepanjang umur aplikasi mencegahmu tertukar dua build di TestFlight. Itulah yang kulihat di aplikasiku dengan mode remote: penghitungnya terus berlanjut dari satu versi ke versi berikutnya.
Mengelola versi dan build dengan Expo dan EAS
Halaman Expo tentang versi, diperbarui 25 September 2026, memisahkan perannya. Versi (version di app.json) tetap tanggung jawabmu: kamu mengubahnya saat menyiapkan rilis baru. Nomor build (ios.buildNumber) bisa diserahkan ke EAS. Expo bahkan menyebut lupa menaikkannya sebagai penyebab umum penolakan saat unggah.
Semuanya diatur di eas.json:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": server EAS menyimpan nomor build. Ini perilaku yang direkomendasikan sejak EAS CLI 12. Penghitung mulai dari nilai di konfigurasimu, atau dari 1, laluios.buildNumberdiabaikan."local": konfigurasimu yang jadi acuan. DenganautoIncrement, EAS mengubahios.buildNumberdi file-mu, dan kamu harus meng-commit perubahan itu di setiap build.autoIncrement: referensi eas.json menerimatrueatau"buildNumber"untuk build, dan"version"untuk menaikkan angka terakhir versi. Di mode remote, Expo menegaskan bahwa"version"tidak didukung.
Di tempatku, TradaZen dan Nolera memakai remote. Solys tetap di local: nomor build-nya ada di app.json dan setiap build production menaikkannya di file. Keduanya berfungsi, tapi mode remote menghilangkan risiko commit yang terlupa.
Dua perintah melengkapi semuanya. eas build:version:set menginisialisasi penghitung remote: masukkan nomor terakhir yang dikirim ke Apple. eas build:version:sync menyalin nilai remote ke proyekmu, berguna kalau suatu hari kamu meng-compile dengan Xcode. Dengan EAS Update, mode remote tidak bisa dipakai bersama kebijakan nativeVersion: Expo menyarankan appVersion.
ITMS-90062: versi sudah disetujui
Pesannya seperti ini (nomor fiktif):
ERROR ITMS-90062: This bundle is invalid. The value for key
CFBundleShortVersionString [1.4.0] in the Info.plist file must
contain a higher version than that of the previously approved
version [1.4.0].
Apple sudah menyetujui versi 1.4.0: kamu tidak bisa lagi menambahkan build ke versi itu. Naikkan versi di app.json, misalnya ke 1.4.1, lalu jalankan build lagi. Mengubah nomor build saja tidak cukup.
Kalau error-nya muncul lagi padahal version sudah diperbarui, cari field ios.version. Menurut referensi konfigurasi Expo, field itu menggantikan version untuk iOS. Solusinya sama untuk error sejenis ITMS-90186, "Invalid Pre-Release Train", yang menandakan versi yang sudah tertutup untuk build baru.
ITMS-90189: Redundant Binary Upload
Di sini, nomor build-lah masalahnya:
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
Pasangan 1.4.0 (12) sudah ada di Apple. Dengan Expo, ada empat penyebab yang sering muncul:
- Profil yang dipakai tidak punya
autoIncrement. Kalau kamu membuat profil terpisah untuk TestFlight, seperti punya Nolera, tambahkan lagi opsi itu. - Penghitung remote tertinggal. Kamu pindah ke
remotesetelah beberapa unggahan manual: jalankaneas build:version:setdengan nomor terakhir yang diketahui Apple. - Commit terlupa di mode local. Build berikutnya mulai lagi dari nomor lama.
- Kamu mengirim ulang binary yang sama. Dengan
eas submit, pilih build baru, bukan yang lama.
Perbaikannya selalu sama: build baru dengan nomor lebih tinggi.
"No builds available": build-mu tidak muncul
Build sudah terkirim, tapi halaman aplikasimu tidak menampilkannya. Cek dengan urutan ini.
- Masih diproses. Apple memproses setiap build sebelum menampilkannya dan mengirimimu email setelah selesai. Expo umumnya menyebut 10 sampai 15 menit. Menurut Apple, kalau lebih dari 24 jam masih diproses, kamu perlu membuka tiket Feedback Assistant.
- Menunggu deklarasi enkripsimu. Ini status Missing Compliance, dijelaskan di bawah.
- Versinya tidak cocok. Build 1.4.1 tidak akan masuk ke halaman yang disiapkan untuk 1.5.0 di App Store Connect. Samakan keduanya.
- Ada versi yang rilis di antaranya. Menurut bantuan tentang memilih build, daftar itu hanya menampilkan build yang dikirim sejak rilis tersebut.
- Tester-lah yang tidak melihatnya. Di aplikasi TestFlight, "no builds available" sering berarti build tidak ada di grup mana pun, sedang menunggu beta review, atau sudah kedaluwarsa. Detailnya ada di TestFlight untuk menguji aplikasi iPhone-mu.
Status yang perlu kamu ketahui
Status yang paling sering menjelaskan build yang hilang, menurut daftar Apple. Processing dan Failed tidak ada di sana: keduanya status unggahan yang dijelaskan di pemantauan build.
| Status | Artinya | Perbaikanmu |
|---|---|---|
| Processing | Apple sedang memproses | Tunggu email |
| Failed | Error saat diproses | Baca error, kirim ulang |
| Missing Compliance | Enkripsi belum dideklarasi | Jawab atau Info.plist |
| Invalid Binary | Unggahan tidak sesuai | Perbaiki, build baru |
| Expired | Lewat 90 hari | Build baru |
| Ready to Submit | Siap untuk tes atau review | Tambahkan ke grup |
Deklarasikan enkripsi sekali untuk selamanya
Tanpa key ITSAppUsesNonExemptEncryption, Apple akan menanyakan pertanyaan kepatuhan di setiap versi baru. Di Expo, field-nya bernama ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false berarti: tidak ada enkripsi, atau hanya enkripsi yang dikecualikan. Apple menjelaskan bahwa enkripsi bawaan sistem, seperti koneksi HTTPS, umumnya dikecualikan, dan jawabannya juga mencakup library-mu. Ketiga aplikasiku mendeklarasikan false. Isi false hanya kalau memang benar untuk aplikasimu: deklarasi ini mengikatmu.
Bisakah nomor build yang sudah dikirim diubah?
Tidak. Nomornya tertanam di binary yang sudah ditandatangani: untuk memperbaikinya, kamu perlu build baru.
Yang bisa kamu ubah adalah build yang terkait dengan versimu. Apple hanya mengizinkan satu build per versi, tapi kamu bisa menggantinya sesering yang kamu mau sampai dikirim untuk review:
- Buka versinya di App Store Connect, bagian Build.
- Arahkan kursor ke build saat ini dan klik tombol hapus, tanda minus.
- Klik tombol tambah, tanda plus, pilih build yang benar, lalu simpan.
Melepas build dari sebuah versi tidak menghapusnya dari akunmu. Kalau versinya sudah dalam review, tarik dulu submission-nya: review akan dimulai lagi dari nol.
Sebelum unggahan berikutnya
Nomor build hanyalah salah satu pemeriksaan saat unggah. Image build bisa memicu ITMS-90725, dan signing punya jebakannya sendiri, dijelaskan di sertifikat developer iOS dan provisioning profile. Alur lengkapnya, dari build sampai TestFlight, ada di memublikasikan aplikasi iOS tanpa Mac, dan waktu review di lama review App Store. Semua langkah dikumpulkan di halaman memublikasikan aplikasi di App Store.
Kalau kamu sedang menyiapkan rilis pertamamu, ikuti diagnostik gratis: diagnostik ini memberitahumu apa yang menghambat proyekmu dan mengirimkan checklist anti-penolakan Apple milikku. Untuk membangun aplikasi, memasang langganan, dan memublikasikannya, iOS & Android Kit mengikuti alur empat langkah dengan kode awal dari aplikasiku, sesuai ritmemu.
Pertanyaan umum
Apa beda versi dan build number di App Store Connect?
Versi adalah nomor publik rilismu, seperti 1.4.0. Build number mengidentifikasi satu binary tertentu yang dikirim ke Apple untuk versi itu. Kamu bisa mengirim beberapa build untuk satu versi, masing-masing dengan nomornya sendiri.
Apakah nomor build harus diubah setiap kali mengunggah?
Ya, untuk versi yang sama. Apple menolak unggahan kedua dengan pasangan versi dan nomor build yang sama, itulah error ITMS-90189. Dengan EAS, autoIncrement mengurusnya di setiap build production.
Apakah nomor build harus mulai lagi dari 1 di setiap versi?
Tidak wajib. Di iPhone, Apple menerima nomor yang lebih rendah untuk versi baru, karena hanya pasangannya yang harus unik. Penghitung yang selalu naik tetap lebih mudah dilacak.
Bagaimana cara mengubah build number di App Store Connect?
Kamu tidak bisa mengubah nomor build yang sudah dikirim. Tapi kamu bisa mengganti build yang terpasang di versimu, dari bagian Build di halaman aplikasi, selama belum dalam review. Untuk nomor baru, buat build lagi.
Kenapa build-ku tidak muncul di App Store Connect?
Paling sering, build masih diproses atau menunggu deklarasi enkripsimu. Cek juga apakah versinya cocok dengan versi di halaman aplikasimu. Kalau lebih dari 24 jam masih diproses, Apple memintamu membuka tiket.

