Pull to refresh

Генерируем номер версии и билда на иконке iOS приложения

Reading time 2 min
Views 11K


В процессе разработки приложение тестируется, и бывает, что нужно знать, какая версия приложения и с каким номером сборки у тестировщика/другого участника процесса установлена. Например, баг уже исправлен, а человек новый билд ещё не поставил и сетует, что ничего не исправлено.

Зачастую эту информацию прячут где-нибудь, например, в приложении Яндекс.Маркет, нужно ткнуть в раздел Кабинет и выбрать пункт «О приложении»:

Пример

Для удобства (или потому, что этот экран ещё не готов), можно вынести эту полезную информацию прямо на иконку приложения.

1. Ставим необходимые пакеты из Homebrew:

brew install imagemagick
brew install ghostscript

2. Открываем наш проект в Xcode, открываем наш Images.xcassets, выбираем AppIcon и смотрим, где лежат и как называются файлы с иконками:



Видим имена файлов, запоминаем:



В моём случае я буду затрагивать только иконки для Retina-айфонов.

3. Открываем Xcode, идём в настройки нашего таргета в раздел Build Phases, добавляем New Run Script Phase:



4. Вставляем в блок Run Script код:

# если у нас релизная сборка, то нам нужна обычная иконка
if [ $CONFIGURATION = "Release" ]; then
exit
fi

# номер версии
version=`/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "${INFOPLIST_FILE}"`
# номер билда
build=`/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "${INFOPLIST_FILE}"`
# если нужно, можно взять имя ветки из git
branch=`git rev-parse --abbrev-ref HEAD`

# функция генерации иконки
function processIcon() {
    export PATH=$PATH:/usr/local/bin
    base_file=$1
    target_icon_name=$2
    base_path=`find ${SRCROOT} -name $base_file`
    
    if [[ ! -f ${base_path} || -z ${base_path} ]]; then
    return;
    fi
    
    target_file=`echo $target_icon_name | sed "s/_base//"`
    target_path="${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/${target_file}"
    
    width=`identify -format %w ${base_path}`
    
    echo $target_path
    echo $target_file
    
    convert -background '#0008' -fill white -gravity center -size ${width}x40 -pointsize 26\
    caption:"${version} (${build})"\
    "${base_path}" +swap -gravity south -composite "${target_path}"
}

# запускаем генерацию
processIcon "ewrw_120-1.png" "AppIcon60x60@2x.png"
processIcon "ewrw_180.png" "AppIcon60x60@3x.png"

Готово. Когда проект собирается, если иконки приложения лежат в Images.xcassets, то внутри file.app они имеют после билда имена вида AppIcon60x60@2x.png, AppIcon60x60@3x.png и т.д. Эти то имена и испльзуются в последних 2 строчках. Нужно просто подставить имена файлов ваших иконок.

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



Надеюсь, кому-то такая мелочь тоже будет полезна.

P.S. Информацию взял и немного допилил отсюда (там для варианта, когда ассеты не используются).

Полезное (в том числе и в комментах): «Автоматическое увеличение номера сборки в Xcode»
Tags:
Hubs:
If this publication inspired you and you want to support the author, do not hesitate to click on the button
+18
Comments 9
Comments Comments 9

Articles