DEV Community

Cover image for Gerenciando versões iOS automaticamente sem ferramentas externas
Rafael Leandro
Rafael Leandro

Posted on

2 1

Gerenciando versões iOS automaticamente sem ferramentas externas

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

Image description

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

retorno da função agvtool what-marketing-version mostrando as versões em cada target

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"
Enter fullscreen mode Exit fullscreen mode

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"
}
Enter fullscreen mode Exit fullscreen mode

E finalmente, para atualizar a versão:

version=$(get_version)
new_version=$(increment_version $version)
agvtool new-marketing-version $new_version
Enter fullscreen mode Exit fullscreen mode

Image description

Sentry blog image

The Visual Studio App Center’s retiring

But sadly….you’re not. See how to make the switch to Sentry for all your crash reporting needs.

Read more

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay