Расширение iOS: необходимо ли увеличивать версию пакета (CFBundleVersion)?

Должен ли я увеличивать CFBundleVersion в Info.plist моего расширения, чтобы убедиться, что он перезаписывает существующие? Или достаточно сделать это в Info.plist основного приложения?

Я работаю над сегодняшним расширением, но я думаю, что вопрос относится ко всем встроенным двоичным файлам.


person Joseph Lin    schedule 14.01.2015    source источник
comment
Я так не думаю, расширения хранятся в основном приложении и будут перезаписаны, когда вы замените приложение новым. Но я могу ошибаться. Особенно для расширений часов, так как они предположительно копируются в часы?   -  person Abhi Beckert    schedule 15.01.2015
comment
Расширение часов — интересный момент. Думаю скоро узнаем!   -  person Joseph Lin    schedule 23.01.2015
comment
Проверьте этот ответ. stackoverflow.com/a/33421662/5790492   -  person Nik Kov    schedule 22.07.2019


Ответы (6)


Я думаю, что Apple на самом деле предпочла бы, чтобы расширения приложений использовали ту же версию пакета, что и приложение, в котором они содержатся. Это электронное письмо, которое я получаю от iTunes Connect с каждой отправкой:

Мы обнаружили одну или несколько проблем с вашей недавней доставкой для "Awesome App". Ваша доставка прошла успешно, но вы можете исправить следующие проблемы в следующей доставке:

Несоответствие CFBundleVersion — значение CFBundleVersion «94» расширения «Awesome App.app/PlugIns/Awesome App Today Extension.appex» не соответствует значению CFBundleVersion «99» содержащего его приложения iOS «Awesome App.app».

Несоответствие CFBundleShortVersionString — значение CFBundleShortVersionString «1.0» расширения «Awesome App.app/PlugIns/Awesome App Today Extension.appex» не соответствует значению CFBundleShortVersionString «1.3.0» содержащего его приложения iOS «Awesome App.app».

После устранения проблем вы можете использовать Xcode или Application Loader для загрузки нового двоичного файла в iTunes Connect.

Я могу игнорировать эти предупреждения, и сборка проходит проверку, но это либо ошибка в iTunes Connect, либо цифры должны совпадать. На самом деле это не имеет смысла, поскольку расширение не обязательно будет обновляться с той же скоростью, что и приложение. В любом случае

person Daniel Galasko    schedule 23.05.2015
comment
Спасибо. Я также начинаю получать подобные предупреждения (локально) при создании моего расширения для часов, но странно то, что мое сегодняшнее расширение не дает мне такого же предупреждения. Итак, как вы сказали, это либо ошибка, либо новое требование, и оно странное. - person Joseph Lin; 24.05.2015
comment
Я также понял это, но когда я сопоставляю версии и загружаю снова, это говорит о избыточной двоичной загрузке. - person myatmins; 15.05.2018

В любом случае это не задокументировано, поэтому вам следует обновить его. Это может не иметь значения, но вы не можете быть уверены, и даже если это не нужно сейчас, это может понадобиться позже. Как недокументированная деталь, он может измениться без предупреждения.

Это также просто хорошая практика разработки программного обеспечения. Номер встроенной версии должен меняться всякий раз, когда изменяется расширение, даже если iOS ничего не делает с этой информацией.

person Tom Harrington    schedule 16.01.2015
comment
Спасибо, Том. Я могу подтвердить, что встроенное расширение всегда устанавливается, даже если версия не увеличивается, но, как вы сказали, оно недокументировано, так что лучше перестраховаться, чем сожалеть. - person Joseph Lin; 23.01.2015
comment
@ Том Харрингтон, я добавил расширение в свое приложение, есть ли версия, что моя версия пакета приложений расширения наследуется от основного пакета приложений. - person Steven; 20.06.2020

Чтобы избежать предупреждения от iTunes Connect, я просто увеличиваю все номера версий из моего сценария сборки «Увеличить номер сборки» моего основного приложения:

if [ "$BUMP_BUILD_NUMBER" = "1" ] ; then
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}")
buildNumber=$(($buildNumber + 1))
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${INFOPLIST_FILE}"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "/Users/name/project/ios/Siri/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "/Users/name/project/ios/SiriUI/Info.plist"
fi
``
person atomkirk    schedule 28.02.2019
comment
Лучший ответ! Только одно предложение: используйте $SRCROOT/ExtensionName/Info.plist вместо абсолютного пути. - person imike; 18.04.2019

Я только что искал тот же ответ, я только что обновил приложение и обнаружил, что при загрузке мне было представлено предупреждение о несоответствии расширений и номеров версий с приложением или чем-то еще (не могу вспомнить конкретная формулировка) - поэтому я здесь!

«Расширения приложений и содержащие их приложения должны использовать тот же номер сборки (CFBundleVersion) и номер версии (CFBundleShortVersionString), что и другие цели в проекте Xcode».

Информации немного, но она ясна — версии расширений приложений и расширений WatchKit должны совпадать с той же версией, что и приложение, в котором они находятся.

Кажется немного бессмысленным даже давать нам возможность указывать отдельные номера версий, не так ли?

person Sagar Patel    schedule 17.08.2017

Да, версии пакетов расширений (версия пакета && строка версии пакета, короткая) должны не соответствовать основной сборке приложения && версии.

Итак, расширение версии пакета = основная сборка приложения.

строка версии пакета, короткая = основная версия приложения

person oskarko    schedule 13.03.2018

Основываясь на ответе @atomkirk, в моих приложениях номера версии и сборки устанавливаются в файле xcodeproject. Поэтому вместо мне нужно использовать xcodebuild для извлечения соответствующих значений:

buildNumber=$(xcodebuild -showBuildSettings -project App.xcodeproj | pcregrep -o1 "PROJECT_VERSION = ([0-9a-f\-]+)")
marketingVersion=$(xcodebuild -showBuildSettings -project App.xcodeproj | pcregrep -o1 "MARKETING_VERSION = ([0-9a-f\-.]+)")

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "$SRCROOT/Share Extension/Info.plist"
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $marketingVersion" "$SRCROOT/Share Extension/Info.plist"
person weiran    schedule 05.06.2020