Разница между версией Xcode (CFBundleShortVersionString) и сборкой (CFBundleVersion)

94

Сводка цели приложения

В Xcode 4 я вижу это для моей целевой сводки:

Вход «Версия» соответствует CFBundleShortVersionStringзначению в файле info.plist, а вход «Сборка» соответствует CFBundleVersion.

В чем разница между этими двумя? Я вижу много людей в Интернете, которые хотят придать одинаковое значение обоим, и я подозреваю, что это связано с обратной совместимостью.

У меня два вопроса:

1) Если бы я начинал с нуля, что было бы лучше всего для управления версиями вашего приложения?

2) Во всех предыдущих выпусках моего приложения я использовал только CFBundleVersion. Чтобы не испортить процесс обновления, следует ли мне продолжать наращивать CFBundleVersionтаким же образом, или можно ли переключиться на «правильный путь», если он существует?

Филип Уолтон
источник
3
Это дубликат stackoverflow.com/questions/6851660/version-vs-build-in-xcode-4, но, возможно, эта версия лучше заявлена ​​(и имеет снимок экрана).
Дэниел Дикисон
Вам нужно было что-нибудь сделать, чтобы отобразить поле «Сборка» в сводке? Я вижу только версию, но не поле сборки.
Kenny Wyland

Ответы:

68

В документе Apple «Справочник по ключам к списку свойств информации» говорится, что CFBundleShortVersionStringэто версия выпуска, а также CFBundleVersionлюбая сборка, выпущенная или нет. Кроме того, он CFBundleShortVersionStringможет быть локализован, хотя я не знаю, зачем вам это нужно, поскольку они говорят, что это должна быть «строка, состоящая из трех целых чисел, разделенных точкой». Для релизной сборки было бы разумно сделать два числа одинаковыми. Для сборки для разработки вы можете добавить что-нибудь еще CFBundleVersion, возможно, еще одну точку и целое число.

JWWalker
источник
Но если я в настоящее время использую 1.3.1 как свое CFBundleVersionи ничего как свое CFBundleShortVersionString, и я хочу переключиться на использование CFBundleVersionдля представления внутренних сборок, тогда мне нужно хотя бы начать с целого числа выше 1.3.1, верно? Или переключение вызывает проблемы?
Филип Уолтон
Версия ( CFBundleShortVersionString) - единственное, что будет иметь значение для отправки в Apple. Build ( CFBundleVersion) предназначен для использования в процессе разработки или для отображения в приложении. Используйте восьмеричное (base-8) и повторяйте в обратном порядке на 12, если хотите.
nekno
16
nekno: На самом деле CFBundleVersion - это то, что важно для Apple. Проверьте это сообщение об ошибке, которое Apple выдает при отправке приложения: «Загруженный вами двоичный файл недействителен. Ключ CFBundleVersion в файле Info.plist должен содержать более позднюю версию, чем версия ранее загруженной».
malhal
10
В некоторых странах используются цифры, отличные от современных арабских, используемых в западном мире, например, восточный арабский (٠, ١, ٢, ٣, ٤, ٥, ٦, ٧, ٨, ٩) или иврит. (א, ב, ג, ד, ה, ו, ז, ח, ט) - и эти два также пишутся справа налево. Существует еще много других систем счисления (см. En.wikipedia.org/wiki/Category:Numerals ). Я предполагаю, что именно это Apple подразумевает под «локализуемым» номером версии.
Руслан Уланов
Кстати, трех цифр с пунктуацией не требуется. Вместо этого я использовал значение даты и времени, например, 201606070620для обоих значений в приложении iOS 7-8-9.
Basil Bourque
3

На вопрос JWWalker о том, почему вам нужно локализовать CFBundleShortVersionString, это будет десятичный разделитель. Например, в локали, где десятичным разделителем является запятая, версия «1.5» будет «1,5».

Арджун
источник
30
IMO вам не нужно локализовать номера версий. Я живу в регионе, где десятичным разделителем является запятая (Германия), и я привык к номерам версий, разделенным точкой. На самом деле, я не могу вспомнить, чтобы когда-либо видел номер версии с запятой.
Кристиан Шпехт
2
Я также живу в регионе, где в качестве десятичного разделителя используется запятая, хотя 1,3,1 - довольно странное значение, 1.3.1 кажется намного лучше.
Люсьен
1
Думаю, это означает, что у вас могут быть разные версии приложения для разных регионов. 1.2.1> en.lproj 1.2.2> fr.lproj Хотя весь список файлов копируется при локализации файла, поэтому оба номера версии скопированы, так что оба «могут быть локализованы»
brian.clear
1

Быстрая починка:

Просто добавьте CFBundleShortVersionStringв файл plist и отредактируйте свою версию.

  1. Раскройте свой InfoPlist.strings
  2. Выделите его и вставьте приведенный ниже код (при условии, что он находится в режиме исходного кода)

{"CFBundleShortVersionString" = "1.1";}

  1. Измените 1.1 на любую вашу новую сборку.
  2. Создавайте и отправляйте без ошибок!

введите описание изображения здесь

Луи
источник
1

См. Документацию Apple по загрузке двоичных файлов.

Нумерация версий и сборок: iTunes Connect извлекает номер предварительной версии и номер сборки из двоичного файла. Номер предварительной версии - это номер версии Xcode или короткий ключ «Строка версии пакета» в Info.plist. Номер сборки - это номер сборки Xcode или ключ «Версия пакета» в Info.plist. Номер предварительной версии и номер сборки будут отображаться на вкладке «Предварительная версия», как описано в разделе «Просмотр сборок».

Загрузка двоичного файла для приложения

ДжайлсДмидлтон
источник