Robson Amorim

Sem categoria / Xamarin

Xamarin – Automatizando alterações no .plist e .properties com Cake

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
Invoke-WebRequest https://cakebuild.net/download/bootstrapper/windows -OutFile build.ps1
Linux
curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/linux
OS X
 
curl -Lsfo build.sh https://cakebuild.net/download/bootstrapper/osx 

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:


var target = Argument("target", "Default");

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:

#addin nuget:?package=Cake.FileHelpers
Como citei acima, o Cake possui uma série de Addins que podem ser vistas aqui. O Addin adicionado acima irá incluir ao nosso script uma ferramentas para tratamento de arquivos.
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.
Vamos adicionar a Task de transformação do arquivo .properties abaixo da declaração de Addin e da variável target:
#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);

    });

 

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:

#addin "Cake.Plist"

A Task para transformar o .plist será da seguinte forma:
 
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);

    });

 

Finalizando o arquivo Cake

Ao fim das Tasks adicione o código:

RunTarget(target);

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


./build.ps1 -Target TransformProperties '--serverApi="123"'

 

Tranformando o arquivo .properties

 
./build.ps1 -Target TransformPlist '--serverApi="123"' 

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

Leave A Comment

%d blogueiros gostam disto: