Яка різниця між "номером версії" в iTunes Connect, "версією пакета", "рядком версії пакета" в Xcode?


94

Документ Apple міг би бути більш чітким щодо подання оновленої версії.

Як запитується в назві, у чому різниця

  1. номер версії в itunes connect (який ви повинні вказати під час надсилання оновлення)
  2. версія пакета в xcode
  3. рядок версій набору, короткий

Чи пов’язані вони якимось чином?


12
Apple та їхні заплутані терміни / поля ...: /
BoltClock

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

Відповіді:


143

Так, вони пов’язані між собою. Усі вони посилаються на версію вашої програми.

  • iTunes Connect
    Це номер версії, показаний в App Store; Це має бути чистий номер версії, наприклад1.2.3

  • Версія пакета (CFBundleVersion)
    Це не повинен бути чистий номер версії. Це може бути щось на зразок 12345або 1.2.3 (Build 12345AB). Наприклад, це показано у вікні Про програму для Mac OS X і часто є більше "номером збірки", ніж "номером версії".

  • Рядок версії набору (CFBundleShortVersionString) Це значення використовується як "справжній" номер версії. Це має бути той самий рядок, що і для версії в iTunes Connect .

Оновлення:
Як зазначає @snlehton, CFBundleVersion має бути чистим номером версії, наприклад, 1.2.3коли ви хочете завантажити свою програму в (iOS) App Store.


3
Для тестування ви встановлюєте рядок версії набору до остаточного номера версії, наприклад, 1.2.3а потім збільшуєте версію набору для кожної збірки.
Фабіан Крейзер

19
ЦЕ НЕПРАВИЛЬНО CFBundleVersion має бути для xyz, інакше завантаження збірки не вдасться! посилання
snlehton

2
Нещодавно я надіслав збірку з CFBundleVersion з "1.0.2 RC3", і вона відскочила із повідомленням про помилку: "Пачка недійсна. Ключ CFBundleVersion у файлі Info.plist повинен бути розділеним крапками списком невід'ємних цілих чисел." Я думаю, що nn.n.nxnnn є правильним форматом для використання, але ще не випробував його.
snlehton

3
CFBundleVersion 1235 тут, жодних проблем
Piotr Tomasik

4
Плутанина тут полягає в тому, що CFBundleShortVersionString є необов’язковим, і коли він встановлений, він змінює те, для чого використовується CFBundleVersion. Якщо включає лише CFBundleVersion, то це повинен бути загальнодоступний номер версії, наприклад 1.0. Однак якщо встановлені як CFBundleVersion, так і CFBundleShortVersionString, тоді CFBundleShortVersionString тепер повинен мати загальнодоступний номер версії, наприклад 1.0. І тепер CFBundleVersion змінюється на номер збірки, який зазвичай є єдиним цілим числом, наприклад 374629. Сподіваємось, це очищає це.
malhal

27

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

  • Версія iTunes Connect

    Завжди повинен бути номер версії, наприклад 1.0

Режим використання 1 - встановлено лише CFBundleVersion

  • Версія пакета (CFBundleVersion)

    Має бути номер версії, наприклад 1.0. Повинна відповідати версії iTunes Connect.

Режим використання 2 - встановлені як CFBundleVersion, так і CFBundleShortVersionString

  • Версія пакета (CFBundleVersion)

    Це має бути номер збірки, наприклад, одне ціле число, наприклад 435163.

  • Рядок короткої версії набору (CFBundleShortVersionString)

    Має бути номер версії, наприклад 1.0. Повинна відповідати версії iTunes Connect.

Режим використання 2 - найкращий спосіб. Ось кілька прикладів номерів шляху оновлення програми:

CFBundleShortVersionString CFBundleVersion 
1.0                        1
1.0.1                      2
1.0.2                      3
1.2                        5  (build 4 was a beta and never released publicly)
1.2.1                      6

Додаткова примітка щодо номерів версій: Якщо ви подаєте незначне оновлення (наприклад, виправлення помилок) у свій додаток, ви ніколи не повинні пропускати періоди в номері версії, наприклад, завжди використовуйте 1.0.1 і НІКОЛИ 1.01, інакше ви ризикуєте не мати можливості використовувати певні номери версій у майбутньому, оскільки збільшити їх буде неможливо.


2
Ця таблиця найкраще справляється з поясненням того, як ці два числа пов’язані та використовуються на практиці. Дякую.
Джошуа Пінтер,

Повинна відповідати версії iTunes Connect. Це не важка вимога (навіть якщо це повинно бути ОБОВ’ЯЗКОВО)
Марко Паппалардо

13

Так, вони всі пов’язані.

Номер версії в itunesconnect - це номер версії, який потрібно надати. Наприклад, 2.1.1 або 3.1.2 тощо. Це також має бути рівним CFBundleShortVersionString .

Версія набору в Xcode ( CFBundleVersion ) являє собою лише номер збірки, який ідентифікує ітерацію (випущену чи невипущену) програми.

Рядок версій набору , короткий ( CFBundleShortVersionString ) - це число, що складається з трьох цілих чисел, розділених крапками. Перший представляє будь-які основні оновлення програми, такі як оновлення, що реалізують нові функції або основні зміни. Друге ціле число позначає версії, що реалізують менш помітні риси. Третє ціле число представляє випуски технічного обслуговування.


3
Насправді, "Рядок версій пакета, короткий" не повинен мати ТРИ числа, розділені крапками. Я думаю, що "1" та "1.1" також є дійсними.
Ніколас Міарі,

насправді від мого тестування Номер версії в itunesconnect повністю не залежить від CFBundleVersion і ShortVersion. Тож ви можете навіть мати їх по-різному
Марко Паппалардо

11

Будьте обережні щодо CFBundleVersion . Це не тільки номер побудови виробництва. Це значення перевіряється Apple під час двійкового завантаження, і воно може його не виконати.

Переконайтеся, що ви встановлюєте CFBundleVersion зі значенням CFBundleShortVersionString під час створення випуску для подання.

Побачити цю публікацію про це


3
Це правильна інформація, прийнята відповідь насправді неправильна.
snlehton

9
Це неправильно, CFBundleVersionне повинно збігатися CFBundleShortVersionString. Наприклад, якщо ви подивитесь на поточний файл .ipa для Chrome (у магазині програм зараз), у них є "34.0.1847.18" для CFBundleVersionта "34.1847.18" для CFBundleShortVersionString.
progrmr

6
Немає документації про те, що CFBundleVersion і CFBundleShortVersionString повинні бути однаковими.
Тойдор

8

Прийнята відповідь - це шлях - просто додавши це як приклад.

Для нашого останнього випуску була потрібна "Рядок версії Bundle, короткий", і я продовжив і зіставив її з номером версії Bundle (1.2.8 для нашого додатка).

Потім я увімкнув Testflight і зробив доступною для наших внутрішніх тестувальників версію до огляду Apple (1.2.8). Проте тестер виявив проблему, яка вимагала виправлення, і ми видалили двійковий файл на місці. Під час завантаження нової збірки ми отримали помилку із зазначенням, що версія збірки вже завантажена.

Прочитавши кілька посилань на SO та документи Apple, я зрозумів, що потрібно зробити версію пакета: 1.2.8.001, підтримуючи при цьому bundle-version-short такою, якою вона була. Якщо потрібна нова збірка, ми збільшуємо версію пакета до 1.2.8.002.

Примітка: завантаження було прийнято, і збірка відображається як "1.2.8.001" під попередньою версією. Номер версії залишається 1.2.8.


3

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

З apple docs

CFBundleVersion (версія пакета )

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

CFBundleShortVersionString (рядок версій набору , короткий)

CFBundleShortVersionString (рядок - iOS, OS X) визначає номер версії пакета, що визначає випущену ітерацію програми. Номер версії випуску - це рядок, що складається з трьох цілих чисел, розділених періодами. Перше ціле число представляє основні зміни програми, такі як редакції, що реалізують нові функції або основні зміни. Друге ціле число позначає версії, що реалізують менш помітні риси. Третє ціле число представляє випуски технічного обслуговування.

Значення цього ключа відрізняється від значення для CFBundleVersion, яке ідентифікує ітерацію (випущену чи невипущену) програми. Цей ключ можна локалізувати, включивши його до ваших файлів InfoPlist.strings.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.