Configurações dinâmicas de projeto

Utilizando o pre action do projeto ao seu favor

Gerlandio Lucena
4 min readSep 23, 2017

Você já precisou configurar a mesma aplicação para que apontasse para outros ambientes (produção/homologação/desenvolvimento)? Já precisou manter duas versões da mesma aplicação no mesmo device?

Se a resposta para essas perguntas foi SIM, então esse POST pode ajudar você.

Durante meus primeiros anos como desenvolvedor, tive a necessidade de mudar o ambiente de requisição, bundle do aplicativo, incrementar número de versão ou até mesmo variáveis de ambiente de acordo com a configuração de build, isso resultou em experiências bem significativas com relação a esse assunto, e pra ser sincero me diverti muito vendo as coisas acontecerem.

Configuração pré build

Essa é a que mais me diverte em fazer, pois é basicamente programar as ações que eu executaria manualmente de forma programática, como um passo a passo em forma de script que será executado antes que o Xcode efetue o build propriamente dito de seu projeto. Para isso precisamos utilizar uma ferramenta que possa nos ajudar a ler e escrever em nossos arquivos .plist, uma dessas ferramentas já faz parte do SO e é conhecida como PlistBuddy, caso deseje saber informações específicas sobre a ferramenta acesse a documentação.

Existem duas formas de colocarmos esses scripts no nosso projeto:

  • Build Phases
  • Pre-Actions do Schema

Configurações no Build Phases

Se você já configurou o Fabric, SwiftLint ou Cocoapods em algum de seus projeto com certeza já se deparou com o Build Phases, pois ele já faz parte das configurações do seu projeto e você pode facilmente adicionar um Run Script neste trecho simplesmente clicando sobre o + no canto superior esquerdo.

O problema com esta configuração é que você terá menos automação de tarefas, o quê poderia ser colocado nesta parte seria apenas um incremento de número de build por exemplo, pois existe pouco dinamismo nessa abordagem, os Schemes de seu projeto são uma opção bem melhor.

Pre-Actions Schemes

Na parte superior esquerda do Xcode ao lado dos botões de Run e Stop existe um drop down com os Schemas dos targets do seu projeto, expedindo esse drop down você verá uma opção de Edit Schemes, abrindo essa opção vc verá uma tela com a seguir:

Do lado esquerdo você verá a opção Build, expandindo essa opção você terá acesso ao Pre-actions do Scheme, nessa seção é possível criar um Run Script clicando sobre o + do lado inferior esquerdo da tela.

Antes de executar qualquer alteração em nosso arquivo precisamos de uma referência do Info.plist.

appInfoPlist=”${PROJECT_DIR}/${INFOPLIST_FILE}”

É possível alterar um valor no plist de algumas formas, a mais simples é informar o valor diretamente no comando de Set do PlistBuddy, essa é uma abordagem mais direta e muitas vezes acaba limitando a reutilização do script.

Nesse comando estamos alterando o bundle da aplicação, o comando Set é a base para qualquer outro que iremos utilizar.

#Bundle ID

/usr/libexec/PlistBuddy -c “Set :CFBundleIdentifier \”$BUNDLE_ID\”” “$appInfoPlist”

Definir variáveis no script de pré-build é extremamente útil, uma vez que é possível alterar esses valores de forma rápida e prática em todos os scripts que você definir no seu projeto. No script as variáveis podem ser definidas da seguinte forma:

Uma vez definida as variáveis do projeto é momento de alterar os valores de nosso plist, em alguns casos é necessário remover um item do plist para determinado ambiente, porém normalmente somente o comando Set já é suficiente para ajustarmos nosso arquivo de configuração.

Para incrementar o número do build e evitar aquele problema de realizar o upload de um build number já existente no iTunesConnect:

E finalmente vamos alterar nome da aplicação:

O script final ficaria da seguinte forma:

Esse é meu primeiro post, pode ser que eu tenha cometido algum erro e seria muito importante ter o feedback de vocês.👍

No próximo post vou mostrar como utilizar as informações que alteramos no plist dentro do app, obrigado por ler até aqui e até a próxima.

--

--

Gerlandio Lucena

Desenvolvedor apaixonado pela profissão, aprendendo diariamente à estar pronto para dar o próximo passo.