CFBundleVersion должен быть разделен на период списком из не более трех неотрицательных целых чисел (ПРЕДУПРЕЖДЕНИЕ ITMS-9000)

Я получаю это предупреждение при попытке отправить свое приложение:

enter image description here

ПРЕДУПРЕЖДЕНИЕ ITMS-9000: "Этот пакет недействителен. Значение для ключа CFBundleVersion [3.3.9.2014.08.20] int файл info.plist должен быть отрезок с периодом не более трех неотрицательных целых чисел.

Это первый раз, когда я вижу это после множества представлений с этим форматом версий.

Что-то изменилось в отношении CFBundleVersion?

Я предполагаю, что три не всегда были там? или яблоко только начали предупреждать нас об этом?

Из Apple docs:

CFBundleVersion

CFBundleVersion (String - iOS, OS X) указывает версию сборки номер пакета, который идентифицирует итерацию (выпущенную или неизданный) пучка. Номер версии сборки должен быть строкой состоящий из трех неотрицательных целых чисел, разделенных периодом, с первое целое число больше нуля. Строка должна содержать только числовые (0-9) и периодовые (.) символы. Ведущие нули усечены из каждого целого числа и будет проигнорировано (то есть 1.02.3 эквивалентно до 1.2.3). Этот ключ не локализуется.

Edit:

По-видимому, CFBundleVersion была изменена, поскольку вы можете видеть здесь. Мне стыдно, что мне нужно искать WayBackMachine для чего-то подобного, в то время как Apple "History History History" ничего не говорит об этом.

Ответ 1

По-видимому, CFBundleVersion была изменена, поскольку вы можете увидеть здесь. Мне стыдно, что мне нужно искать WayBackMachine для чего-то подобного, в то время как Apple "History History History" ничего не говорит об этом.

Ответ 2

Это произошло с каркасом, который я использовал из Cocoapods, вот как я его исправил:

Вам нужно найти нестандартную CFBundleShortVersionString в файле info.plist. Я просмотрел их все и нашел это в одном из репозиций:

  <key>CFBundleShortVersionString</key>
  <string>HEAD based on 1.0</string>

Изменено:

  <key>CFBundleShortVersionString</key>
  <string>1.0</string>

и он работал

Этот метод, созданный разработчиками Cocoapods, также работает:

https://github.com/Jonge/Cocoapods-frameworks-version-number-fix

Ответ 3

Похоже, что Apple сделала еще один шаг и сделала ошибку (не уверен, когда это произошло, но я использую Xcode 6). Попытка отправить приложение с помощью CFBundleShortVersionString с более чем двумя десятичными точками приведет к тому, что теперь будет отправлен архив в iTunes Connect.

Теперь вы должны иметь CFBundleShortVersionString, например 1.0, 4.5.2 и т.д., чтобы успешно отправлять ваши приложения. Может быть немного раздражает, но я полагаю, что это имеет смысл.

Error

Ответ 4

Рекомендуемая передовая практика - теперь использовать отдельные значения для CFBundleShortVersionString и CFBundleVersion

  • 3-компонентный максимум для CFBundleShortVersionString (например: 4.2.3)
  • Номер сборки CFBundleVersion

CFBundleShortVersionString - это версия, отображаемая в App Store. CFBundleVersion нужно будет изменить для каждой загружаемой сборки.

Пример: если вы загрузите новую версию (4.2.3) для просмотра на iTunesConnect и если она будет отклонена. Вам нужно будет повторно отправить новую сборку для того же номера версии (CFBundleShortVersionString= 4.2.3) с другим значением CFBundleVersion

Ответ 5

Если вы используете CocoaPods, добавьте этот script в Podfile для обработки нечисловых версий пакета:

# fix for non numeric CocoaPods versions
# https://github.com/CocoaPods/CocoaPods/issues/4421#issuecomment-151804311
post_install do |installer|
  plist_buddy = "/usr/libexec/PlistBuddy"
  installer.pods_project.targets.each do |target|
    plist = "Pods/Target Support Files/#{target}/Info.plist"
    original_version = `#{plist_buddy} -c "Print CFBundleShortVersionString" "#{plist}"`.strip
    changed_version = original_version[/(\d+\.){1,2}(\d+)?/]
    unless original_version == changed_version
      puts "Fix version of Pod #{target}: #{original_version} => #{changed_version}"
      `#{plist_buddy} -c "Set CFBundleShortVersionString #{changed_version}" "Pods/Target Support Files/#{target}/Info.plist"`
    end
  end
end

Пример вывода для ReactiveCocoa 4:

Installing ReactiveCocoa (4.0.4-alpha-1)
(...)
Fix version of Pod ReactiveCocoa: 4.0.4-alpha-1 => 4.0.4

Ответ 6

Следуйте за ошибкой, затем выполните поиск после CFBundleVersion в вашем случае: 3.3.9.2014.08.20, затем измените ее на правую версию, например 3.3.9 или 3.4.0,... (она должна быть больше старой версии)