Apple вроде как переставила / переставила поля.
В дальнейшем, если вы посмотрите на вкладку «Информация» для своей цели приложения, вы должны использовать «Строка версий пакета, короткая» в качестве вашей версии (например, 3.4.0) и «Версия пакета» в качестве вашей сборки (например, 500 или 1A500). ). Если вы не видите их обоих, вы можете добавить их. Они будут отображаться в соответствующие текстовые поля Version и Build на вкладке Summary; они одинаковые значения.
При просмотре вкладки «Информация», если щелкнуть правой кнопкой мыши и выбрать « Показать необработанные ключи / значения» , вы увидите, что фактические имена CFBundleShortVersionString
(Версия) иCFBundleVersion
(Сборка).
Версия обычно используется так, как вы, похоже, использовали ее с Xcode 3. Я не уверен, на каком уровне вы спрашиваете о разнице между версией и сборкой, поэтому я отвечу на это философски.
Существуют всевозможные схемы, но популярной является:
{MajorVersion}. {MinorVersion}. {} Редакция
- Основная версия - Основные изменения, изменения дизайна и функциональности
- Незначительная версия - Незначительные улучшения, дополнения к функционалу
- Revision - номер патча для исправления ошибок
Затем сборка используется отдельно для указания общего количества сборок для выпуска или для всего срока службы продукта.
Многие разработчики начинают номер сборки с 0, и каждый раз, когда они строят, они увеличивают число на единицу, увеличиваясь навсегда. В моих проектах у меня есть скрипт, который автоматически увеличивает номер сборки при каждой сборке. Смотрите инструкции для этого ниже.
- Релиз 1.0.0 может быть сборкой 542. Чтобы получить релиз 1.0.0, потребовалось 542 билда.
- Выпуск 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 такие же, как и 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.
- На левой панели щелкните ваш проект в самом верху иерархии. Это загрузит редактор настроек проекта.
- В левой части центральной панели окна щелкните свое приложение под ЦЕЛЯМИ. заголовком . Вам нужно будет настроить эту настройку для каждой цели проекта.
- Выберите вкладку Build Phases .
- В Xcode 4 в правом нижнем углу нажмите кнопку Add Build Phase и выберите Add Run Script .
- В Xcode 5 выберите меню « Редактор» > « Добавить этап сборки» > « Добавить этап построения сценария запуска» .
- Перетащите новую фазу « Выполнить сценарий», чтобы переместить ее непосредственно перед копированием ресурсов комплекта. фазой (когда файл app-info.plist будет связан с вашим приложением).
- В новом Run Script фазы, набор Shell :
/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 Generic Versioning Tool ( agvtool
). Если вы предпочитаете использовать его вместо этого, то сначала нужно изменить пару вещей:
- Выберите настройки сборки вкладку « ».
- В разделе «Управление версиями » установите для текущей версии проекта начальный номер сборки, который вы хотите использовать, например 1 .
- Вернувшись на вкладку « Фазы сборки », перетащите фазу « Выполнить сценарий» после фазы « Копировать ресурсы комплекта», чтобы избежать условия гонки при попытке создать и обновить исходный файл, содержащий ваш номер сборки.
Обратите внимание, что с помощью этого agvtool
метода вы все равно можете периодически получать неудачные / отмененные сборки без ошибок. По этой причине я не рекомендую использовать agvtool
этот скрипт.
Тем не менее, на этапе Run Script вы можете использовать следующий скрипт:
"${DEVELOPER_BIN_DIR}/agvtool" next-version -all
next-version
Приращения аргумента номер сборки ( bump
также псевдоним для одного и того же), и -all
обновления Info.plist
с новым номером сборки.
И если у вас есть пакет настроек, в котором вы показываете версию и сборку, вы можете добавить следующее в конец скрипта, чтобы обновить версию и сборку. Примечание. Измените PreferenceSpecifiers
значения в соответствии с вашими настройками. PreferenceSpecifiers:2
означает посмотреть на элемент в индексе 2 под PreferenceSpecifiers
массивом в вашем файле plist, так что для индекса на основе 0 это 3-я настройка предпочтений в массиве.
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