Apple вроде переставила / переставила поля.
В дальнейшем, если вы посмотрите на вкладке «Информация» для своей цели приложения, вы должны использовать «Строка версий пакета, короткая» в качестве вашей версии (например, 3.4.0) и «Версия пакета» в качестве вашей сборки (например, 500 или 1A500). Если вы не видите их обоих, вы можете добавить их. Они будут отображаться в соответствующие текстовые поля Version и Build на вкладке Summary; это одинаковые значения.
При просмотре вкладки «Информация», если щелкнуть правой кнопкой мыши и выбрать Показать необработанные ключи / значения , вы увидите фактические имена CFBundleShortVersionString
(Версия) и CFBundleVersion
(Сборка).
Версия обычно используется так, как вы, похоже, использовали ее с Xcode 3. Я не уверен, на каком уровне вы спрашиваете о разнице между версией и сборкой, поэтому я отвечу на это философски.
Существуют всевозможные схемы, но популярной является:
{MajorVersion}. {MinorVersion}. {} Редакция
- Основная версия - Основные изменения, изменения и функциональность
изменения
- Незначительная версия - Небольшие улучшения, дополнения к функциональности
- Редакция - Номер патча для исправления ошибок
Затем сборка используется отдельно для указания общего количества сборок для выпуска или для всего срока службы продукта.
Многие разработчики начинают номер сборки с 0, и каждый раз, когда они собирают, они увеличивают число на единицу, увеличиваясь навсегда. В моих проектах у меня есть скрипт, который автоматически увеличивает номер сборки при каждой сборке. См. Инструкции по этому вопросу ниже.
- Релиз 1.0.0 может быть сборкой 542. Чтобы добраться до
Выпуск 1.0.0.
- Выпуск 1.0.1 может быть сборкой 578.
- Выпуск 1.1.0 может быть сборкой 694.
- Выпуск 2.0.0 может быть сборкой 949.
Другие разработчики, включая Apple, имеют номер сборки, состоящий из основной версии + вспомогательной версии + количество сборок для выпуска. Это фактические номера версий программного обеспечения, а не значения, используемые для маркетинга.
Если вы перейдете в меню Xcode > О Xcode , вы увидите номера версий и сборок. Если вы нажмете кнопку Подробнее ... , вы увидите множество разных версий. Поскольку кнопка Подробнее ... была удалена в Xcode 5, эта информация также доступна из раздела Программное обеспечение> Разработчик приложения Информация о системе , доступного открыв меню Apple > Об этом Mac > Системный отчет ... .
Например, Xcode 4.2 (4C139). Маркетинговая версия 4.2 - это основная сборка версии 4, дополнительная сборка версии C и сборка № 139. Следующим выпуском (предположительно 4.3), скорее всего, будет сборка 4D, и номер сборки начнется с 0 и будет увеличиваться оттуда.
Номера версий / сборок iPhone Simulator такие же, как и iPhone, Mac и т. Д.
- 3.2: (7W367a)
- 4,0: (8A400)
- 4,1: (8B117)
- 4,2: (8C134)
- 4,3: (8H7)
Обновление : По запросу, вот шаги для создания сценария, который запускается каждый раз, когда вы строите свое приложение в XCode, чтобы прочитать номер сборки, увеличить его и записать обратно в приложение {App}-Info.plist
файл. Существуют необязательные дополнительные шаги, если вы хотите записать свои номера версий / сборок в ваши файлы Settings.bundle/Root*.plist
.
Это расширение из статьи с инструкциями здесь .
В Xcode 4.2 - 5.0:
- Загрузите ваш проект Xcode.
- В левой панели щелкните ваш проект в самом верху иерархии. Это загрузит редактор настроек проекта.
- В левой части центральной панели окна щелкните свое приложение под заголовком TARGETS . Вам нужно будет настроить эту настройку для каждой цели проекта.
- Выберите вкладку Фазы сборки .
- В Xcode 4 в правом нижнем углу нажмите кнопку Add Build Phase и выберите Add Run Script .
- В Xcode 5 выберите Редактор menu> Добавить этап сборки > Добавить этап запуска сценария сборки .
- Перетащить и отпустить новый Запустите этап Script , чтобы переместить его непосредственно перед этапом Copy Bundle Resources (когда файл app-info.plist будет связан с вашим приложением).
- В новом Выполнить сценарий фаза, установить Оболочка :
/bin/bash
. Скопировать и вставить следующее в область сценария для целых чисел сборки:
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE"
Как указал @Bdebeez, также доступен универсальный инструмент управления версиями Apple (agvtool
).Если вы предпочитаете использовать его вместо этого, то сначала нужно изменить несколько параметров:
- Выберите вкладку Настройки сборки .
- Под В разделе управления версиями установите Текущую версию проекта на начальный номер сборки, который вы хотите использовать, например, 1 .
- Вернитесь к BuildЗакладка Phases , перетащите и отпустите вашу Run Script фазу после фазы Copy Bundle Resources , чтобы избежать условия гонки при попытке создать и обновить исходный файл, который включает в себяВаш номер сборки.
Обратите внимание, что при использовании метода agvtool
вы все равно можете периодически получать неудачные / отмененные сборки без ошибок.Поэтому я не рекомендую использовать agvtool
с этим сценарием.
Тем не менее, на этапе Run Script вы можете использовать следующий сценарий:
"${DEVELOPER_BIN_DIR}/agvtool" next-version -all
Аргумент next-version
увеличивает номер сборки (bump
также является псевдонимом для того же самого) и -all
обновляет Info.plist
новым номером сборки.
И если у вас есть пакет настроек, в котором вы показываете версию и сборку, вы можете добавить следующее в конец скрипта для обновления версии и сборки. Примечание. Измените значения PreferenceSpecifiers
в соответствии с вашими настройками.PreferenceSpecifiers:2
означает, что посмотрите на элемент в индексе 2 в массиве PreferenceSpecifiers
в вашем файле plist, поэтому для индекса на основе 0 это третий параметр предпочтения в массиве.
productVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
Если вы используете agvtool
вместо чтения Info.plist
напрямую, вы можете вместо этого добавить в свой скрипт следующее:
buildNumber=$("${DEVELOPER_BIN_DIR}/agvtool" what-version -terse)
productVersion=$("${DEVELOPER_BIN_DIR}/agvtool" what-marketing-version -terse1)
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root.plist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root.plist
И если у вас есть универсальное приложениедля iPad и iPhone вы также можете установить настройки для файла iPhone:
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:2:DefaultValue $buildNumber" Settings.bundle/Root~iphone.plist
/usr/libexec/PlistBuddy -c "Set PreferenceSpecifiers:1:DefaultValue $productVersion" Settings.bundle/Root~iphone.plist