Se assim como eu, além de desenvolver aplicativos mobile, você também desenvolve ou já desenvolveu sistemas web, você provavelmente já precisou armazenar configurações específicas de ambiente do seu site no famigerado .config
No mundo mobile, temos algumas opções para armazenar configurações do nosso app. Para iOS utilizamos o arquivo .plist e no mundo Android o arquivo .properties
Estas configurações normalmente, precisam ser alteradas quando o app muda de ambiente de desenvolvimento para homologação e de homologação para produção.
Para evitar ter arquivos diferentes para cada ambiente ou ter que fazer estas mudanças manualmente correndo o risco de esquecer de alguma configuração ou digitar algo incorreto, o Cake parece uma boa alternativa para automatizar estas tarefas no seu backend.
Arquivos .properties e .plist
Para realizar os passos descritos neste exemplo, vamos precisar ter um arquivo .properties e um arquivo .plist.
Eu criei o arquivo meuApp.properties na pasta Assets do projeto Android e o arquivo meuApp.plist na raiz do projeto iOS.
Adicionei a configuração: ServerApi = minhaapi.com.br/api
Cake
O Cake é um sistema de automatização de tarefas desenvolvido em C#, open-source e cross plataform.
Cada método criado no Cake para automatizar algo é uma Task. Cada Task possui um nome, dependências e um corpo que é desenvolvido em C#. Você pode dizer ao Cake que a Task x, depende da y, então o Cake executará primeiro a Task y e depois a Task x.
Além disto o Cake possui alguns método já prontos para você utilizar nas suas Tasks, chamados os Aliasses. Por exemplo o Information(), que irá printar o texto no console de saída.
O Cake também suporta Addins, que são pacotes desenvolvidos pela comunidade e que executam funções específicas, como pro exemplo, transformação do arquivo .plist.
Você pode ler mais sobre o Cake neste post excelente do Mahmoud Automatização de tarefas com C# e Cake
Instalando o Cake
O Cake já possui um bootstrap de arquivos necessário para compilar e executar os scripts. Para instalar o Cake no seu projeto você deve executar o comando abaixo a partir da pasta de seu projeto:
Windows
[code language="text"] Invoke-WebRequest https://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1 [/code]
Linux
[code language="text"] curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/linux [/code]
OS X
[code language="text"] curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/osx [/code]
Criando o arquivo Cake
Para que possamos criar nossa Task Cake, vamos criar um arquivo build.cake no mesmo diretório onde estão salvos os arquivos de bootstrap salvos no passo anterior.
Após criado o arquivo, abra-o em seu editor de preferencia para criarmos as Tasks.
Vamos adicionar um componente importante antes de começarmos a escrever nossa Task de tranformação dos arquivos .plist e .properties. No começo do arquivo build.cake adicione o código abaixo:
[code language="text"] var target = Argument("target", "Default"); [/code]
O Argument usado acima, funcionará como um parametro onde o primeiro valor é nome do parametro e o segundo um valor padrão. Este parametro irá receber um texto informado no momento da execução do script.
O valor informado nesta variável target será a task executada, você verá mais adiante.
Este código irá ler o nome da Task informado na hora da execução do script, e caso não informado, irá executar a Task com nome Default
Criando a Task para o arquivo .properties
No topo do arquivo build.cake adicione a linha:
[code language="text"] #addin nuget:?package=Cake.FileHelpers [/code]
Na tranformação do arquivo .properties, você pode utilizar um Addin de tranformação de arquivo .ini, entretanto, caso você possua comentários no arquivo, iniciados com “#” o Addin não irá funcionar.
[code language="csharp"] #addin nuget:?package=Cake.FileHelpers var target = Argument("target", "Default"); Task("TransformProperties") .Does(()=> { var serverApi = Argument<string>("serverApi"); var propertiesFile = "./PostCake/PostCake.Android/Assets/meuApp.properties"; var droidpropertiesContent = FileReadLines(propertiesFile); var lineToChange = droidpropertiesContent.FirstOrDefault(x => x.Contains("ServerApi")); var serverApiProperty = lineToChange.Split('='); serverApiProperty[1] = serverApi; var indexOfLineToChange = Array.IndexOf(droidpropertiesContent, lineToChange); droidpropertiesContent[indexOfLineToChange] = String.Join("= ", serverApiProperty); FileWriteLines(propertiesFile, droidpropertiesContent); }); [/code]
Criando a Task para o arquivo .plist
Para tranformar o arquivo .plist vamos utilizar um Addin já existente, open-source e muito simples.
Adicione logo abaixo de FileHelpers o Addin:
[code language="text"] #addin "Cake.Plist" [/code]
[code language="csharp"] Task("TransformPlist") .Does(()=> { var apiServer = Argument<string>("serverApi"); var plist = File("./PostCake/PostCake.iOS/meuApp.plist"); dynamic data = DeserializePlist(plist); data["ServerApi"] = apiServer; SerializePlist(plist, data); }); [/code]
Finalizando o arquivo Cake
Ao fim das Tasks adicione o código:
[code language="sharp"] RunTarget(target); [/code]
O RunTarget adicionado irá executar a Task informada no momento da execução do script.
Executando as Tasks
Para executar a Task, acesse o diretório onde está o arquivo build.cake pela linha comando (no meu caso, estou usando o windows, vou acessar através do powershell) e execute a task com o comando:
Tranformando o arquivo .plist
[code language="text"] ./build.ps1 -Target TransformProperties '--serverApi="123"' [/code]
Tranformando o arquivo .properties
[code language="text"] ./build.ps1 -Target TransformPlist '--serverApi="123"' [/code]
Onde -Target é o nome da Task e os argumentos (parametros) são informados dentro de aspas simples.
Conclusão
Automatizar tarefas no backend é muito útil quando você precisa realizar tarefas no build e tarefas repetitivas. Juntando o poder do Cake com definições de build, como por exemplo uma esteira de build no Visual Studio Team System, você pode automatizar tranformações de arquivos de configuração, testes, assinaturas de apps e mais de forma simples, coma uma linha de comando.
Por utilizar C# e poussir um documentação abrangente é simples de ser escrito e mantido.
O Cake pode te ajudar a economizar tempo no seu dia a dia e evitar falhas humanas, dado que processos repetitivos serão automatizados.
—
Imagem utilizada no post MeasuredUX
Comentários