В чем разница между «номером версии» в iTunes Connect, «версией пакета» и «строкой версии пакета» в Xcode?

95

В документе Apple можно было бы более четко указать, как отправить версию обновления.

Как указано в названии, в чем разница между

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

Связаны ли они каким-либо образом?

Евгений
источник
12
Apple и их непонятные термины / поля ...: /
BoltClock
См. Мой предыдущий ответ: stackoverflow.com/a/31921249/936957
Юнус Недим Мехель

Ответы:

145

Да, они связаны. Все они относятся к версии вашего приложения.

  • 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а затем увеличиваете версию пакета для каждой сборки.
Fabian Kreiser
19
ЭТО НЕПРАВИЛЬНО CFBundleVersion должен быть в наличии для xyz, иначе загрузка сборки не удастся! link
snlehton
2
Недавно я отправил сборку с CFBundleVersion с «1.0.2 RC3», и она вернулась с сообщением об ошибке: «Пакет недействителен. Ключ CFBundleVersion в файле Info.plist должен быть списком неотрицательных целых чисел, разделенных точками». Я думаю, что формат nn.n.nxnnn является правильным для использования, но еще не пробовал его.
snlehton
3
CFBundleВерсия 1235 здесь, без проблем
Петр Томасик
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, иначе вы рискуете не использовать определенные номера версий в будущем, потому что их невозможно будет увеличить.

Malhal
источник
2
Только эта таблица лучше всего объясняет, как эти два числа связаны и используются на практике. Спасибо.
Джошуа Пинтер,
Должен соответствовать версии iTunes Connect. Это несложное требование (даже если оно должно быть
Марко Паппалардо,
13

Да, все они связаны.

Номер версии в itunesconnect - это номер версии, которую вам необходимо указать. Например, 2.1.1 или 3.1.2 и т.д. Это также должно быть равно CFBundleShortVersionString .

Версия пакета в Xcode ( CFBundleVersion ) представляет собой просто номер сборки, который определяет итерацию (выпущенную или невыпущенную) приложения.

Строка версий пакета , короткая ( CFBundleShortVersionString ) - это число, состоящее из трех целых чисел, разделенных точками. Первый представляет собой любые основные обновления приложения, такие как обновления, реализующие новые функции или важные изменения. Второе целое число обозначает версии, реализующие менее заметные функции. Третье целое число представляет отладочные версии.

Mayuur
источник
3
На самом деле, «Строка версий пакета, короткая» не обязательно должна состоять из ТРИ чисел, разделенных точками. Я думаю, что «1» и «1.1» тоже верны.
Николас Миари
на самом деле из моего тестирования Номер версии в itunesconnect полностью не зависит от CFBundleVersion и ShortVersion. Так что вы даже можете сделать их разными,
Марко Паппалардо
11

Будьте осторожны с CFBundleVersion . Это не только номер производственной сборки. Это значение проверяется Apple в процессе загрузки двоичного файла, и это может привести к сбою.

Убедитесь, что вы установили CFBundleVersion со значением CFBundleShortVersionString, когда вы собираете выпуск для отправки .

См. Этот пост об этом

Aponaute
источник
3
Это верная информация, принятый ответ на самом деле неверен.
snlehton
9
Это неверно, CFBundleVersionне обязательно совпадать CFBundleShortVersionString. Например, если вы посмотрите на текущий файл .ipa для Chrome (сейчас он находится в магазине приложений), у них будет «34.0.1847.18» для CFBundleVersionи «34.1847.18» для CFBundleShortVersionString.
progrmr
6
Нет документации о том, что CFBundleVersion и CFBundleShortVersionString должны быть одинаковыми.
Toydor
8

Принятый ответ - это правильный путь - просто добавив это в качестве примера.

Для нашего последнего выпуска требовалась «короткая строка версии пакета», и я пошел дальше и сопоставил ее с номером версии пакета (1.2.8 для нашего приложения).

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

Прочитав несколько ссылок SO и документов Apple, я понял, что нужно сделать версию пакета: 1.2.8.001, сохраняя при этом сокращенную версию пакета, как это было. Если требуется новая сборка, мы увеличиваем версию пакета до 1.2.8.002.

Примечание: загрузка была принята, и сборка отображается как «1.2.8.001» в предварительном выпуске. Номер версии остается 1.2.8.

ахаш
источник
3

Принятый ответ по этой ссылке содержит хорошие сведения: какие версии / номера сборки приложения iOS ДОЛЖНЫ быть увеличены после выпуска App Store?

Из документов Apple

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

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

CFBundleShortVersionString (строка версий пакета , короткая)

CFBundleShortVersionString (String - iOS, OS X) указывает номер версии выпуска пакета, который определяет выпущенную итерацию приложения. Номер версии выпуска представляет собой строку, состоящую из трех целых чисел, разделенных точкой. Первое целое число представляет основные версии приложения, например, версии, в которых реализованы новые функции или важные изменения. Второе целое число обозначает версии, реализующие менее заметные функции. Третье целое число представляет отладочные версии.

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

морда
источник