Evitando conflitos e otimizando seu projeto com XcodeGen
Como facilitar o compartilhamento do repositório e simplificar pull requests
Evitando conflitos e otimizando seu projeto com XcodeGen
Todo desenvolvedor iOS tem em suas mãos uma grande ferramenta para desenvolvimento de projetos em Swift, que ao mesmo tempo é um dos maiores percalços em seu trabalho: o XCode.
E como toda ferramenta, o XCode possui falhas.

Alterações no .xcodeproj causadas por movimentações no diretório do projeto
Toda alteração na estrutura do diretório do projeto gera modificações no .xcodeproj:
- Cada arquivo adicionado ou removido.
- Quaisquer modificações na estrutura do projeto, como um arquivo ou pasta movida no diretório.
Por mais que esse tipo de alteração no .xcodeproj seja fácil de verificar em um code review (e é comum simplesmente ignorar essas alterações), quando várias pessoas estão trabalhando em um mesmo projeto, cada modificação irá gerar mudanças diferentes, em posições diferentes, com identificadores diferentes.
E isso facilmente se torna uma bola de neve de conflitos.
Mas o .xcodeproj não serve apenas para duplicar o seu diretorio de arquivos do projeto. É no .xcodeproj que ficam configuradas e armazenadas as especificações para compilação das aplicações e bibliotecas do projeto.
E essas definições de projeto podem ser simplificadas quando entendemos como o XCode as busca.
Na geração de um binário, ou .framework, o XCode busca cada configuração passando pelas camadas:
- target
- target .xcconfig
- project
- project .xcconfig
- sdk defaults
Inserindo a configuração que você precisa, diretamente na camada mais superior na qual ela é pertinente, é possível reduzir a quantidade de especificações do projeto.
E é esse mecanismo que o XCodeGen utiliza para gerar o .xcodeproj de seu projeto, tomando como base o diretório de arquivos e um arquivo de especificações project.yml .
O que faz o XCodeGen?
Com o XCodeGen, a estrutura do seu projeto passa a ser um reflexo do diretório do seu repositório.
Em sua execução, o XCodeGen irá gerar um arquivo .xcodeproj espelhando a estrutura do diretório e configurando o projeto de acordo com as especificações do arquivo project.yml .
Um projeto simples exigirá pouquíssimas definições no project.yml, pois a ferramenta preenche o restante das configurações com as mesmas definições default utilizadas pelo XCode na geração de um novo projeto.
Ao mesmo tempo, é possivel especificar projetos complexos, com múltiplos targets, schemes, configurações de builds e scripts, tornando possível customizar todo o projeto. E isso inclui os gerenciadores de dependencia: CocoaPods, Carthage e Swift Packet Manager.
Na verdade, a configuração do Carthage no projeto se torna muito mais simples com o XCodeGen.
Como adotar o XCodeGen no meu projeto?
A primeira ação será criar o arquivo de especificações do projeto, o que pode ser feito no terminal dentro do diretório do projeto:
$ touch project.yml
A extensão .yml se refere ao formato YAML, utilizado para serializar dados assim como JSON ou XML, mas com o propósito de ser mais legível.
É possível utilizar o próprio XCode ou um editor de sua preferência para inserir as configurações.
$ open project.yml -a XCode
Um projeto simples, com um único target e dependência pelo *SPM*, pode ter as seguintes especificações:
name: pagingPOC
options:
minimumXcodeGenVersion: 2.17.0
deploymentTarget:
iOS: "13.0"
packages:
Networking:
url: https://github.com/michelpiresl/networking.git
branch: master
targets:
pagingPOC:
type: application
platform: iOS
deploymentTarget: "13.0"
sources: [pagingPOC]
dependencies:
- package: Networking
Informações detalhadas sobre como realizar cada configuração, estão disponíveis na documentação.
Agora, a melhor parte:
APAGUE SEU .XCODEPROJ !
Mas não apenas apagar. Vamos eliminá-lo da face da Matrix.
Adicione ao .gitignore do repositório:
*.xcodeproj
No caso do arquivo já ter sido "commitado", será necessário eliminá-lo da lista de arquivos rastreados pelo git:
$ git rm --cached yourprojectname.xcodeproj
E pronto.
Como gerar meu projeto utilizando o XCodeGen?
Para outras formas de instalação, acesse o repositório do XCodeGen no **github**.
O XCodeGen é uma ferramenta de linha de comando e para utilizá-la, será necessária sua instalação através do **HomeBrew.**
$ brew install xcodegen
Dentro da pasta do projeto, no mesmo local onde se encontra o arquivo project.yml, execute o comando:
$ xcodegen generate
E pronto.
Caso o projeto utilize CocoaPods, será necessário executar também a instalação dos pods para geração do .xcworkspace.
Mas como toda ferramenta… o XCodeGen também possui falhas!
Sempre que houver modificações no diretório do repositório, será necessário gerar novamente o projeto.
Mas novamente, o projeto será gerado seguindo as configurações definidas no arquivo de especificação e espelhando as modificações de estrutura do diretório já verificadas em cada Pull Request.
Menos dor de cabeça.
Para mais informações e aprofundamento:
Este artigo é o primeiro de uma série de artigos cujo objetivo será compartilhar conhecimento e aprendizados de forma: rápida, objetiva e assertiva.
É também minha estréia na plataforma do Medium. Sendo assim, toda crítica e sugestão será bem vinda!
메타데이터
- post_id
- b930c84fa8d8
- slug
- evitando-conflitos-e-otimizando-seu-projeto-com-xcodegen-b930c84fa8d8
- url
- https://medium.com/@michelpl/evitando-conflitos-e-otimizando-seu-projeto-com-xcodegen-b930c84fa8d8
- canonical_url
- https://medium.com/@michelpl/evitando-conflitos-e-otimizando-seu-projeto-com-xcodegen-b930c84fa8d8
- author_url
- https://medium.com/@michelpl
- status
- ok
- fetched_at
- 2026-07-13 06:23:13