Это моя первая отправка приложения для iOS, и я не хочу, чтобы мое приложение было отклонено.
Это из Apple Docs:
CFBundleVersion (String - iOS, OS X) указывает номер версии сборки пакета, который определяет итерацию (выпущенную или невыпущенную) пакета. Номер версии сборки должен быть строкой, состоящей из трех неотрицательных целых чисел, разделенных точками, причем первое целое число больше нуля. Строка должна содержать только числовые (0–9) и точки (.). Начальные нули отсекаются от каждого целого числа и будут проигнорированы (то есть 1.02.3 эквивалентно 1.2.3). Этот ключ нельзя локализовать.
CFBundleShortVersionString (String - iOS, OS X) указывает номер версии выпуска пакета, который определяет выпущенную итерацию приложения. Номер версии выпуска представляет собой строку, состоящую из трех целых чисел, разделенных точкой. Первое целое число представляет основные версии приложения, например, версии, в которых реализованы новые функции или важные изменения. Второе целое число обозначает версии, в которых реализованы менее заметные функции. Третье целое число представляет отладочные версии.
Значение этого ключа отличается от значения CFBundleVersion, которое определяет итерацию (выпущенную или невыпущенную) приложения. Этот ключ можно локализовать, включив его в ваши файлы InfoPlist.strings.
Но это кажется немного странным. Моя интерпретация заключается в том, чтобы поставить оба значения одинаковыми, то есть:
CFBundleVersion: 1.0.0
CFBundleShortVersionString: 1.0.0
Может ли кто-нибудь подтвердить на 100% то, что я должен поставить?
Ответы:
Подумайте об этом так: «Краткая версия» (
CFBundleShortVersionString
) - это номер общедоступной версии. «Версия» (CFBundleVersion
) - это скорее внутренний номер версии, который может меняться гораздо чаще, чем общедоступная «короткая версия». Лично я использую то же самое для обоих, но многие люди обновляют «версию» при каждой сборке. В любом случае вы обычно обновляете «короткую версию» при выпуске для Apple. Как часто вы обновляете «версию», зависит от вас и ваших потребностей.источник
CFBundleShortVersionString дает вам версию вашего приложения. Обычно он увеличивается каждый раз, когда вы публикуете свое приложение в App Store. Это версия, которая отображается в разделе «Версия» на странице App Store вашего приложения.
CFBundleVersion дает вам номер сборки, который используется для разработки и тестирования, а именно в «технических» целях. Конечного пользователя редко интересует номер сборки, но во время разработки вам может потребоваться знать, что разрабатывается и исправляется в каждой сборке. Обычно он увеличивается на каждой итерации внутреннего выпуска. И вы можете использовать инструменты непрерывной интеграции, такие как Jenkins, для автоматического увеличения номера сборки для каждой сборки.
Эти два числа не зависят друг от друга, но рекомендуется держать их параллельно, чтобы избежать путаницы. Имейте в виду, что после того, как ваше приложение прошло проверку в App Store, вам необходимо увеличить номер сборки, как заявили Фил и подобные TheSky, независимо от того, публикуете вы его или нет.
Пример использования: допустим, у вас есть хорошо протестированная сборка, готовая к отправке. Номер версии - 1.0.0, а номер сборки - 1.0.0.32 . После отправки приложения вам необходимо обновить версию 1.0.1 и номер сборки 1.0.1.0 .
источник
201606070620
в приложении для iOS.Ответ на rmaddy правильно. Добавлю еще две мысли.
Третий номер версии
Помните о третьем номере версии, который указан на веб-сайте iTunesConnect как часть определения вашего приложения. Если это число отличается от двух в Xcode, Apple выдает предупреждение. Вы можете игнорировать предупреждение, так как оно не является препятствием для показа (не «ошибкой»).
Дата и время как версия
Кроме того, вам не нужно использовать три числа с знаками препинания. Это может иметь смысл для некоторых приложений, где традиционно изменения первого числа указывают на какое-то серьезное изменение, обычно влияющее на совместимость.
Для других приложений вы можете использовать просто значение даты и времени в стиле стандартного формата ISO 8601 (ГГГГММДДЧЧММ). Например,
201606070620
. В таком порядке год-месяц-дата-час-минута отображается постоянно увеличивающееся число, всегда той же длины из-за заполнения нуля, что при сортировке по алфавиту также является хронологическим.Я успешно использовал этот стиль номеров версий в приложении для iOS, работающем в iOS 7, 8 и 9.
Вы даже можете автоматизировать создание этого значения. В вашем проекте
Target
>Build Phases
>Run Script
панели:Shell
поле укажите :/bin/sh
Show environment variables in build log
флажок.Run script only when installing
флажок.Каждый раз, когда вы выполняете сборку, фиксируется текущая дата и время в часовом поясе UTC .
-u
Флаг в сценарии использует UTC , а не текущее время по умолчанию зоны. Как правило, для программистов и системных администраторов лучше всего использовать и думать в формате UTC, а не в местных часовых поясах.Или сделайте гибрид, используя условный
1.2.3
номер версии и дату и время в качестве номера сборки. Чтобы сделать гибрид, просто закомментируйтеCFBundleShortVersionString
строку, поставив#
перед ней.источник
Для меня наиболее разумной схемой является использование номера версии (т. Е.
CFBundleShortVersionString
) Для фактического номера версии, а затем использование номера сборки (т. Е.CFBundleVersion
) Для представления отправки в App Store. Таким образом, если нет никаких проблем и, следовательно, повторная отправка, это число всегда равно 1. Для нового выпуска я сбрасываюсь на 1, если в предыдущем были проблемы при тестировании или проверке TestFlight.Из Технического примечания TN2420: Номера версий и номера сборки .
источник
Я использую CFBundleVersion, чтобы указать внутреннюю сборку для CFBundleShortVersionString . Я использую тестовый полет для отправки сборок своим тестерам, поэтому разница между ними была чрезвычайно полезной.
В документах Apple говорится, что CFBundleVersion «должна быть строкой, состоящей из 3 неотрицательных целых чисел, разделенных точками», но на самом деле это может быть БОЛЕЕ 3 частей (как показывает ответ выше). Я использую это, чтобы указать свою разработку, скажем, моя CFBundleShortVersionString - 1.0.0, я могу использовать 1.0.0.11 для CFBundleVersion, чтобы указать, что это моя 11-я сборка для выпуска 1.0.0.
Каждая версия CFBundleVersion, отправленная в магазин приложений, должна быть больше, чем раньше, иначе вы получите ОШИБКУ ITMS-90478 : «Недопустимая версия. Сборка с версией« xxx »не может быть импортирована, поскольку более поздняя версия была закрыта для отправки новых сборок . Выберите другой номер версии ".
CFBundleShortVersionString может состоять только из 3 частей, иначе вы получите ОШИБКУ ITMS-90060: значение ключа CFBundleShortVersionString 'xxx' в файле Info.plist должно быть разделенным точками списком, состоящим не более чем из трех неотрицательных целых чисел ".
Третий номер , что Василий Бурк упоминается, то есть число показывает версию на iTunesConnect , где вещи могут получить сложно.
Я использую номер iTunesConnect, отличный от CFBundleShortVersionString, потому что, когда я впервые отправил свое приложение в магазин приложений, у нас уже было много раундов внутренних выпусков. Поэтому я использовал 1.0 для номера iTunesConnect и 5.x для CFBundleShortVersionString. В следующем выпуске магазина приложений я предоставил функцию для проверки наличия более новой версии в магазине приложений и понял, что сейчас у меня проблемы, потому что я могу получить только номер iTunesConnect (используя
http://itunes.apple.com/lookup?bundleId=
), поэтому мне нужно сделать некоторые вычисления, прежде чем сравнивать его с номером CFBundleShortVersionString.Я попытался исправить это, используя номер iTunesConnect в качестве моей CFBundleShortVersionString, но получил ошибку ERROR ITMS-90062 : «Этот пакет недействителен. Значение ключа CFBundleShortVersionString [xxx] в файле Info.plist должно содержать более высокую версию, чем указанная ранее утвержденной версии [xxx] ".
Поэтому я предлагаю всегда делать их одинаковыми.
источник
Я никогда не видел, чтобы обсуждалось какое-либо максимальное число для каждого поля в CFBundleVersion?
Установив CFBundleVersion в приложении на 1.1.1 и просмотрев шестнадцатеричное значение для версии в «lsregister -dump», я определил, что максимальное значение для первого поля (2 ^ 22) -1 или 4194303, а максимальное значения для второго и третьего полей: (2 ^ 21) -1 или 2097151.
Сумма трех полей составляет 64 бита.
Это имеет значение для тех из нас, кто использует CFBundleVersion на основе даты и времени.
Я устанавливал в первом поле значение ГГГГММДД. Это всегда больше, чем максимально допустимые версии, и это приводило к непредсказуемым результатам, мягко говоря, когда Launch Services решал, какую версию приложения запускать, когда у вас было установлено несколько версий и вы использовали что-то вроде 'open -a Appname 'из командной строки.
Пожалуйста, распространите это широко. Я уверен, что многие люди перестают интересоваться этим.
источник
На данный момент в документации Apple
CFBundleVersion
указано [выделено мной]:Для
CFBundleShortVersionString
[курсив мой]:Я бы предложил просто автоматически увеличивать значение
CFBundleVersion
для каждой сборки (или каждого выпуска TestFlight) и сбрасывать его на 0 при каждом измененииCFBundleShortVersionString
.Вы должны явно спланировать или разработать согласованные средства для обновления версии, видимой пользователю в
CFBundleShortVersionString
.источник