Desenvolvimento

13 jul, 2016

Organizando ambientes no XCode

Publicidade

Quantas vezes já nos pegamos em um emaranhado de URL’s apontando para diversos ambientes diferentes, trocando configurações de instrumentos como Mixpanel, New Relic e outros? Muitas vezes, não é mesmo?

Podemos simplificar muito esse processo, tornando-o indolor, por meio do User-Defined Settings. Já ouviu falar? Neste artigo, vou mostrar como criar e acessar essas configurações, para que nosso app se comporte como o esperado, independente do scheme ou target que estamos buildando.

Para começar, basta adicionar um novo arquivo de configuração ao nosso projeto. Para isso, vamos até a aba Info e adicionamos uma nova configuração. Ao fazer isso, precisamos especificar se ele será uma cópia do arquivo padrão de Release ou Debug:

1-7GOO783Sx5AXFIPdsR2Qow

Vamos considerar que serão dois os ambientes no nosso projeto: um para release, na App Store, e outro apenas para desenvolvimento. Neste caso, vamos criar mais duas configurações: uma duplicando de Release e outra de Debug:

1-2TsoxvqjYmFrBPtyEIkEWQ

Agora que definimos quais serão os ambientes do nosso App, podemos criar a tão desejada User-Defined Setting. Para isso, basta ir ao menu Build Settings para adicionar:

1-gwbBspftuG5Bex7_d718Zw

Vamos usar esse novo setting para definir as URL’s dos ambientes. Assim, vamos nomear nosso Setting como BASE_URL:

1-8cAWG49E2jSg95d8KjztWQ

Podemos observar que nossa configuração de usuário foi adicionada com sucesso, e dentro dela temos os ambientes que definimos nos passos anteriores. Nesses campos, vamos adicionar as URL’s desejadas e em cada uma das configurações descreveremos a URL que apontará para os respectivos ambientes:

1-JEKf0JxFW1jSn1vhuLfGFg

Podemos criar tantas configurações de usuários quanto quisermos. Então, vamos criar mais uma para uma hipotética configuração de Mixpanel:

1-mnkrUTwU15yr56rQF1EPEQ

Para facilitar o nosso processo de build, vamos criar schemes que nos traduzam qual ambiente queremos buildar:

1-H4HI0Zvl_-r9_QIeZ2fuJQ

Vamos criar o de development primeiro, nomeando nosso scheme de acordo:

1-R5kXJgQJ6n4L3hHCAJN1fA

Feito isso, precisamos editar nosso scheme para dizer a ele qual configuração ele irá obedecer. Vamos à aba Info na opção Run na edição de schemes e alteramos para configuração de Development:

1-ElhZ0Q_7ZUcH_MdQ2STdHw

O mesmo passo que fizemos para Development, temos também que fazer para todas as outras configurações que criamos, criando um scheme e apontando a respectiva configuração.

Fazendo isso, estaremos com tudo configurado! Mágico, não? Ainda não! Mas não falta muito. Precisamos, agora, criar um modelo que gerenciará esses dados dentro do nosso código.

Para isso, precisamos mapear as nossas configurações em nosso plist. Podemos chamar esse conjunto de configurações de usuário de “EnviromentSetting”. Então, vamos abrir nosso arquivo de plist e adicionar uma nova linha com nome de EnviromentSetting:

1-lnGAUVd0FmB3WnS3R19X2A

Feito isso, vamos modificar o tipo da nossa variável para Dictionary e mapear nossas configurações de usuário dentro desse dicionário:

1-GvWru5RUqNglrtfLRzBhgQ

Agora é só codificar. Parece muito extensa essa configuração, porém quando formos codificar um manager para nossos ambientes, teremos de escrever muito menos código e ele será muito mais legível e fácil de alterar.

Adicione, então, um novo arquivo de Swift em seu projeto. Aqui, vou dar o nome de EnviromentUtil e vou criar uma struct que nos dará as informações pertinentes ao ambiente que estamos rodando o app:

struct EnviromentUtil {
 
    var environment: [String:AnyObject]? {
        get {
            return NSBundle.mainBundle().infoDictionary?["EnviromentSetting"] as? [String:AnyObject]
        }
    }
 
    var baseUrl: String? {
        get {
            return environment?["BASE_URL"] as? String
        }
    }
 
    var mixpanelID: String? {
        get {
            return environment?["MIXPANEL_ID"] as? String
        }
    }
 
}

Simples, não? Primeiro, adicionamos uma variável que nos dará acesso às informações que estão contidas em nosso Dicionário EnviromentSetting criado no plist. Depois, criamos uma variável que conterá o valor da nossa BASE_URL e MIXPANEL_ID dentro desse dicionário.

É assim que podemos simplificar e tornar indolor nossa forma de gerenciar URL’s e dados que mudam de acordo com um determinado ambiente.

Ficou alguma dúvida ou tem alguma sugestão? Aproveite os campos abaixo.

Até a próxima!