Яку версію / номери додатків для iOS ПОВИНЕН збільшити після випуску App Store?


107

Поля версії / збірки для програми для iOS включають:

  • "Версія" CFBundleShortVersionString (String - iOS, OS X) визначає номер версії версії пакету, який ідентифікує випущену ітерацію програми. Номер версії випуску - це рядок, що складається з трьох цілих чисел, розділених періодом.

  • "Build" CFBundleVersion (String - iOS, OS X) вказує номер версії збірки в комплекті, який ідентифікує ітерацію (випущена чи невипущена) пакету. Номер версії збірки повинен бути рядком, що складається з трьох невід’ємних цілих чисел, розділених періодом, причому перше ціле число перевищує нуль. Рядок повинен містити лише числові (0-9) та символи періоду (.). Провідні нулі обрізаються з кожного цілого числа і будуть ігноровані (тобто 1,02.3 еквівалентно 1.2.3). Цей ключ не піддається локалізації.

  • "iTunes Connect Номер версії" : номер версії, який ви вказуєте під час створення нової версії програми на iTunes Connect.

Моє запитання:

Які номери версій / збірок потрібно збільшити, коли нова версія програми завантажена в iTunes Connect та / або випущена в App Store?

Чи може "версія" CFBundleShortVersionStringабо "збірка" CFBundleVersionзалишитися однаковою між оновленнями додатків?

Додаткові бали для джерел Apple або точні повідомлення про помилки iTunesConnect відображається після завантаження недійсної номера версії / збірки.


Примітка Android / Google Play:

Дискусія, що спонукає до цього питання, полягає в тому, що публічну "версію" додатка Android у Google Play Store не потрібно збільшувати та жодним чином не підтверджувати. Це android:versionNameможе залишатися однаковим між випусками, оновленням, оновленням або будь-яким випадковим рядком, а не чимось, що видається дійсним "номером версії".

android:versionName - Значення рядка, яке представляє версію коду програми, як це повинно бути показано користувачам.

Значення - це рядок, щоб ви могли описати версію програми як <major>.<minor>.<point>рядок або як будь-який інший тип абсолютного або відносного ідентифікатора версії.

Різниця між versionName та versionNumber в Android

В той час, android:versionCodeяк примусовий припис має бути наростаючим при випуску цілим числом.


Документація Apple

Як зазначається в нещодавно прийнятій відповіді , Apple нещодавно опублікувала Технічну записку, в якій детально описує їх версію та схему числення номерів:

Технічна примітка Apple TN2420 - номери версій та номери збірки


Докладний відповідь з скріншотом: stackoverflow.com/a/31921249/936957
Юнус Nedim Mehel

Відповіді:


115

Технічна примітка Apple TN2420, номери версій та номери версій

Підсумок:

  • Пара ( Version, Build number) повинна бути унікальною.
    • Послідовність дійсна: (1.0.1, 12) -> (1.0.1, 13) -> (1.0.2, 13) -> (1.0.2, 14) ...
  • Version( CFBundleShortVersionString ) має бути у порядку зростання у порядку зростання.
  • Build number( CFBundleVersion ) має бути у порядку зростання у порядку зростання.

Код версії та номер версії

Ось кілька речей, які ви можете перевірити, подаючи нову збірку в App Store. Переконайтесь, що ваш номер версії та номер збірки встановлено належним чином, допоможе вам, уникаючи автоматичного відхилення вашої програми за неправильне налаштування.

  1. Для кожної нової версії вашого додатка вам потрібно винайти новий номер версії. Це число має бути більшим значенням, ніж останній номер версії, який ви використовували. Хоча ви можете надати багато версій для будь-якого випуску додатка, вам потрібно використовувати лише один новий номер версії для кожної нової версії додатка.
  2. Ви не можете повторно використовувати номери версій.
  3. Для кожної поданої вами нової збірки вам потрібно буде винайти новий номер збірки, значення якого перевищує останній номер, який ви використовували (для тієї самої версії).
  4. Ви можете повторно використовувати збірні номери в різних поїздах випуску, але ви не можете повторно використовувати збіркові номери в одному поїзді випуску. У додатках macOS ви не можете повторно використовувати номери складання в жодному поїзді випуску.

На підставі контрольного списку діє і наступна (Version, Build Number)послідовність.

  • Випадок: повторне використання Build Numberв різних поїздах випуску. (ПРИМІТКА: НЕ додаток macOS)

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


Я збентежений. Однією з умов є "Ви не можете повторно використовувати номери версій", але в останньому прикладі номери версій залишаються однаковими, а кількість збірок збільшується. Я щось неправильно трактую?
Еміль

@Emil, я думаю, що пара (Version, Number Build) не може бути використана повторно.
AechoLiu

6
Номери версії @EmilParikh можна завантажувати в Apple кілька разів перед випуском , кожен з унікальним номером збірки. Але після його випуску ви не можете повторно використовувати цей номер версії.
pamamb

1
TN2420 говорить: "Номери версій і номери складання можуть містити до трьох компонентів, розділених періодами", а потім надає наступний незаконний приклад 1.10000.1.5 . Однак схоже на те, що багато додатків, зокрема хром, використовують номер версії, який містить 4 компоненти (наприклад, 68.0.3440.83 ). Я думаю, це можна пояснити тим, що на сторінці TN2420 згадується " Важливо: Цей документ більше не оновлюється ". Однак я не зміг знайти оновленого документа, який визначає нові правила. Хтось ще плутав?
катаман

@catanman Мені подобається ця семантична версія . Нехай версія буде складена з (major, minor, patch)манерою. Раніше я використовував 4 компоненти, але App Store не приймає цей формат із 4 компонентами.
AechoLiu

38

Він CFBundleShortVersionStringповинен відповідати номеру версії, яку ви надаєте iTunes Connect. Це також номер версії, який з’являється, коли користувач переглядає ваш додаток у App Store.

Номер версії відображається в магазині, і ця версія повинна відповідати номеру версії, яку ви ввели пізніше в iTunes Connect.

Джерело

Це CFBundleVersionне відображається в App Store, але використовується iTunes для визначення часу оновлення вашої програми.

Якщо ви оновлюєте рядок збирання, як описано у розділі "Налаштування номера версії та рядка збірки", iTunes розпізнає, що рядка збірки змінилася і правильно синхронізує новий пакет iOS App Store Package на тестові пристрої.

Джерело

Відповідаючи на ваші запитання конкретніше ...

Які номери версій / збірок потрібно збільшувати, коли в магазин додатків завантажується нова версія додатка?

І те й інше. Один відображається в App Store, інший використовується iTunes для оновлення додатка.

Чи може CFBundleShortVersionString або CFBundleVersion залишатися однаковим між оновленнями додатків?

Ні. (Мета питання, який би тут був випадок використання? Якщо ви будь-яким чином відредагували корисну навантаження, збірка буде іншою, і користувач захоче дізнатися про неї). Якщо ви спробуєте, ви побачите повідомлення про помилки, як показано нижче:

Повідомлення про помилки

Або вони порівнюються з попереднім відповідним номером, щоб забезпечити завантаження чисельно більшої кількості з новою версією програми?

Так. Використання стандарту semver.org .

Чи будь-які цифри CFBundleShortVersionString та CFBundleVersion порівняно один з одним?

Немає.


2
Правильно, я знаю, як використовуються два числа. Виникає питання: обидва з них потрібно , щоб бути збільшено при відпуску нової версії додатка?
pkamb

2
Так, якщо ви спробуєте ввімкнути додаток у App Store, не оновлюючи обох, ви побачите повідомлення про помилку, наприклад, stackoverflow.com/questions/19367893/…
Енді

Дякую, чудова редакція. Спеціально для цього посилання. Валідатор організатора показує помилки "повинен містити вищу версію" як для CFBundleVersion, так і для CFBundleShortVersionString.
пкемб

1
+1 для посилання SemVer ... З огляду на номер версії MAJOR.MINOR.PATCH, збільшуйте: MAJOR версію, коли ви вносите несумісні зміни API, MINOR версію, коли ви додаєте функціональність у зворотно сумісний спосіб, і PATCH версію, коли ви робите назад. -сумісні виправлення помилок.
jeet.chanchawat

Щодо цього: який би тут випадок використання? Якщо ви будь-яким чином відредагували корисну навантаження, збірка буде іншою, і користувач захоче дізнатися про неї . Мій випадок використання полягає в тому, що моя програма була успішно переглянута Apple, але ніколи не виходила в App Store. Я знайшов помилку і хочу її виправити - не змінюючи CFBundleShortVersionString. Чи можливо це? Я хочу відхилити власну програму.
тестування

31

CFBundleShortVersionString - це загальнодоступне "ім'я" версії (приклад: "2.5" або "3.8.1"). Ви повинні збільшувати його при кожному випуску .

CFBundleVersion - номер приватної збірки . Його не помічено в AppStore. Ви повинні збільшувати його при кожному завантаженні . Це означає, що якщо ви коли-небудь відхилите двійковий файл, перш ніж він вийде в Інтернет, і ви хочете завантажити новий бінарний файл, він матиме той самий CFBundleShortVersionString, але повинен мати більш високий CFBundleVersion (наприклад: public "2.5", private "2.5", а потім двійкове відхилення та повторне завантаження приватного "2.5.1")

Редагувати 16 листопада 2016 року:

/ ! \ Властивість CFBundleVersion також використовується (разом із CFBundleName ) у User-Agentзаголовку, надісланому NSURLConnection у вашому коді.

Приклад: якщо CFBundleName є MyApp і CFBundleVersion 2,21, то будь-який програмний HTTP запит , що посилається безпосередньо коду з допомогою NSURLConnection буде вставляти заголовок:

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

(Це не стосується запитів, автоматично виданих UIWebView).


2
Велика різниця між вимогами до завантаження / випуску.
pkamb

@gabriel, я намагався встановити номер збірки на XX-rc2, але валідатор Організатора не дозволяє мені встановлювати щось інше, ніж XYZ, де X, Y і Z цілі числа: S. Було б чудово мати номер збірки -rc2, чи могли ви коли-небудь надіслати один реліз разом із ним?
Нестор

1
@nestor Ти маєш рацію, я помилявся. Дозволені лише номери. Дозвольте відредагувати свою відповідь.
Габріель

@gabriel, я використовую скрипт для синтаксичного аналізу X.X-rc2для X.X.2для системи CI , щоб згенерувати buildNumberдля завантаження в iTunesConnect.
AechoLiu

5

CFBundleVersion та CFBundleShortVersionString повинні бути більшими, ніж номер останньої версії програми. Це хороша практика зберегти їх однаковими. Ви повинні їх знайти у своєму -info.plist.

Якщо ви спробуєте перевірити додаток в організаторі, він видасть помилку, якщо жодна з них не зросла. Сталося зі мною минулої ночі.


У обох питаннях я згадав обидва ці ключі. Тут ви відповідаєте, що обидва ці значення слід збільшувати? Чи можете ви краще підтримати свою відповідь?
pamamb

Так, обидва потрібно нарощувати. Минулої ночі, коли я намагався подати їх перед збільшенням, він скаржився на обидва ключі.
xoail

Дякуємо за додаткову інформацію. Ви повинні відредагувати свою відповідь, щоб додати досвід під час завантаження збірки.
pamamb

6
"Це хороша практика зберігати їх однаково" - це не обов'язково так. Якщо у вас є тестери, які працюють над вашим додатком, ви, можливо, хочете збільшити номер складання, коли застосовуються зміни, але збережіть номер своєї версії однаковим. Використовуючи безперервну інтеграцію, ви можете змусити його оновити свій номер збірки перед тим, як розгорнути на тестери, наприклад
Енді

@Анди ти маєш рацію, має сенс. Дякуємо, що вказали на тему використання. Я думав лише з точки зору єдиного середовища для розробника / тестера.
xoail

5

Обидва CFBundleVersionі CFBundleShortVersionString повинен бути збільшений при випуску нової версії в App Store.

Крім того, один з рядків повинен відповідати версії, визначеній в iTunes Connect.

Помилка валідатора Xcode Organizer: має збільшити номер версії.

Це питання включає наведений вище знімок валідатора Xcode Organizer's Validator, який відмовляється перевіряти додаток, коли CFBundleVersionі CFBundleShortVersionStringне були збільшені.

  • Цей пакет недійсний. Значення ключа CFBundleVersion[1.0] у файлі Info.plist має містити більш високу версію, ніж версія раніше завантаженої версії [1.134].

  • Цей пакет недійсний. Значення ключа CFBundleShortVersionString[1.0] у файлі Info.plist має містити більш високу версію, ніж версія раніше завантаженої версії [1.134].

Валідатор також видає помилку, доказуючи, що один з рядків повинен відповідати версії програми, створеного в iTunes Connect.

  • Невідповідність версій. Ні CFBundleVersion ['1.0'], ні CFBundleShortVersionString ['1.0'] в Info.plist не відповідають версії програми, встановленої в iTunes Connect ['1.4'].

2

Поточна технічна примітка Apple TN2420, Numbers версії та номери збірки говорить (моє жирне шрифт ):

  1. Для додатків iOS ви можете повторно використовувати номери складання в різних поїздах випуску, але ви не можете повторно використовувати номери складання в одному поїзді випуску. У додатках macOS ви не можете повторно використовувати номери складання в жодному поїзді випуску .

На жаль, це означає, що ви не можете використовувати номер збірки, який відстежує номер випуску поїзда на iOS, коли ви намагаєтесь випустити ту саму збірку на Mac Catalyst.

У моєму випадку, наприклад, через деякі попередні проблеми я закінчив випускати 1.0.2 (4) як додаток Mac Catalyst, який відповідав 1.0.2 (1) на iOS. Тепер при спробі випустити 1.0.3 (1) на обох, додаток не підтримує перевірку на MacOS через номер збірки, в той час як він проходить перевірку на iOS.

Я думаю, що тепер, коли я випускаю одне і те саме додаток для iOS і MacOS звичайно, я буду приймати номери збірки, які відповідають даті, наприклад, 20200111 та приріст із десятковою комою, якщо мені потрібно змінити номер збірки в межах даного випуску.


1

Вам потрібно збільшити обидва .

Завантажуючи нову версію, вам потрібно буде створити нову версію на iTunes Connect, яка автоматично буде вище попередніх версій. Цю версію в iTunes Connect очікує двійковий файл з тим же номером версії, тому її CFBundleShortVersionStringпотрібно збільшувати.

Якщо ви оновите версію, але забудете її збільшити CFBundleVersion, ви отримаєте помилку під час завантаження. Дивіться відповідь і скріншот pkamb.

Детальніше про CFBundleShortVersionStringта CFBundleVersion, будь ласка, дивіться: https://stackoverflow.com/a/31921249/936957


1

Я можу підтвердити, що тільки що спробував це обома способами, що послідовність версій і кількість збірок, як ...

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

... буде прийнято для програм iOS, але для Mac (Catalyst) додатки повернуть цю помилку:

ПОМИЛКА ITMS-90061: "Цей пакет недійсний. Значення для ключа CFBundleVersion [1] у файлі Info.plist має містити більш високу версію, ніж версія раніше завантаженої версії [2]."

Версія для Mac і номери версій повинні йти як ...

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

Для iOS я вводив номери побудови як номер версії плюс четверту цифру, наприклад ...

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

... але це також заборонено для додатків Mac. Коли я спробував подати свою першу програму Mac (Catalyst), Apple прийняла лише номер збірки з трьома або меншими цифрами:

ПОМИЛКА ITMS-9000: "Цей пакет недійсний. Значення для ключа CFBundleVersion [1.0.0.1] у файлі Info.plist має бути переліченим періодом не більше трьох невід'ємних цілих чисел."

Тож я змінив на єдине число, що збільшується для кожної збірки, і продовжує збільшуватися через номери версій.


Чи є у вас яке-небудь повідомлення про помилку, яке воно вам надавало? Будь ласка, цитуйте їх, якщо так!
пкамб

0

Я готуюся випустити нову програму Mac App Store. Використання форматування CalVerYEAR.release (build) .

Я завантажив кілька збірок: 2020.0 (1), 2020.0 (2)і т.д. Я , нарешті , представлений 2020.0 (8)на App Store Review. Ця перевірка пройшла і знаходиться у стані очікування випуску розробника .

Я хотів , щоб виправити кілька речей , перед випуском, так що я додав нову збірку в тому ж потязі реліз: 2020.0 (9).

Це призводить до помилки:

Помилка операції підключення App Store

ПОМИЛКА ITMS-90062 : "Цей пакет недійсний. Значення ключа CFBundleShortVersionString[2020.0] у файлі Info.plist має містити більш високу версію, ніж версія попередньо затвердженої версії [2020.0]. Будь ласка, знайдіть більше інформації про те CFBundleShortVersionStringна https: // developer.apple.com/documentation/bundleresources/information_property_list/cfbundleshortversionstring "

що дратує, оскільки моя 2020.0версія ніколи фактично не виходила . З прийнятої відповіді на це питання я мав враження, що доки програма не буде доступна в App Store, ви можете продовжувати випускати нові збірки з тією ж версією.

Здається, рішення "поїзд випуску" (та сама версія + нова збірка) не може бути оновлений, якщо стан програми очікує випуску розробника . Або випустіть існуючу версію, а потім збільште версію, або Скасуйте цю версію в App Store Connect, щоб дозволити подальше завантаження цього поїзда випуску.


-2

AFAIK, у верхній частині моєї голови, вам потрібно лише збільшити номер збірки CFBundleVersion. Збільшення рядка короткої версії не обов'язково потрібне, хоча ви, ймовірно, повинні збільшувати його, оскільки це скаже користувачеві, що додаток новий. Apple каже, що нумерація повинна відповідати традиційним умовам версій програмного забезпечення, проте iTunes Connect може скаржитися, якщо ви спробуєте перезавантажити вже наявну версію.

Довга коротка історія, це може спрацювати, але, мабуть, ні.


Шукайте авторитетних відповідей на те, які ключі потрібно нарощувати. Якщо CFBundleShortVersionStringне потрібно збільшувати, то "таку" версію для користувача, яку ви можете скористатися, можна потім кілька разів завантажувати в App Store?
пкемб
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.