В процессе разработки приложение тестируется, и бывает, что нужно знать, какая версия приложения и с каким номером сборки у тестировщика/другого участника процесса установлена. Например, баг уже исправлен, а человек новый билд ещё не поставил и сетует, что ничего не исправлено.
Зачастую эту информацию прячут где-нибудь, например, в приложении Яндекс.Маркет, нужно ткнуть в раздел Кабинет и выбрать пункт «О приложении»:
Пример
Для удобства (или потому, что этот экран ещё не готов), можно вынести эту полезную информацию прямо на иконку приложения.
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
return
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»
Комментарии (7)
InstaRobot
15.07.2015 23:33Интересная фишка, но хочу задать вопрос по скрину Яндекс.Маркета! Откуда он? Я там вижу, что ТЕЛЕ2 использует ЛТЕ. Я наверное что то пропустил, но данный сотовый оператор лишь недавно начал 3G к своей сети прикручивать.
barsuga
Спасибо, берем метод в работу :) Вопрос билдов для приложений очень актуален.
На практике, как ни странно, для тестировщика бывает удобно видеть даже не номер сборки, а дату билда. Так и заказчик, и тестировщик в процессе разработки проекта быстро понимают кто на что смотрит.