Build number App Store Connect: versi dan nombor build
Oleh Mehdi Azizi
Diterbitkan pada , 8 min
Versi ialah nombor yang dilihat pelanggan, build number mengenal pasti setiap muat naik. Pasangan ini mesti unik: dengan Expo, EAS menaikkannya.
Build number dalam App Store Connect ialah nombor build: kunci CFBundleVersion, yang mengenal pasti setiap muat naik. Versi pula, CFBundleShortVersionString, ialah nombor yang pelanggan anda lihat di App Store. Apple mewajibkan pasangan versi dan nombor build itu unik: satu nombor build hanya boleh digunakan sekali untuk versi yang sama.
Dengan Expo, anda tetapkan versi sendiri dan EAS boleh menaikkan nombor build pada setiap build production. Panduan ini menerangkan kedua-dua nombor, peraturan Apple, ralat ITMS-90062 dan ITMS-90189, serta apa yang perlu disemak apabila build anda tidak muncul.
Saya menerbitkan app iOS saya dengan Expo dan EAS, termasuk Solys, TradaZen dan Nolera. Tetapan yang ditunjukkan di bawah diambil daripada fail eas.json app-app tersebut.
Versi dan nombor build: apa bezanya?
Dua kunci dalam Info.plist mengenal pasti app anda. Dokumentasi Apple tentang CFBundleShortVersionString menyifatkannya sebagai versi yang dilihat pengguna: tiga integer dipisahkan titik, contohnya 10.14.1. Dokumentasi tentang CFBundleVersion pula menyebut versi build: satu hingga tiga integer, dengan hanya digit dan titik.
| Elemen | Kunci iOS | Siapa yang melihat | Medan Expo |
|---|---|---|---|
| Versi | CFBundleShortVersionString | Pelanggan anda | version |
| Nombor build | CFBundleVersion | Anda dan Apple | ios.buildNumber |
Contoh rekaan: untuk versi 1.4.0, anda hantar build 12, 13 dan 14 semasa ujian, kemudian pilih satu untuk semakan. Bantuan App Store Connect meringkaskannya: versi mengaitkan build dengan halaman app, nombor build mengenal pastinya di seluruh sistem.
Peraturan kenaikan Apple
- Pasangan itu mesti unik. Menurut dokumentasi Xcode Cloud, App Store Connect memerlukan gabungan versi dan nombor build yang unik. Jadi app iPhone boleh bermula semula dari 1 untuk versi baharu. App Mac tidak boleh: nombornya mesti sentiasa naik.
- Versi yang diluluskan sudah ditutup. Sebaik Apple meluluskan versi 1.4.0, anda tidak boleh lagi menambah build padanya. Versi seterusnya mesti bernombor lebih tinggi.
- Setiap nombor dibandingkan sebagai integer. 1.10 datang selepas 1.9, kerana 10 lebih besar daripada 9. Versi 1.9 yang dihantar selepas versi 1.20 yang diluluskan akan ditolak.
Nasihat saya: kekalkan nombor build integer yang sentiasa naik, jangan set semula ke 1. Bermula semula dari 1 dibenarkan di iPhone, tetapi nombor yang unik sepanjang hayat app mengelakkan anda tertukar dua build dalam TestFlight. Itulah yang saya lihat pada app saya dalam mod remote: pembilang terus naik dari satu versi ke versi seterusnya.
Mengurus versi dan build dengan Expo dan EAS
Halaman Expo tentang versi, dikemas kini pada 25 September 2026, memisahkan peranan. Versi (version dalam app.json) kekal di tangan anda: anda ubah apabila menyediakan keluaran baharu. Nombor build (ios.buildNumber) boleh diserahkan kepada EAS. Expo malah menyebut terlupa menaikkannya sebagai punca biasa muat naik ditolak.
Semuanya ditetapkan dalam eas.json:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": pelayan EAS menyimpan nombor build. Inilah tingkah laku yang disyorkan sejak EAS CLI 12. Pembilang bermula dari nilai dalam konfigurasi anda, atau dari 1, dan selepas ituios.buildNumberdiabaikan."local": konfigurasi anda yang menjadi rujukan. DenganautoIncrement, EAS mengubahios.buildNumberdalam fail anda, dan anda perlu commit perubahan itu pada setiap build.autoIncrement: rujukan eas.json menerimatrueatau"buildNumber"untuk build, dan"version"untuk menaikkan digit terakhir versi. Dalam mod remote, Expo menyatakan bahawa"version"tidak disokong.
Bagi saya, TradaZen dan Nolera menggunakan remote. Solys kekal dengan local: nombor buildnya disimpan dalam app.json dan setiap build production menaikkannya dalam fail. Kedua-duanya berfungsi, tetapi mod remote menghapuskan risiko commit yang terlupa.
Dua arahan melengkapkan susunan ini. eas build:version:set memulakan pembilang remote: masukkan nombor terakhir yang dihantar kepada Apple. eas build:version:sync menyalin nilai remote ke dalam projek anda, berguna jika suatu hari anda compile dengan Xcode. Dengan EAS Update, mod remote tidak berfungsi dengan polisi nativeVersion: Expo mengesyorkan appVersion.
ITMS-90062: versi sudah diluluskan
Mesejnya kelihatan seperti ini (nombor rekaan):
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 meluluskan versi 1.4.0: anda tidak boleh lagi menambah build padanya. Naikkan versi dalam app.json, contohnya kepada 1.4.1, kemudian jalankan build semula. Menukar nombor build sahaja tidak mencukupi.
Jika ralat itu berulang walaupun version sudah dikemas kini, cari medan ios.version. Menurut rujukan konfigurasi Expo, medan ini mengatasi version untuk iOS. Penyelesaian yang sama untuk ralat sepupunya ITMS-90186, "Invalid Pre-Release Train", yang menandakan versi yang sudah ditutup kepada build baharu.
ITMS-90189: Redundant Binary Upload
Di sini, nombor build yang menjadi masalah:
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 wujud di Apple. Dengan Expo, empat punca sering berlaku:
- Profil yang digunakan tiada
autoIncrement. Jika anda mencipta profil berasingan untuk TestFlight, seperti profil Nolera, tambahkan semula pilihan itu. - Pembilang remote ketinggalan. Anda beralih ke
remoteselepas beberapa muat naik manual: jalankaneas build:version:setdengan nombor terakhir yang diketahui Apple. - Commit terlupa dalam mod local. Build seterusnya bermula semula dari nombor lama.
- Anda menghantar binari yang sama sekali lagi. Dengan
eas submit, pilih build baharu, bukan yang lama.
Pembetulannya sentiasa sama: build baharu dengan nombor yang lebih tinggi.
"No builds available": build anda tidak muncul
Build sudah dihantar, tetapi halaman app anda tidak menawarkannya. Semak mengikut urutan ini.
- Ia masih diproses. Apple memproses setiap build sebelum memaparkannya dan menghantar e-mel kepada anda apabila selesai. Expo biasanya menyebut 10 hingga 15 minit. Menurut Apple, jika melebihi 24 jam dalam pemprosesan, anda perlu membuka tiket Feedback Assistant.
- Ia menunggu pengisytiharan penyulitan anda. Ini status Missing Compliance, diterangkan di bawah.
- Versinya tidak sepadan. Build 1.4.1 tidak akan diletakkan di bawah halaman yang disediakan untuk 1.5.0 dalam App Store Connect. Selaraskan kedua-duanya.
- Satu versi telah dikeluarkan sementara itu. Menurut bantuan tentang memilih build, senarai itu kemudian hanya memaparkan build yang dihantar sejak keluaran tersebut.
- Penguji yang tidak nampak. Dalam app TestFlight, "no builds available" selalunya bermaksud build itu tiada dalam mana-mana kumpulan, sedang menunggu semakan beta atau sudah tamat tempoh. Butirannya ada dalam TestFlight untuk menguji app iPhone anda.
Status yang perlu anda tahu
Status yang paling kerap menjelaskan build yang hilang, menurut senarai Apple. Processing dan Failed tiada dalam senarai itu: kedua-duanya status muat naik yang diterangkan dalam penjejakan build.
| Status | Maksudnya | Pembetulan anda |
|---|---|---|
| Processing | Apple sedang memproses | Tunggu e-mel |
| Failed | Ralat semasa pemprosesan | Baca ralat, hantar semula |
| Missing Compliance | Penyulitan tidak diisytihar | Jawab atau Info.plist |
| Invalid Binary | Muat naik tidak patuh | Betulkan, build baharu |
| Expired | Melebihi 90 hari | Build baharu |
| Ready to Submit | Sedia untuk ujian/semakan | Tambah ke kumpulan |
Isytiharkan penyulitan sekali untuk selamanya
Tanpa kunci ITSAppUsesNonExemptEncryption, Apple akan bertanya soalan pematuhan pada setiap versi baharu. Dengan Expo, medannya ialah ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false bermaksud: tiada penyulitan, atau hanya penyulitan yang dikecualikan. Apple menyatakan bahawa penyulitan terbina dalam sistem, seperti sambungan HTTPS, biasanya dikecualikan, dan jawapan anda turut meliputi library anda. Ketiga-tiga app saya mengisytiharkan false. Letak false hanya jika ia benar untuk app anda: pengisytiharan ini mengikat anda.
Bolehkah nombor build yang sudah dihantar diubah?
Tidak. Nombor itu tertulis dalam binari yang ditandatangani: untuk membetulkannya, anda perlukan build baharu.
Yang boleh anda ubah ialah build yang dikaitkan dengan versi anda. Apple membenarkan hanya satu build bagi setiap versi, tetapi anda boleh menggantikannya seberapa kerap yang anda mahu sehingga dihantar untuk semakan:
- Buka versi itu dalam App Store Connect, bahagian Build.
- Halakan tetikus ke build semasa dan klik butang buang, tanda tolak.
- Klik butang tambah, tanda tambah, pilih build yang betul, kemudian simpan.
Membuang build daripada versi tidak memadamnya daripada akaun anda. Jika versi itu sudah dalam semakan, tarik balik penghantaran dahulu: semakan akan bermula semula dari awal.
Sebelum muat naik anda yang seterusnya
Nombor build hanyalah salah satu semakan semasa muat naik. Imej build boleh mencetuskan ITMS-90725, dan tandatangan mempunyai perangkapnya sendiri, diterangkan dalam sijil pembangun iOS dan provisioning profile. Rantaian lengkap, dari build hingga TestFlight, ada dalam menerbitkan app iOS tanpa Mac, dan tempoh semakan dalam tempoh kelulusan App Store. Semua langkah dihimpunkan di halaman menerbitkan aplikasi di App Store.
Jika anda sedang menyediakan keluaran pertama, buat diagnostik percuma: ia memberitahu apa yang menyekat projek anda dan menghantar senarai semak anti-penolakan Apple saya. Untuk membina app, memasang langganan dan menerbitkannya, iOS & Android Kit mengikuti laluan empat langkah dengan kod permulaan app saya, mengikut rentak anda sendiri.
Soalan lazim
Apakah beza antara versi dan build number dalam App Store Connect?
Versi ialah nombor awam keluaran anda, seperti 1.4.0. Build number mengenal pasti binari tertentu yang dihantar kepada Apple untuk versi itu. Anda boleh menghantar beberapa build untuk versi yang sama, masing-masing dengan nombornya sendiri.
Perlukah nombor build ditukar pada setiap muat naik?
Ya, untuk versi yang sama. Apple menolak muat naik kedua dengan pasangan versi dan nombor build yang sama, iaitu ralat ITMS-90189. Dengan EAS, autoIncrement menguruskannya pada setiap build production.
Perlukah nombor build bermula semula dari 1 pada setiap versi?
Tidak wajib. Di iPhone, Apple menerima nombor yang lebih rendah untuk versi baharu, kerana hanya pasangannya yang mesti unik. Pembilang yang sentiasa naik tetap lebih mudah dijejak.
Bagaimana menukar build number dalam App Store Connect?
Anda tidak boleh mengubah nombor build yang sudah dihantar. Namun anda boleh menggantikan build yang dikaitkan dengan versi anda, dari bahagian Build halaman app, selagi ia belum dalam semakan. Untuk nombor baharu, buat build semula.
Kenapa build saya tidak muncul dalam App Store Connect?
Selalunya, ia masih diproses atau sedang menunggu pengisytiharan penyulitan anda. Semak juga sama ada versinya sepadan dengan versi halaman app anda. Jika melebihi 24 jam dalam pemprosesan, Apple meminta anda membuka tiket.

