Gerenciando versões iOS automaticamente sem ferramentas externas
Rafael Leandro
Posted on November 18, 2024
TL;DR:
Vai, apressadinho: agvtool --help
Capítulo 1: Um longo esperado reencontro
Estava num pré-feriadão, tranquilo e feliz até precisar fazer uma release do SDK que mantenho no trabalho e o Fastlane estava quebrando o .xcodeproj.
Esse script recebia uma versão por parâmetro mas eu queria deixar isso totalmente automatizado no CI, aproveitei esse momento para começar a saga de reescrever tudo e resolver tanto o projeto corrompido, como automatizar o incremento da versão.
Capítulo 2: O Confronto com os Orcs
Utilizar Fastlane no meu contexto implica em gerenciar a versão do Ruby e do Fastlane, então novos desenvolvedores ou qualquer um do time que vá rodar o projeto precisariam configurar isso também, incluindo a máquina do CI.
Como eu preciso apenas fazer o archive e enviar o SDK, não é necessário o Fastlane, a solução escolhida foi fazer tudo em shell script mesmo.
Capítulo 3: A Chegada em Mordor
One script to rule them all
Dividi em 3 etapas:
1 - Descobrir a versão do projeto
2 - Fazer o incremento da versão, seguindo a lógica das versões anteriores
3 - Definir a versão no projeto
Aqui o primeiro passo é descobrir qual a versão atual do projeto e para isso usei o agvtool
Para pegar a versão do projeto utilizo o what-marketing-version
e para pegar o build number what-version
.
agvtool what-marketing-version
Em shell:
agv_output=$(agvtool what-marketing-version)
current_version=$(echo "$agv_output" | grep 'Found CFBundleShortVersionString' | head -n 1 | sed -E 's/.*of "([0-9]+\.[0-9]+\.[0-9]+)".*/\1/')
echo "$current_version"
Com o número da versão só fiz uma lógica para incrementar de acordo com o que meu projeto segue. Incrementa o patch até 9, depois passa para o minor até 9 e depois incrementa o major.
increment_version() {
local version="$1"
# Divide into (major, minor, patch)
IFS='.' read -r major minor patch <<< "$version"
# Increment the patch number, considering the limit of 9
if [ "$patch" -lt 9 ]; then
((patch++))
else
# If patch reaches 9, reset it to 0 and increment the minor number
patch=0
if [ "$minor" -lt 9 ]; then
((minor++))
else
# If minor reaches 9, reset it to 0 and increment the major number
minor=0
if [ "$major" -lt 9 ]; then
((major++))
fi
fi
fi
echo "$major.$minor.$patch"
}
E finalmente, para atualizar a versão:
version=$(get_version)
new_version=$(increment_version $version)
agvtool new-marketing-version $new_version
Posted on November 18, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.