Программирование

Разница между Version и Build в Xcode: Что такое для iOS?

Узнайте разницу между CFBundleShortVersionString и CFBundleVersion в Xcode, почему поле Version остаётся пустым после миграции и как держать их в синхронизации.

Version vs Build in Xcode

Я работал над приложением, которое изначально было создано в Xcode 3, и только сейчас начал редактировать его в Xcode 4. В сводке цели вы увидите форму целевого приложения iOS с такими полями: идентификатор (identifier), версия (version), сборка (build), устройства (devices) и целевая версия iOS (deployment target). Поле версия пустое, а поле сборка показывает 3.4.0 — то же число, которое было версией приложения, когда я работал в Xcode 3.

Мои вопросы:

  1. В чём разница между полями версия и сборка?
  2. Почему поле версия остаётся пустым после перехода на Xcode 4?

В Xcode 4 поле Version отображает значение ключа CFBundleShortVersionString, а поле Build показывает CFBundleVersion.
Если ключ CFBundleShortVersionString отсутствует или пустой в Info.plist вашего приложения, Xcode оставляет поле Version пустым – вы сразу заметите, что оно не заполняется.
Именно поэтому после обновления поле осталось пустым, хотя поле Build всё ещё показывает старый номер версии, который был сохранён в CFBundleVersion.


Содержание


Что представляет каждый пункт

Поле Ключ в Info.plist Назначение Формат Типичное использование
Version CFBundleShortVersionString Публичная версия, видимая пользователю (App Store, Настройки) Три разделённых точками целых числа (например, 1.0.3) Увеличивается при публикации новой версии приложения
Build CFBundleVersion Внутренний идентификатор сборки для разработчиков Любая строка, часто монотонно возрастающий номер или метка сборки (например, 42, 1A42) Увеличивается при каждой сборке, используется для диагностики, загрузки в App Store и CI‑счётчиков

Документация Apple уточняет, что CFBundleShortVersionString представляет выпускную версию, тогда как CFBundleVersion представляет любую сборку, опубликованную или нет 【1】.
В Xcode 4 сводка цели теперь напрямую связывает эти ключи с полями Version и Build соответственно.


Почему поле Version пустое в Xcode 4

При миграции проекта из Xcode 3:

  1. Конвенция Xcode 3 – большинство проектов Xcode 3 использовали только CFBundleVersion для хранения публичной версии и оставляли CFBundleShortVersionString неустановленным.
  2. Изменение в Xcode 4 – Xcode 4 ожидает наличие CFBundleShortVersionString. Если его нет, UI показывает пустое поле Version.
  3. Результат – поле Build всё ещё отображает 3.4.0, потому что это значение хранится в CFBundleVersion. Поле Version остаётся пустым, потому что CFBundleShortVersionString отсутствует.

Ответ на Stack Overflow отмечает, что после обновления до Xcode 4 «поле Version пустое», когда соответствующий ключ не задан в Info.plist 【2】.


Как исправить и держать оба поля в синхронизации

  1. Откройте вкладку Info целевого проекта в Xcode 4.
  2. Добавьте или отредактируйте поле Bundle versions string, short (это CFBundleShortVersionString).
    • Если его нет, нажмите кнопку + и выберите Bundle versions string, short.
  3. Установите то же значение, которое вы видите в поле Build (например, 3.4.0) или желаемую публичную версию (например, 3.4.0).
  4. Увеличивайте поле Build при каждой новой сборке (например, 3.4.1, 3.4.2).
  5. Автоматизируйте: в скриптах CI обновляйте оба ключа перед архивированием. Типичный скрипт может использовать PlistBuddy для увеличения числовой части CFBundleVersion, при этом оставляя CFBundleShortVersionString неизменным 【3】.

После этих шагов поле Version будет показывать правильную публичную версию, а поле Build будет отслеживать внутренние итерации.


Быстрый справочный таблица

Xcode 3 Xcode 4
VersionCFBundleVersion VersionCFBundleShortVersionString
BuildCFBundleVersion BuildCFBundleVersion (часто совпадает с Version)
Пустой CFBundleShortVersionString → пустое поле Version Отсутствующий ключ → пустое поле Version

Заключение

  • Version = CFBundleShortVersionString (публичная, разделённая точками, три части).
  • Build = CFBundleVersion (внутренняя, любая строка).
  • Пустое поле Version после миграции в Xcode 4 связано с тем, что CFBundleShortVersionString не задан.
  • Просто добавьте или обновите этот ключ в вкладке Info целевого проекта и держите оба значения синхронизированными для плавного рабочего процесса релиза.

Источники

  1. Apple Developer Documentation – CFBundleShortVersionString & CFBundleVersion
  2. Stack Overflow: Version vs build in Xcode
  3. Stack Overflow: Version and Build Information Error Xcode 4
Авторы
Проверено модерацией
Модерация