Concrete Logo
Hamburger button

Adeus Xcode/ project.pbxproj Merge!

  • Blog
  • 13 de Setembro de 2017
Share

*Este post foi originalmente publicado (em inglês) no Cocoacademy. Veja aqui.

Há um tempo, decidi resolver um problema que me incomodava muito: o merge do project.pbxproj no Xcode. Todo mundo que trabalhou como desenvolvedor iOS sabe quanta frustração esse único arquivo pode produzir. Ele é o responsável por quase tudo o que acontece no seu projeto Xcode: todas as mudanças, todas as configurações diferentes, cada remoção ou adição que um desenvolvedor faz afeta esse arquivo todo-poderoso.

Não é nenhum segredo que esses tipos de merge acontecem muito e, para piorar a situação, geralmente não são do tipo fácil. Não estou dizendo que são difíceis, mas dão uma verdadeira dor de cabeça na maioria das vezes.

Então, o que nós podemos fazer sobre isso?

Para responder essa pergunta testei pela primeira vez o Xcake, uma gem ruby que endereça o problema.

Da página do Xcake no Github:

Você descreve seu projeto em um arquivo de texto simples: seu Cakefile. O Xcake cria seu projeto com base nesse arquivo, incluindo a importação de todos os seus arquivos e a criação de grupos para coincidir com o hierarquia definida no Cakefile.

Isso é perfeito para trabalhar em equipe ou com CocoaPods, pois reduz os conflitos, facilita a modificação de configurações e permite que você crie um projeto limpo sempre que precisar.

Então, basicamente, você pode criar um Cakefile, arquivo que descreve a configuração do seu projeto. Depois disso a única coisa que precisa fazer é executar um simples cmd:

 

Voilà!! Um novo projeto Xcode. No entanto, você poderia ter obtido esta informação no GitHub. Então vou tentar tornar este post um pouco mais interessante compartilhando algumas das coisas que fiz durante a migração do meu projeto da Marvel para Xcake, bem como alguns dos benefícios de fazê-lo.

Cake primeiro… certo?

Primeiro precisamos criar um Cakefile, usando o cmd:

Depois você só precisa configurar como quiser, mas compartilho a configuração do meu logo abaixo. A página GitHub do Xcake tem mais alguns exemplos de diferentes configurações.

Como você pode ver, a configuração é bastante direta. Você pode vincular arquivos de script diferentes para suas fases de script, bem como muitas outras coisas, variando caso a caso. Eu decidi manter as coisas simples para esse post e o Cakefile nos permite parar de versionar nosso * .xcodeproj e deixar o Xcake gerá-lo desde o início, toda vez, o que reduz muito os conflitos e problemas de merge.

So far so good?

O único problema que encontrei nessa abordagem até agora é que o Cakefile tem suporte limitado para esquemas, portanto não é possível personalizar muito depois de gerar. Depois de abrir uma issue na página do Github, me sugeriram uma solução que lida com esse problema, pelo menos por enquanto. A solução apenas substitui o esquema por um salvo após a geração do projeto Xcode.Bootstrapping.

Eu não sei o que vocês acham, mas essas etapas pedem um script de inicialização. E é isso que vamos fazer com a ajuda do Fastlane. =)

Depois de criar esta pista de Bootstrap, só precisamos adicionar o plugin Xcake ao Fastlane usando o cmd abaixo:

Última parte: agora, cada vez que puxar seu código, você só precisa executar…

… and you’re good to go!

Ainda preciso explorar um pouco mais essa ferramenta e testá-la em um projeto real em produção para ver como isso funciona, mas até agora gostei bastante. Se ela corrigir 80% dos problemas gerados por project.pbxproj eu ficaria mais do que feliz. E vocês? Este pbx é um problema no seu projeto? Eu adoraria ouvir o que acha sobre essa e outras ferramentas que abordam o problema e/ou sua experiência com esse tipo de coisa.
Como sempre, qualquer sugestão, dúvidas ou feedbacks são mais do que bem-vindos. =)

É desenvolvedor iOS e quer fazer parte de times multidisciplinares, trabalhando em produtos incríveis? Clique aqui. 😉