App Store yayınlandıktan sonra hangi iOS uygulama sürümü / yapı numaraları ARTTIRILMALIDIR?


107

Bir iOS uygulaması için sürüm / derleme alanları şunları içerir:

  • "Sürüm" CFBundleShortVersionString (String - iOS, OS X), uygulamanın yayınlanmış bir yinelemesini tanımlayan paketin yayın sürüm numarasını belirtir. Yayın sürüm numarası, noktayla ayrılmış üç tam sayıdan oluşan bir dizedir.

  • "Derleme" CFBundleVersion (String - iOS, OS X), paketin bir yinelemesini (yayımlanmış veya yayımlanmamış) tanımlayan paketin derleme sürüm numarasını belirtir. Derleme sürüm numarası, ilk tamsayı sıfırdan büyük olmak üzere üç negatif olmayan, noktayla ayrılmış tam sayıdan oluşan bir dize olmalıdır. Dize yalnızca sayısal (0-9) ve nokta (.) Karakterleri içermelidir. Baştaki sıfırlar her tam sayıdan kesilir ve yok sayılır (yani 1.02.3, 1.2.3'e eşdeğerdir). Bu anahtar yerelleştirilemez.

  • "iTunes Connect Sürüm Numarası" : iTunes Connect'te uygulamanın yeni bir sürümünü oluştururken belirttiğiniz sürüm numarası.

Sorum şu:

Uygulamanın yeni bir sürümü iTunes Connect'e yüklendiğinde ve / veya App Store'da yayınlandığında hangi sürüm / yapı numaralarının artırılması gerekiyor ?

Uygulama güncellemeleri arasında "sürüm" CFBundleShortVersionStringveya "yapı" CFBundleVersionaynı kalabilir mi?

Apple kaynakları için ekstra puanlar veya geçersiz bir sürüm / yapı numarası yükledikten sonra iTunesConnect'in görüntülediği tam hata mesajları.


Android / Google Play notu:

Bu soruyu soran tartışma, Google Play Store'daki bir Android uygulamasının herkese açık "sürümünün" artırılmasına gerek olmadığı ve hiçbir şekilde doğrulanmadığıdır. Bunlar android:versionName, sürümler, yükseltme, eski sürüme geçme arasında aynı kalabilir veya geçerli bir "sürüm numarası" gibi görünen bir şey yerine rastgele herhangi bir dize olabilir.

android:versionName - Kullanıcılara gösterilmesi gerektiği gibi, uygulama kodunun yayın sürümünü temsil eden bir dize değeri.

Değer, uygulama sürümünü bir <major>.<minor>.<point>dize olarak veya başka bir tür mutlak veya göreceli sürüm tanımlayıcısı olarak tanımlayabilmeniz için bir dizedir .

Android'de versionName ve versionNumber arasındaki fark

Oysa, android:versionCodeyayınlandığında artan bir tamsayı olmaya zorlanır.


Apple belgeleri

Yeni kabul edilen yanıtta belirtildiği gibi , Apple kısa süre önce sürümlerini ve yapı numarası şemasını ayrıntılarıyla anlatan bir Teknik Not yayınladı:

Apple Technical Note TN2420 - Sürüm Numaraları ve Yapı Numaraları


Ekran görüntüsü ile ayrıntılı bir cevap: stackoverflow.com/a/31921249/936957
Yunus Nedim Mehel

Yanıtlar:


115

Apple Teknik Not TN2420, Sürüm Numaraları ve Yapı Numaraları

Özet:

  • Çift ( Version, Build number) benzersiz olmalıdır.
    • Sıra geçerlidir: (1.0.1, 12) -> (1.0.1, 13) -> (1.0.2, 13) -> (1.0.2, 14) ...
  • Version( CFBundleShortVersionString ) artan sıralı sırada olmalıdır.
  • Build number( CFBundleVersion ) artan sırayla olmalıdır.

Sürüm Numarası ve Yapı Numarası Kontrol Listesi

App Store'a yeni bir yapı gönderirken kontrol edebileceğiniz bazı şeyler. Sürüm Numaranızın ve Yapı Numaranızın doğru şekilde ayarlandığından emin olmak, Uygulamanızın yanlış yapılandırılmaları nedeniyle otomatik olarak reddedilmesini önleyerek size yardımcı olacaktır.

  1. Uygulamanızın her yeni sürümü için yeni bir Sürüm Numarası icat etmeniz gerekir. Bu sayı, kullandığınız son Sürüm Numarasından daha büyük bir değer olmalıdır. Uygulamanızın belirli herhangi bir sürümü için birçok yapı sağlayabilseniz de, Uygulamanızın her yeni sürümü için yalnızca bir yeni Sürüm Numarası kullanmanız gerekir.
  2. Sürüm Numaralarını yeniden kullanamazsınız.
  3. Gönderdiğiniz her yeni yapı için, değeri kullandığınız son Yapı Numarasından daha büyük olan yeni bir Yapı Numarası icat etmeniz gerekecektir (aynı sürüm için).
  4. Yapı Numaralarını farklı sürüm dizilerinde yeniden kullanabilirsiniz, ancak aynı sürüm dizisinde Yapı Numaralarını yeniden kullanamazsınız. MacOS uygulamaları için herhangi bir sürüm dizisinde derleme numaralarını yeniden kullanamazsınız.

Kontrol listesine göre aşağıdaki (Version, Build Number)sıra da geçerlidir.

  • Durum: Build Numberfarklı sürüm dizilerinde yeniden kullanın . (NOT: macOS uygulaması DEĞİL )

    (1.0.0, 1) -> (1.0.0, 2) -> ... -> (1.0.0, 11) -> ( 1.0.1 , 1 ) -> (1.0.1, 2)


Kafam karıştı. Koşullardan biri "Sürüm Numaralarını yeniden kullanamazsınız", ancak son örnekte, sürüm numaraları artarken sürüm numaraları aynı kalıyor. Bir şeyi yanlış mı yorumluyorum?
Emil

@Emil, bence bu (Sürüm, Yapı Numarası) çifti tekrar kullanılamaz.
AechoLiu

6
@EmilParikh Sürüm numaraları , her biri benzersiz bir Yapı numarasına sahip olmak üzere Apple'a piyasaya sürülmeden önce birçok kez yüklenebilir . Ancak bir kez yayınlandıktan sonra, bu Sürüm numarasını tekrar kullanamazsınız.
pkamb

1
TN2420, "Sürüm numaraları ve yapı numaraları noktalarla ayrılmış en fazla üç bileşene sahip olabilir" der ve ardından aşağıdaki yasadışı örneği 1.10000.1.5 sağlar . Ancak, Chrome da dahil olmak üzere birçok uygulamanın 4 bileşen içeren bir sürüm numarası kullandığı görülüyor (ör. 68.0.3440.83 ). Sanırım bu, TN2420 sayfasında " Önemli: Bu belge artık güncellenmiyor " ifadesinin yer almasıyla açıklanabilir, ancak yeni kuralları tanımlayan güncellenmiş bir belge bulamadım. Kafası karışan başka kimse var mı?
catanman

@catanman Bu Semantik Versiyonu beğendim . Versiyon (major, minor, patch)üslupla yazılsın. Daha önce 4 bileşen kullanmıştım, ancak App store bu formatı 4 bileşenle kabul etmiyor.
AechoLiu

38

CFBundleShortVersionStringİTunes Bağlan vermek sürüm numarası aynı olmalıdır. Ayrıca, kullanıcı App Store'da Uygulamanıza baktığında görünen sürüm numarasıdır.

Sürüm numarası mağazada gösterilir ve bu sürüm, daha sonra iTunes Connect'e girdiğiniz sürüm numarasıyla eşleşmelidir.

Kaynak

CFBundleVersionApp Store'da gösterilen değil, App güncellendikten sonra belirlemek için iTunes tarafından kullanılır.

"Sürüm Numarasını ve Derleme Dizesini Ayarlama" bölümünde açıklandığı gibi derleme dizesini güncellerseniz, iTunes, derleme dizesinin değiştiğini fark eder ve yeni iOS App Store Paketini test aygıtları için uygun şekilde eşitler.

Kaynak

Sorularınızı daha net cevaplamak ...

Uygulamanın yeni bir sürümü uygulama mağazasına yüklendiğinde hangi sürüm / yapı numaralarının artırılması gerekir?

Her ikisi de. Biri App Store'da görüntülenir, diğeri ise iTunes tarafından Uygulamayı güncellemek için kullanılır.

CFBundleShortVersionString veya CFBundleVersion, uygulama güncellemeleri arasında aynı kalabilir mi?

Hayır. (Meta soru, buradaki kullanım durumu ne olurdu? Yükü herhangi bir şekilde düzenlediyseniz, yapı farklı olacaktır ve kullanıcı bunu bilmek isteyecektir). Eğer denerseniz, aşağıdaki gibi hata mesajları göreceksiniz:

Hata mesajları

Yoksa uygulamanın yeni sürümüyle sayısal olarak daha büyük bir sayının yüklenmesini sağlamak için önceki ilgili numara ile karşılaştırılıyor mu?

Evet. Semver.org standardını kullanmak .

CFBundleShortVersionString ve CFBundleVersion sayıları herhangi bir şekilde birbirine kıyasla mı?

Hayır.


2
Doğru, iki sayının nasıl kullanıldığını biliyorum. Soru şudur: uygulamanın yeni bir sürümünü yayınlarken ikisinin de artırılması gerekiyor mu?
pkamb

2
Evet, bir Uygulamayı her ikisini de güncellemeden App Store'a aktarmaya çalışırsanız, bir hata mesajı görürsünüz, örn. Stackoverflow.com/questions/19367893/…
Andy

Teşekkürler, harika düzenleme. Özellikle bu bağlantı için. Organizatörün doğrulayıcısı, hem CFBundleVersion hem de CFBundleShortVersionString için "daha yüksek bir sürüm içermelidir" hatalarını gösteriyor.
pkamb

1
SemVer bağlantısı için +1 ... MAJOR.MINOR.PATCH sürüm numarası verildiğinde, uyumsuz API değişiklikleri yaptığınızda MAJOR sürümünü, geriye doğru uyumlu bir şekilde işlevsellik eklediğinizde MINOR sürümünü ve geriye doğru yaptığınızda PATCH sürümünü artırın uyumlu hata düzeltmeleri.
jeet.chanchawat

Bununla ilgili olarak: burada kullanım durumu ne olurdu? Yükü herhangi bir şekilde düzenlediyseniz, yapı farklı olacaktır ve kullanıcı bunu bilmek isteyecektir . Benim kullanım örneğim, uygulamamın Apple tarafından başarılı bir şekilde incelendiği, ancak daha önce App Store'da hiç yayınlanmadığı. Bir hata buldum ve onu değiştirmeden düzeltmek istiyorum CFBundleShortVersionString. Mümkün mü? Kendi uygulamamı reddetmek istiyorum.
test

31

CFBundleShortVersionString , sürümün genel "adı" dır (örnek: "2.5" veya "3.8.1"). Her sürümde artırmalısınız .

CFBundleVersion , özel yapı numarasıdır. AppStore'da görülmez. Her yüklemede artırmalısınız . Bu, bir ikili dosyayı çevrimiçi olmadan önce reddederseniz ve yeni bir ikili dosya yüklemek isterseniz, aynı CFBundleShortVersionString'e sahip olacağı ancak daha yüksek bir CFBundleVersion'a sahip olması gerektiği anlamına gelir (örnek: genel "2.5", özel "2.5" ve sonra ikili dosya reddi ve özel "2.5.1" i yeniden yükleyin)

16 Kasım 2016'da düzenleme:

/ ! \ CFBundleVersion özelliği, kodunuzda NSURLConnectionUser-Agent tarafından gönderilen başlıkta da ( CFBundleName ile birlikte ) kullanılır .

Örnek: CFBundleName , MyApp ve CFBundleVersion 2,21 ise, NSURLConnection kullanılarak doğrudan kodunuz tarafından gönderilen herhangi bir programlı HTTP sorgusu başlığı gömer:

User-Agent: MyApp/2.21 CFNetwork/... Darwin/...

(Bu, UIWebView tarafından otomatik olarak yayınlanan istekler için geçerli değildir).


2
Yükleme / yayınlama gereksinimleri arasında büyük ayrım.
pkamb

@gabriel, yapı numarasını XX-rc2 olarak ayarlamayı denedim, ancak Düzenleyici doğrulayıcı X, Y ve Z'nin tam sayı olduğu XYZ'den farklı bir şey ayarlamama izin vermiyor: S. -Rc2 yapı numarasına sahip olmak harika olurdu, hiç onunla bir sürüm gönderebildiniz mi?
Néstor

1
@nestor Haklısın, yanılmışım. Yalnızca sayılara izin verilir. Cevabımı düzeltmeme izin ver.
Gabriel

@gabriel, CI sisteminin iTunesConnect'e yüklemek üzere oluşturması için ayrıştırmak X.X-rc2için bir komut dosyası kullanıyorum . X.X.2buildNumber
AechoLiu

5

CFBundleVersion ve CFBundleShortVersionString, uygulamanın son sürüm numarasından büyük olmalıdır. Onları aynı tutmak iyi bir uygulamadır. Bunları -info.plist'inizde bulmalısınız.

Düzenleyicide uygulamayı doğrulamaya çalıştığınızda, herhangi biri artırılmamışsa bir hata verir. Dün gece başıma geldi.


Sorumda bu anahtarların ikisinden de bahsettim. Cevabınız burada, bu değerlerin her ikisinin de artırılması gerektiği mi? Cevabınızı daha iyi destekleyebilir misiniz?
pkamb

Evet, ikisinin de artırılması gerekiyor. Dün gece onları artırmadan önce göndermeye çalıştığımda, her iki anahtar için de şikayet etti.
xoail

Ek bilgi için teşekkürler. Bir yapı yüklerken deneyiminizi eklemek için cevabınızı düzenlemelisiniz.
pkamb

6
"Bunları aynı tutmak iyi bir uygulamadır" - bu mutlaka doğru değildir. Uygulamanızda çalışan test kullanıcılarınız varsa, değişiklikler uygulandıkça derleme numaranızı artırmak, ancak sürüm numaranızı aynı tutmak isteyebilirsiniz. Sürekli entegrasyonu kullanarak, örneğin test kullanıcılarına dağıtmadan önce yapı numaranızı sizin için güncellemesini sağlayabilirsiniz.
Andy

@ Andy haklısın, mantıklı. Kullanım örneğini işaret ettiğiniz için teşekkür ederiz. Ben sadece tek bir geliştirici / test edici ortamı açısından düşünüyordum.
xoail

5

Hem CFBundleVersionve CFBundleShortVersionString GEREKİR App Store için yeni bir sürümünü piyasaya ne zaman artırılabilir.

Ek olarak, dizelerden biri iTunes Connect'te belirtilen sürümle eşleşmelidir.

Xcode Organizer Validator hatası: sürüm numarasını artırmalıdır.

Bu soru zaman uygulamayı doğrulamak reddederek Xcode Organizatörünün Doğrulayıcı'ya yukarıdaki ekran görüntüsünü içerir CFBundleVersionve CFBundleShortVersionStringartırılır edilmemiştir.

  • Bu paket geçersiz. CFBundleVersionInfo.plist dosyasındaki [1.0] anahtarının değeri , önceden yüklenen [1.134] sürümünden daha yüksek bir sürüm içermelidir.

  • Bu paket geçersiz. CFBundleShortVersionStringInfo.plist dosyasındaki [1.0] anahtarının değeri , önceden yüklenen [1.134] sürümünden daha yüksek bir sürüm içermelidir.

Doğrulayıcı, dizelerden birinin iTunes Connect'te oluşturulan uygulama sürümüyle eşleşmesi gerektiğini kanıtlayan bir hata da atar.

  • Sürüm uyuşmazlığı. Info.plist içerisindeki CFBundleVersion ['1.0'] ve CFBundleShortVersionString ['1.0'], iTunes Connect ['1.4'] içinde ayarlanan uygulama sürümüyle eşleşmiyor.

2

Mevcut Apple Teknik Notu TN2420, Sürüm Numaraları ve Yapı Numaraları diyor ki (kalın yazı ):

  1. İOS uygulamaları için, farklı sürüm dizilerindeki derleme numaralarını yeniden kullanabilirsiniz, ancak aynı sürüm dizisinde derleme numaralarını yeniden kullanamazsınız. MacOS uygulamaları için herhangi bir sürüm dizisinde derleme numaralarını yeniden kullanamazsınız .

Maalesef bu, aynı yapıyı Mac Catalyst'te yayınlamaya çalışırken iOS'ta sürüm tren numarasını izleyen bir yapı numarasını yeniden kullanamayacağınız anlamına gelir.

Benim durumumda, örneğin, daha önceki bazı sorunlar nedeniyle, iOS'ta 1.0.2 (1) 'e karşılık gelen bir Mac Catalyst uygulaması olarak 1.0.2 (4) yayınladım. Şimdi her ikisinde de 1.0.3 (1) yayınlamaya çalışırken, uygulama, iOS'ta doğrulamayı geçerken, derleme numarası nedeniyle MacOS'ta doğrulamayı geçemiyor.

Sanırım şimdi aynı uygulamayı hem iOS hem de MacOS'ta rutin olarak yayınladığıma göre, 20200111 gibi tarihe karşılık gelen yapı numaralarını benimseyeceğim ve belirli bir sürümdeki yapı numarasını değiştirmem gerekirse ondalık nokta ile artıracağım.


1

İkisini de artırmanız gerekir .

Yeni bir sürüm yüklerken, iTunes Connect'te otomatik olarak önceki sürümlerden daha yüksek olacak yeni bir sürüm oluşturmanız gerekecektir. İTunes Connect'teki bu sürüm, aynı sürüm numarasına sahip bir ikili program bekleyecektir, bu nedenle CFBundleShortVersionStringartırılması gerekir.

Sürümü günceller ancak yükseltmeyi unutursanız CFBundleVersion, yükleme sırasında bir hatayla karşılaşırsınız. Pkamb'ın cevabına ve ekran görüntüsüne bakın.

İlgili ayrıntılar için CFBundleShortVersionStringve CFBundleVersion, bakın: https://stackoverflow.com/a/31921249/936957


1

Her iki şekilde de denediğimden, bir sürüm dizisinin ve aşağıdaki gibi sayıların oluşturulduğunu doğrulayabilirim ...

1.0.0 (1)
1.0.1 (1)
1.0.2 (1)

... iOS uygulamaları için kabul edilir, ancak Mac (Catalyst) uygulamaları için şu hatayı verir:

HATA ITMS-90061: "Bu paket geçersiz. Info.plist dosyasındaki CFBundleVersion [1] anahtarının değeri, önceden yüklenen [2] sürümünden daha yüksek bir sürüm içermelidir."

Mac sürümü ve yapı numaraları şu şekilde olmalıdır ...

1.0.0 (1)
1.0.1 (2)
1.0.2 (3)

İOS için sürüm numarası artı dördüncü bir rakam olarak yapı numaraları giriyordum, örneğin ...

1.0.0 (1.0.0.1)
1.0.1 (1.0.1.1)
1.0.2 (1.0.2.1)

... ancak buna Mac uygulamaları için de izin verilmez. İlk Mac (Catalyst) uygulamamı göndermeyi denediğimde, Apple yalnızca üç veya daha az basamaklı bir yapı numarasını kabul ediyordu:

HATA ITMS-9000: "Bu paket geçersiz. Info.plist dosyasındaki CFBundleVersion [1.0.0.1] anahtarının değeri, en fazla üç negatif olmayan tamsayıdan oluşan nokta ile ayrılmış bir liste olmalıdır."

Bu yüzden her derleme için artan ve sürüm numaraları arasında artmaya devam eden tek bir sayıya geçtim.


Size verdiği hata mesajlarından herhangi biri var mı? Eğer öyleyse lütfen bunları alıntı yapın!
pkamb

0

Yeni bir Mac App Store uygulaması yayınlamaya hazırlanıyorum. Kullanılması CALVER biçimlendirmesi de YEAR.release (build).

: Birkaç kurar yükledi 2020.0 (1), 2020.0 (2)vb Sonunda sunulan 2020.0 (8)App Store Review. Bu, incelemeyi geçti ve Bekleyen Geliştirici Sürümü durumundadır .

Ben aynı yayın tren için yeni bir yapı eklenmiş yüzden, yayınlanmadan önce bir kaç şey düzeltmek istedim: 2020.0 (9).

Bu, hataya neden olur:

App Store Connect İşlemi Hatası

HATA ITMS-90062 : "Bu paket geçersiz. CFBundleShortVersionStringInfo.plist dosyasındaki [2020.0] anahtarının değeri , daha önce onaylanan [2020.0] sürümünden daha yüksek bir sürüm içermelidir. Lütfen daha fazla bilgiyi https: //CFBundleShortVersionString adresinde bulabilirsiniz. developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring "

benim 2020.0versiyonum hiç yayınlanmadığı için sinir bozucu . Bu sorunun kabul edilen cevabından, uygulama App Store'da kullanıma sunulana kadar aynı sürüme sahip yeni yapılar yayınlamaya devam edebileceğiniz izlenimine kapıldım.

Çözüm, uygulama durumu Geliştirici Sürümü Beklemede ise "sürüm treni" (Aynı Sürüm + Yeni Yapı) güncellenemez gibi görünüyor . Mevcut yapınızı yayınlayın ve ardından sürümü artırın veya bu sürüm treni için daha fazla yüklemeye izin vermek için App Store Connect'te bu Sürümü İptal edin .


-2

AFAIK, kafamın ötesinde, sadece yapı numarasını artırmanız gerekiyor CFBundleVersion. Kısa sürüm dizesini artırmak gerekli değildir, ancak kullanıcıya uygulamanın yeni olduğunu söylediği için muhtemelen artırmanız gerekir. Apple, numaralandırmanın geleneksel yazılım sürümü belirleme kurallarına uyması gerektiğini söylüyor, ancak zaten mevcut bir sürümü yeniden yüklemeye çalışırsanız iTunes Connect şikayet edebilir.

Uzun lafın kısası, işe yarayabilir, ama muhtemelen değil.


Hangi anahtarların artırılması gerektiği konusunda yetkili cevaplar aranıyor. Arttırılması CFBundleShortVersionStringgerekmiyorsa, "aynı" kullanıcıya dönük sürüm App Store'a birden çok kez yüklenebilir mi?
pkamb
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.