Какие значения следует использовать для CFBundleVersion и CFBundleShortVersionString?
Это мое первое приложение для iOS, и я не хочу, чтобы мое приложение было отклонено.
Это из документов Apple:
CFBundleVersion (String-iOS, OS X) указывает номер версии сборки пакета, который определяет итерацию (выпущенную или неизданную) пакета. Номер версии сборки должен быть строкой, состоящей из трех неотрицательных целых чисел, разделенных точками, причем первое целое число больше нуля. Строка должна быть только содержат цифры (0-9) и точки (.) письмена. Ведущие нули отсекаются от каждого целого числа и будут игнорироваться (то есть 1.02.3 эквивалентно 1.2.3). Этот ключ не является локализуемым.
CFBundleShortVersionString (String-iOS, OS X) указывает номер версии пакета, который определяет выпущенную итерацию приложения. Номер версии выпуска-это строка, состоящая из трех целых чисел, разделенных точками. Первое целое число представляет основные ревизии в приложение, например, изменения, которые реализуют новые функции или основные изменения. Второе целое число обозначает ревизии, которые реализуют менее заметные функции. Третье целое число представляет выпуски обслуживания.
значение для этого ключа отличается от значения для "CFBundleVersion", которое определяет итерацию (выпущенную или неизданную) приложения. Этот ключ можно локализовать, включив его в свой InfoPlist.файлы строк.
но это кажется немного странным. Моя интерпретация это означает, что оба значения должны быть одинаковыми, т. е.:
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
может кто-нибудь подтвердить 100%, что это то, что я должен поставить?
6 ответов:
подумайте об этом так: "короткая версия" (
CFBundleShortVersionString
) - Это номер общедоступной версии. "Версия" (CFBundleVersion
) это скорее внутренний номер версии, который может меняться гораздо чаще, чем публичное "короткая версия". Лично я использую то же самое для обоих, но многие люди обновляют "версию" на каждой сборке. В любом случае вы обычно обновляете "короткую версию" при выпуске в Apple. Как часто вы обновляете "версию" зависит от вас и ваших потребностей.
CFBundleShortVersionString дает версия приложения. Это, как правило, увеличивается каждый раз, когда вы публикуете свое приложение в магазин приложений. Это версия, которая отображается в разделе" версия " для страницы магазина приложений вашего приложения.
CFBundleVersion дает номер сборки которая используется для разработки и тестирования, а именно "технических целях". Конечный пользователь редко интересуется сборкой но во время разработки вам может понадобиться знать, что разрабатывается и фиксируется на каждой сборке. Это обычно увеличивается на каждой итерации внутреннего выпуска. И вы можете использовать инструменты непрерывной интеграции, такие как Jenkins, чтобы автоматически увеличивать номер сборки на каждой сборке.
две цифры не зависят друг от друга, но это хорошая идея, чтобы держать их параллельно, чтобы избежать путаницы. Имейте в виду, что как только ваше приложение прошло Обзор App Store вам нужно увеличить номер сборки, как заявили Фил и likeTheSky, независимо от того, публикуете ли вы его или нет.
Use case: допустим, у вас есть хорошо протестированная сборка, готовая к отправке. Это номер версии 1.0.0 и это 1.0.0.32. После того, как вы отправите свое приложение, вам нужно обновить версию как 1.0.1 номер сборки и как 1.0.1.0.
The ответ от rmaddy является правильным. Я добавлю еще две мысли.
Номер Третьей Версии
обратите внимание на третий номер версии, указанный на веб-сайте iTunesConnect как часть определения вашего приложения. Если это число отличается от двух в Xcode, Apple дает вам предупреждение. Вы можете игнорировать предупреждение, так как это не show-stopper (не "ошибка").
дата-время как версия
кроме того, вам не нужно использовать три цифры с пунктуацией. Это может иметь смысл для некоторых приложений, где традиционно изменения в первом номере указывают на какое-то резкое изменение, обычно влияющее на совместимость.
для других приложений вы можете использовать просто значение даты-времени в ISO 8601 стандартный формат стиль (YYYYMMDDHHMM). Например,
201606070620
. Этот порядок год-месяц-дата-час-минута отображает постоянно увеличивающееся число, всегда одинаковую длину из-за заполнения нуля, что при сортировке в алфавитном порядке также хронологический.я успешно использовал этот стиль номеров версий в приложении для доставки iOS, работающем в iOS 7, 8 и 9.
вы даже можете автоматизировать генерацию этого значения. В вашем проекте
Target
>Build Phases
>Run Script
группа:
- указать .
каждый раз, когда вы делаете сборку текущей даты-времени в UTC часовой пояс плен. Элемент
-u
флаг в скрипте использует UTC, а не ваш текущий часовой пояс по умолчанию. Как правило, лучше всего для программистов и системных администраторов использовать и думать в UTC, а не в местных часовых поясах.#!/bin/bash buildNumber=$(date -u "+%Y%m%d%H%M") /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildNumber" "$INFOPLIST_FILE" # Version number /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$INFOPLIST_FILE" # Build number echo "DateTime for app version number: $buildNumber"
или сделать гибрид, с обычным
1.2.3
для номера версии и даты-времени как Номер сборки. Чтобы сделать гибрид, просто закомментируйтеCFBundleShortVersionString
строку с#
перед.
Я использую CFBundleVersion чтобы указать внутреннюю сборку для CFBundleShortVersionString. Я использую тестовый полет, чтобы представить сборки для моих тестеров, поэтому разница между ними была чрезвычайно полезной.
Apple documents говорит CFBundleVersion " должна быть строка, состоящая из 3 неотрицательные, разделенные точками целые числа" но на самом деле это может быть БОЛЬШЕ, ЧЕМ 3 части (как показано выше ответ). Я использую это, чтобы указать мой сборка разработки, скажем, мой CFBundleShortVersionString-1.0.0, я могу использовать 1.0.0.11 для CFBundleVersion, чтобы указать, что это моя 11-я сборка для выпуска 1.0.0
каждый CFBundleVersion, представленный в app store, должен быть больше, чем раньше, или вы получите ОШИБКА ITMS-90478: "Неверная Версия. Сборка с версией " xxx " не может быть импортирована, поскольку более поздняя версия была закрыта для новых представлений сборки. Выберите другую версию число."
CFBundleShortVersionString может иметь только 3 части или вы получите ошибку ITMS-90060: значение для ключа CFBundleShortVersionString ' xxx ' в информации.файл plist должен быть разделенным периодом списком максимум три неотрицательных целых числа."
на 3-й ряд что Василий Бурк упомянул, т. е. номер версии показывает на iTunesConnect где все может усложниться.
Я использую a другой номер iTunesConnect, чем CFBundleShortVersionString потому что, когда я впервые представил свое приложение в app store, у нас уже есть много раундов внутренних релизов. Поэтому я использовал 1.0 для номера iTunesConnect и 5.x для CFBundleShortVersionString. В следующем выпуске в app store я предоставил функцию, чтобы проверить, есть ли более новая версия в app store, и понял, что у меня возникли проблемы, потому что я могу получить только номер iTunesConnect (используя
http://itunes.apple.com/lookup?bundleId=
) Так что мне нужно сделать некоторые вычисления прежде чем сравнить его с номером CFBundleShortVersionString.Я попытался исправить это, используя номер iTunesConnect в качестве моей CFBundleShortVersionString, но получил ошибку, ОШИБКА ITMS-90062: "этот пакет является недопустимым. Значение для ключа CFBundleShortVersionString [x.x.x] в информации.файл plist должен содержать более высокую версию, чем ранее утвержденная версия [x.x.x]."
поэтому я предлагаю всегда делать их одинаковыми.
наиболее разумной для меня схемой является использование номера версии (т. е.
CFBundleShortVersionString
) за фактический номер версии, а затем использовать номер сборки (т. е.CFBundleVersion
) для представления представления в App Store. Поэтому, если нет никаких проблем и, следовательно, повторно подает, это число всегда равно 1. Для нового выпуска я сбрасываю значение 1, если у предыдущего были проблемы при тестировании TestFlight или в обзоре.номер сборки предоставляют возможность называть каждую из представленных вами для конкретного освобождать. Как описано в приведенных выше определениях, коллекция всех сборок, которые вы предоставляете для конкретной версии вашего приложения, называется "release train" этой версии. Для приложений iOS номера сборки должны быть уникальными в каждом выпуске,но они не должны быть уникальными для разных выпусков [мой акцент]. То есть, для приложений iOS вы можете использовать одни и те же номера в разных выпуске поездов, Если вы хотите.
от техническое Примечание TN2420: номера версий и номера сборок.
то, что я никогда не видел нигде обсуждается, что такое максимальное число для каждого поля в CFBundleVersion?
установив CFBundleVersion в приложении на 1.1.1 и посмотрев шестнадцатеричное vaue для версии в "lsregister-dump", я определил, что максимальное значение для первого поля (2^22)-1 или 4194303, а максимальные значения для второго и третьего полей (2^21)-1 или 2097151.
3 поля добавляют до 64 бит.
Это последствия для тех из нас, кто использует CFBundleVersion на основе даты и времени.
я устанавливал первое поле в YYYYMMDD. Это всегда больше, чем максимально допустимые версии, и это приводило к непредсказуемым результатам, мягко говоря, когда Службы запуска решали, какую версию приложения запускать, когда у вас было установлено несколько версий и вы использовали что-то вроде "open-a Appname" из командной строки.
пожалуйста, распространите это широко. Я уверен, что много люди отклеиваются от этого.