У меня есть приложение, которое я разработал с Xcode 3 и недавно начал редактировать с помощью Xcode 4. В сводке целей у меня есть целевая форма приложения iOS с полями: идентификатор, версия, сборка, устройства и цель развертывания. Поле версии является пустым, а поле сборки - 3.4.0 (что соответствует версии приложения с того момента, когда я еще редактировал с помощью Xcode 3).
Мои вопросы:
В чем разница между полями версии и сборки?
Почему поле версии было пустым после обновления до Xcode 4?
Ответы:
Apple вроде как переставила / переставила поля.
В дальнейшем, если вы посмотрите на вкладку «Информация» для своей цели приложения, вы должны использовать «Строка версий пакета, короткая» в качестве вашей версии (например, 3.4.0) и «Версия пакета» в качестве вашей сборки (например, 500 или 1A500). ). Если вы не видите их обоих, вы можете добавить их. Они будут отображаться в соответствующие текстовые поля Version и Build на вкладке Summary; они одинаковые значения.
При просмотре вкладки «Информация», если щелкнуть правой кнопкой мыши и выбрать « Показать необработанные ключи / значения» , вы увидите, что фактические имена
CFBundleShortVersionString
(Версия) иCFBundleVersion
(Сборка).Версия обычно используется так, как вы, похоже, использовали ее с Xcode 3. Я не уверен, на каком уровне вы спрашиваете о разнице между версией и сборкой, поэтому я отвечу на это философски.
Существуют всевозможные схемы, но популярной является:
{MajorVersion}. {MinorVersion}. {} Редакция
Затем сборка используется отдельно для указания общего количества сборок для выпуска или для всего срока службы продукта.
Многие разработчики начинают номер сборки с 0, и каждый раз, когда они строят, они увеличивают число на единицу, увеличиваясь навсегда. В моих проектах у меня есть скрипт, который автоматически увеличивает номер сборки при каждой сборке. Смотрите инструкции для этого ниже.
Другие разработчики, включая Apple, имеют номер сборки, состоящий из основной версии + вспомогательной версии + количества сборок для выпуска. Это фактические номера версий программного обеспечения, а не значения, используемые для маркетинга.
Если вы идете в меню XCode > О XCode , вы увидите номера версий и сборок. Если вы нажмете кнопку Подробнее ... , вы увидите множество разных версий. Поскольку кнопка « Подробнее» ... была удалена в Xcode 5, эта информация также доступна в разделе « Программное обеспечение»> «Разработчик » приложения « Информация о системе» , которое можно открыть, открыв меню « Apple» > « Об этом Mac» > « Системный отчет ...» .
Например, Xcode 4.2 (4C139). Маркетинговая версия 4.2 - это сборка основной версии 4, сборка вспомогательной версии C и сборка № 139. Следующим выпуском (предположительно 4.3), скорее всего, будет сборка выпуска 4D, и номер сборки начнется с 0 и будет увеличиваться оттуда.
Номера версий и сборок симулятора iPhone такие же, как и iPhone, Mac и т. Д.
Обновление : по запросу, вот шаги для создания сценария, который запускается каждый раз, когда вы строите свое приложение в XCode, чтобы прочитать номер сборки, увеличить его и записать его обратно в
{App}-Info.plist
файл приложения . Есть дополнительные, дополнительные шаги, если вы хотите записать свои номера версий / сборок в вашиSettings.bundle/Root*.plist
файлы.Это расширено из статьи с практическими рекомендациями здесь .
В Xcode 4.2 - 5.0:
/bin/bash
.Скопируйте и вставьте следующее в область скрипта для целых чисел сборки:
Как отметил @Bdebeez, также доступен инструмент Apple Generic Versioning Tool (
agvtool
). Если вы предпочитаете использовать его вместо этого, то сначала нужно изменить пару вещей:Обратите внимание, что с помощью этого
agvtool
метода вы все равно можете периодически получать неудачные / отмененные сборки без ошибок. По этой причине я не рекомендую использоватьagvtool
этот скрипт.Тем не менее, на этапе Run Script вы можете использовать следующий скрипт:
next-version
Приращения аргумента номер сборки (bump
также псевдоним для одного и того же), и-all
обновленияInfo.plist
с новым номером сборки.И если у вас есть пакет настроек, в котором вы показываете версию и сборку, вы можете добавить следующее в конец скрипта, чтобы обновить версию и сборку. Примечание. Измените
PreferenceSpecifiers
значения в соответствии с вашими настройками.PreferenceSpecifiers:2
означает посмотреть на элемент в индексе 2 подPreferenceSpecifiers
массивом в вашем файле plist, так что для индекса на основе 0 это 3-я настройка предпочтений в массиве.Если вы используете
agvtool
вместо чтенияInfo.plist
непосредственно, вместо этого вы можете добавить следующее в ваш скрипт:А если у вас есть универсальное приложение для iPad и iPhone, вы также можете установить настройки для файла iPhone:
источник
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE") dec=$((0x$buildNumber)) buildNumber=$(($dec + 1)) hex=$(printf "%X" $buildNumber) /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $hex" "$INFOPLIST_FILE"
(Просто оставьте это здесь для моей собственной справки.) Это покажет версию и сборку для полей «версия» и «сборка», которые вы видите в цели XCode:
В Свифте
источник
alloc
/init
строка, которая сохраняет строку, но вы не освобождаете ее. Для объекта, который вы возвращаете из метода, вы обычно должны использовать вспомогательный метод, чтобы строка автоматически выдавалась, или вызыватьautorelease
. Либо:return [NSString stringWithFormat:@"%@ build %@", version, build];
ИЛИreturn [[[NSString alloc] initWithFormat:@"%@ build %@", version, build] autorelease];
Номер сборки - это внутренний номер, который указывает текущее состояние приложения. Он отличается от номера версии тем, что, как правило, он не предназначен для пользователя и не обозначает никаких различий / функций / обновлений, как это обычно бывает с номером версии.
Думайте об этом так:
CFBundleVersion
): номер сборки. Обычно вы начинаете с 1 и увеличиваете на 1 с каждой сборкой приложения. Он быстро позволяет сравнивать, какая сборка более поздняя, и обозначает смысл прогресса кодовой базы. Они могут быть чрезвычайно полезны при работе с QA, и необходимо убедиться, что ошибки регистрируются в правильных сборках.CFBundleShortVersionString
): номер пользователя, который вы используете для обозначения этой версии вашего приложения. Обычно это происходит по схеме версий Major.minor (например, MyAwesomeApp 1.2), чтобы пользователи знали, какие выпуски являются небольшими обновлениями обслуживания, а какие - новыми важными функциями.Чтобы эффективно использовать это в своих проектах, Apple предоставляет отличный инструмент под названием
agvtool
. Я настоятельно рекомендую использовать это, поскольку это НАМНОГО проще, чем написание сценариев изменений. Это позволяет легко установить как номер сборки, так и маркетинговую версию. Это особенно полезно при создании сценариев (например, простое обновление номера сборки для каждой сборки или даже запрос текущего номера сборки). Он может даже делать более экзотические вещи, такие как пометка вашего SVN, когда вы обновляете номер сборки.Чтобы использовать это:
agvtool new-version 1
(установите номер сборки на 1)agvtool new-marketing-version 1.0
(установите маркетинговую версию на 1.0)Смотрите man-страницу
agvtool
для тонны полезной информацииисточник
agvtool
Easy iPhone Application Versioning с помощью agvtoolСкрипт для автоинкрементации номера сборки в ответе выше не работал для меня, если номер сборки является значением с плавающей запятой, поэтому я немного его изменил:
источник
Номер маркетинговой версии для клиентов называется номером версии . Он начинается с 1.0 и подходит для основных обновлений до 2.0 , 3.0 , для небольших обновлений до 1.1 , 1.2 и для исправлений ошибок до 1.0.1 , 1.0.2 . Этот номер ориентирован на релизы и новые функции.
Номер сборки в основном является внутренним числом сборок , которые были сделаны до этого. Но некоторые используют другие числа, такие как номер ветки хранилища. Это число должно быть уникальным, чтобы различать почти одинаковые сборки.
Как видите, номер сборки не нужен, и вам решать, какой номер сборки вы хотите использовать. Так что, если вы обновите свою
Xcode
версию до основной, поле сборки будет пустым. Поле версии не может быть пустым!Чтобы получить номер сборки в виде
NSString
переменной:Чтобы получить номер версии в качестве
NSString
переменной:Если вы хотите оба в одном
NSString
:Это проверено с версией Xcode 4.6.3 (4H1503) . Номер сборки часто пишется в скобках / скобках. Номер сборки в шестнадцатеричном или десятичном виде.
В XCode вы можете автоматически увеличивать номер сборки как десятичное число , помещая следующее в
Run script
фазу сборки в настройках проектаДля шестнадцатеричного номера сборки используйте этот скрипт
источник
Спасибо @nekno и @ ale84 за отличные ответы.
Тем не менее, я немного изменил скрипт @ ale84, чтобы увеличить число сборок для чисел с плавающей запятой.
значение incl может быть изменено в соответствии с вашими требованиями к плавающему формату. Например: если incl = .01, выходной формат будет ... 1.19, 1.20, 1.21 ...
источник
Другой способ - установить номер версии в
appDelegate
didFinishLaunchingWithOptions
:источник