App Store Connect build number: sürüm ve build numarası
Yazan: Mehdi Azizi
tarihinde yayınlandı, 8 dk.
Sürüm, müşterilerinin gördüğü numaradır; build number ise her yüklemeyi tanımlar. İkili benzersiz olmalı, Expo'da EAS build numarasını senin için artırır.
App Store Connect'teki build number, yani build numarası: her yüklemeyi tanımlayan CFBundleVersion anahtarı. Sürüm ise, yani CFBundleShortVersionString, müşterilerinin App Store'da gördüğü numara. Apple, sürüm ve build numarası ikilisinin benzersiz olmasını şart koşar: bir build numarası aynı sürüm için yalnızca bir kez kullanılır.
Expo'da sürümü kendin belirlersin, EAS ise her production build'de build numarasını artırabilir. Bu rehber iki numarayı, Apple'ın kurallarını, ITMS-90062 ve ITMS-90189 hatalarını ve build'in görünmediğinde neyi kontrol etmen gerektiğini anlatıyor.
iOS uygulamalarımı Expo ve EAS ile yayınlıyorum, Solys, TradaZen ve Nolera da bunlardan. Aşağıda gösterdiğim ayarlar onların eas.json dosyalarından.
Sürüm ve build numarası: fark ne?
Info.plist'teki iki anahtar uygulamanı tanımlar. Apple'ın CFBundleShortVersionString dokümantasyonu onu kullanıcının gördüğü sürüm olarak tanımlar: 10.14.1 gibi noktalarla ayrılmış üç tam sayı. CFBundleVersion dokümantasyonu ise build sürümünden bahseder: yalnızca rakam ve noktadan oluşan bir ile üç arası tam sayı.
| Öğe | iOS anahtarı | Kim görür | Expo alanı |
|---|---|---|---|
| Sürüm | CFBundleShortVersionString | Müşterilerin | version |
| Build numarası | CFBundleVersion | Sen ve Apple | ios.buildNumber |
Uydurma bir örnek: 1.4.0 sürümü için testlerin sırasında 12, 13 ve 14 numaralı build'leri gönderiyorsun, sonra inceleme için birini seçiyorsun. App Store Connect yardımı bunu şöyle özetliyor: sürüm build'i sayfasına bağlar, build numarası onu sistemin her yerinde tanımlar.
Apple'ın artırma kuralları
- İkili benzersiz olmalı. Xcode Cloud dokümantasyonuna göre App Store Connect benzersiz bir sürüm ve build numarası kombinasyonu ister. Yani bir iPhone uygulaması yeni bir sürümde 1'den başlayabilir. Mac uygulaması başlayamaz: numarası her zaman artmalı.
- Onaylanmış bir sürüm kapanmıştır. Apple 1.4.0 sürümünü onayladıktan sonra ona build ekleyemezsin. Bir sonraki sürüm daha yüksek bir numara taşımalı.
- Her sayı bir tam sayı gibi karşılaştırılır. 1.10, 1.9'dan sonra gelir, çünkü 10, 9'dan büyüktür. Onaylanmış bir 1.20'den sonra gönderilen 1.9 reddedilir.
Tavsiyem: hep artan bir tam sayı build numarası kullan, 1'e sıfırlama. iPhone'da 1'den başlamak serbest, ama uygulamanın tüm ömrü boyunca benzersiz bir numara TestFlight'ta iki build'i karıştırmanı engeller. Uzak moddaki uygulamalarımda gördüğüm de bu: sayaç bir sürümden diğerine devam ediyor.
Expo ve EAS ile sürüm ve build yönetimi
Expo'nun sürümler sayfası, 25 Eylül 2026'da güncellendi, rolleri ayırıyor. Sürüm (app.json'daki version) sende kalır: yeni bir yayın hazırlarken değiştirirsin. Build numarası (ios.buildNumber) EAS'e bırakılabilir. Expo zaten onu artırmayı unutmayı, yükleme sırasında reddin yaygın bir nedeni olarak gösteriyor.
Her şey eas.json'da ayarlanır:
{
"cli": {
"appVersionSource": "remote"
},
"build": {
"production": {
"autoIncrement": true
}
}
}
"remote": build numarasını EAS sunucuları tutar. EAS CLI 12'den beri önerilen davranış bu. Sayaç yapılandırmandaki değerden ya da 1'den başlar, sonraios.buildNumberyok sayılır."local": geçerli olan senin yapılandırman.autoIncrementile EAS dosyandakiios.buildNumberdeğerini değiştirir ve her build'de bu değişikliği commit'lemen gerekir.autoIncrement: eas.json referansı build içintrueveya"buildNumber", sürümün son hanesini artırmak için"version"kabul eder. Expo, uzak modda"version"değerinin desteklenmediğini belirtiyor.
Bende TradaZen ve Nolera remote modunda. Solys local modunda kaldı: build numarası app.json'da duruyor ve her production build onu dosyada artırıyor. İkisi de çalışır, ama uzak mod unutulmuş bir commit riskini ortadan kaldırır.
İki komut sistemi tamamlıyor. eas build:version:set uzak sayacı başlatır: Apple'a gönderdiğin son numarayı gir. eas build:version:sync uzak değerleri projene kopyalar, bir gün Xcode ile derlersen işine yarar. EAS Update kullanıyorsan uzak mod nativeVersion politikasıyla çalışmaz: Expo appVersion öneriyor.
ITMS-90062: sürüm zaten onaylanmış
Mesaj şuna benzer (numaralar uydurma):
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 1.4.0 sürümünü zaten onaylamış: artık ona build ekleyemezsin. app.json'da sürümü artır, örneğin 1.4.1 yap, sonra yeniden build al. Sadece build numarasını değiştirmek yetmez.
version güncel olduğu hâlde hata tekrar ediyorsa bir ios.version alanı ara. Expo yapılandırma referansına göre iOS için version değerinin önüne geçer. Kardeş hata ITMS-90186, "Invalid Pre-Release Train", için de çözüm aynı: yeni build'lere kapanmış bir sürümü işaret eder.
ITMS-90189: Redundant Binary Upload
Burada sorun build numarasında:
ERROR ITMS-90189: Redundant Binary Upload. You've already uploaded
a build with build number '12' for version number '1.4.0'.
1.4.0 (12) ikilisi Apple'da zaten var. Expo'da dört neden öne çıkar:
- Kullanılan profilde
autoIncrementyok. Nolera'daki gibi TestFlight için ayrı bir profil oluşturursan seçeneği oraya da ekle. - Uzak sayaç geride kalmış. Elle yüklemelerden sonra
remotemoduna geçtin: Apple'daki bilinen son numaraylaeas build:version:setçalıştır. - Yerel modda commit unutulmuş. Sonraki build eski numaradan devam eder.
- Aynı binary'yi tekrar gönderiyorsun.
eas submitile eskisini değil, yeni build'i seç.
Düzeltme her zaman aynı: daha yüksek numaralı yeni bir build.
"No builds available": build'in görünmüyor
Build gitti ama sayfan onu sunmuyor. Şu sırayla kontrol et.
- Hâlâ işleniyor. Apple her build'i göstermeden önce işler ve bitince sana e-posta gönderir. Expo genelde 10 ila 15 dakikadan bahsediyor. Apple'a göre işleme 24 saati geçerse bir Feedback Assistant kaydı açmak gerekir.
- Şifreleme beyanını bekliyor. Bu, aşağıda ayrıntılı anlatılan Missing Compliance durumu.
- Sürüm eşleşmiyor. 1.4.1 sürümlü bir build, App Store Connect'te 1.5.0 olarak hazırlanmış bir sayfanın altına girmez. İkisini eşitle.
- Bu arada bir sürüm yayınlandı. Build seçimi yardımına göre liste bu durumda yalnızca o yayından sonra gönderilen build'leri gösterir.
- Göremeyen test kullanıcısı. TestFlight uygulamasında "no builds available" genellikle build'in hiçbir grupta olmadığı, beta incelemesini beklediği ya da süresinin dolduğu anlamına gelir. Ayrıntılar iPhone uygulamanı TestFlight ile test etmek yazısında.
Bilmen gereken durumlar
Apple'ın listesine göre görünmeyen bir build'i en sık açıklayan durumlar. Processing ve Failed orada yer almıyor: bunlar build takibi sayfasında anlatılan yükleme durumları.
| Durum | Anlamı | Senin düzeltmen |
|---|---|---|
| Processing | Apple build'i işliyor | E-postayı bekle |
| Failed | İşleme hatası | Hatayı oku, tekrar gönder |
| Missing Compliance | Şifreleme beyan edilmemiş | Yanıtla veya Info.plist |
| Invalid Binary | Uygunsuz yükleme | Düzelt, yeni build |
| Expired | 90 gün aşıldı | Yeni build |
| Ready to Submit | Test veya incelemeye hazır | Bir gruba ekle |
Şifrelemeyi bir kerede beyan et
ITSAppUsesNonExemptEncryption anahtarı yoksa Apple her yeni sürümde uyumluluk sorularını sana sorar. Expo'da alanın adı ios.config.usesNonExemptEncryption:
{
"expo": {
"ios": {
"config": {
"usesNonExemptEncryption": false
}
}
}
}
false şu anlama gelir: şifreleme yok ya da yalnızca muaf tutulan şifreleme var. Apple, HTTPS bağlantıları gibi sisteme gömülü şifrelemenin genelde muaf olduğunu ve yanıtın kütüphanelerini de kapsadığını belirtiyor. Üç uygulamam da false beyan ediyor. false değerini yalnızca uygulaman için doğruysa kullan: beyan seni bağlar.
Gönderilmiş bir build'in numarası değiştirilebilir mi?
Hayır. Numara imzalı binary'nin içine yazılıdır: düzeltmek için yeni bir build gerekir.
Değiştirebileceğin şey, sürümüne bağlı build. Apple sürüm başına tek bir build'e izin verir, ama incelemeye gönderene kadar onu istediğin kadar değiştirebilirsin:
- App Store Connect'te sürümü aç, Build bölümüne git.
- Mevcut build'in üzerine gel ve silme düğmesine, eksi işaretine tıkla.
- Ekleme düğmesine, artı işaretine tıkla, doğru build'i seç, sonra kaydet.
Bir build'i sürümden çıkarmak onu hesabından silmez. Sürüm zaten incelemedeyse önce gönderimi geri çek: inceleme sıfırdan başlar.
Bir sonraki gönderiminden önce
Build numarası, yükleme sırasındaki kontrollerden sadece biri. Build imajı ITMS-90725 hatasını tetikleyebilir, imzalamanın da kendi tuzakları var, bunlar iOS geliştirici sertifikası ve provisioning profile yazısında anlatılıyor. Build'den TestFlight'a tüm zincir Mac olmadan iOS uygulaması yayınlamak yazısında, inceleme süreleri ise App Store onay süresi yazısında. Tüm adımlar App Store'da uygulama yayınlamak sayfasında bir arada.
İlk yayınını hazırlıyorsan ücretsiz teşhisi yap: projende neyin takıldığını söyler ve sana Apple reddine karşı kontrol listemi gönderir. Uygulamayı geliştirmek, abonelikleri bağlamak ve yayınlamak için iOS & Android Kit, uygulamalarımın başlangıç koduyla dört adımlık yolu kendi hızında takip ediyor.
Sık sorulan sorular
App Store Connect'te sürüm ile build number arasındaki fark ne?
Sürüm, yayınının herkese açık numarasıdır, 1.4.0 gibi. Build number, bu sürüm için Apple'a gönderilen belirli bir binary'yi tanımlar. Aynı sürüm için her biri kendi numarasıyla birden fazla build gönderebilirsin.
Her gönderimde build numarasını değiştirmek gerekir mi?
Evet, aynı sürüm için. Apple aynı sürüm ve build numarası ikilisiyle ikinci bir gönderimi reddeder, bu ITMS-90189 hatasıdır. EAS'te autoIncrement bunu her production build'de halleder.
Build numarası her sürümde 1'den mi başlamalı?
Zorunlu değil. iPhone'da Apple yeni bir sürüm için daha düşük bir numarayı kabul eder, çünkü yalnızca ikilinin benzersiz olması gerekir. Hep artan bir sayaç takip etmek için yine de daha basit.
App Store Connect'te build number nasıl değiştirilir?
Gönderilmiş bir build'in numarasını değiştiremezsin. Ama sürüm incelemede olmadığı sürece, sayfanın Build bölümünden sürümüne bağlı build'i değiştirebilirsin. Yeni bir numara için yeniden build al.
Build'im App Store Connect'te neden görünmüyor?
Çoğu zaman hâlâ işleniyordur ya da şifreleme beyanını bekliyordur. Sürümünün sayfandakiyle eşleştiğini de kontrol et. İşleme 24 saati geçerse Apple bir kayıt açmanı istiyor.

