Используя Xcode 11, при первой сборке после «чистой папки сборки» значение CFBundleShortVersionString
в Info.plist корректно перезаписывается сценарием фазы сборки.
Таким образом, мы можем переопределитьсгенерированный Info.plist с номером версии, полученным из тега git, скажем, 10.1.2
.
Вот скрипт сборки:
#!/bin/sh
# Extract the latest tag
describe=`git describe --tags`
# Split by '-' char. The first part is the version number, the remaining part is the build number
version=`echo $describe | cut -d '-' -f1`
build=`echo $describe | cut -d '-' -f2`
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $version" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" || exit 1
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $build" "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}" || exit 1
После второй сборки значение CFBundleShortVersionString берется изMARKETING_VERSION
внутри .pbxproj
файла. MARKETING_VERSION
- это новое свойство, добавленное в Xcode11 внутри каждой схемы. Допустим, номер версии равен 999,999,99
. При первом запуске отладки значение CFBundleShortVersionString
будет равно 10.1.2. и затем 999.999.999 после каждой последующей сборки. Как я уже сказал, если я очищаю папку сборки, версия возвращается к правильному значению 10.1.2.
В Xcode 11 это происходит как на симуляторе, так и на устройстве, и нормально работало в Xcode 10и предыдущие версии.