Ответ 1
По-видимому, CFBundleVersion была изменена, поскольку вы можете увидеть здесь. Мне стыдно, что мне нужно искать WayBackMachine для чего-то подобного, в то время как Apple "History History History" ничего не говорит об этом.
Я получаю это предупреждение при попытке отправить свое приложение:
ПРЕДУПРЕЖДЕНИЕ 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" ничего не говорит об этом.
По-видимому, CFBundleVersion была изменена, поскольку вы можете увидеть здесь. Мне стыдно, что мне нужно искать WayBackMachine для чего-то подобного, в то время как Apple "History History History" ничего не говорит об этом.
Это произошло с каркасом, который я использовал из 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
Похоже, что Apple сделала еще один шаг и сделала ошибку (не уверен, когда это произошло, но я использую Xcode 6). Попытка отправить приложение с помощью CFBundleShortVersionString
с более чем двумя десятичными точками приведет к тому, что теперь будет отправлен архив в iTunes Connect.
Теперь вы должны иметь CFBundleShortVersionString
, например 1.0
, 4.5.2
и т.д., чтобы успешно отправлять ваши приложения. Может быть немного раздражает, но я полагаю, что это имеет смысл.
Рекомендуемая передовая практика - теперь использовать отдельные значения для CFBundleShortVersionString
и CFBundleVersion
CFBundleShortVersionString
(например: 4.2.3)CFBundleVersion
CFBundleShortVersionString
- это версия, отображаемая в App Store.
CFBundleVersion
нужно будет изменить для каждой загружаемой сборки.
Пример: если вы загрузите новую версию (4.2.3) для просмотра на iTunesConnect и если она будет отклонена. Вам нужно будет повторно отправить новую сборку для того же номера версии (CFBundleShortVersionString
= 4.2.3) с другим значением CFBundleVersion
Если вы используете 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
Следуйте за ошибкой, затем выполните поиск после CFBundleVersion в вашем случае: 3.3.9.2014.08.20, затем измените ее на правую версию, например 3.3.9 или 3.4.0,... (она должна быть больше старой версии)