Criar um modelo de projeto do Xcode

Olá pessoal, sou Vanya - desenvolvedor iOS. Neste artigo, falarei sobre como criar modelos de projeto do Xcode e como eles ajudaram a economizar tempo no início do projeto.



Agora, os desenvolvedores do iOS têm muitas ferramentas para automatizar ações de rotina. No Surf, usamos Generamba, Fastlane, SwiftGen, SwiftLint, Jenkins. E constantemente procurando maneiras de automatizar outra coisa. E se antes passamos de um a dois dias na inicialização de um novo projeto, agora não leva mais de quatro horas.


O que você precisa para começar a desenvolver um grande projeto?

1. Crie um repositório.
- Configurar direitos de acesso;
- Configure notificações nos desenvolvedores de bate-papo.


2. Crie um projeto.
- Crie uma estrutura de pastas;
- Adicione vários arquivos auxiliares como todas as suas extensões favoritas;
- Configurar CI / CD;
- Adicione vários linter e geradores (Generamba / SwiftLint / SwiftGen);
- Aperte o vício;
- ...
Após 1-2 dias de trabalho, você pode começar o desenvolvimento completo.


Obviamente, a maioria dessas etapas pode ser automatizada. Das possíveis opções disponíveis eram:
- XcodeGen;
- Templates de projetos Xcode;
- Projeto básico do Xcode.

Xcodegen

+ Permite gerar .xcodeproj em tempo real usando o arquivo de configuração, que adiciona a capacidade de se livrar de conflitos no arquivo do projeto.
- Usado em conjunto com outros scripts, pois funciona apenas com o arquivo do projeto, sem afetar o restante dos arquivos.

Modelos de Projeto Xcode

+ Você pode gerar .xcodeproj com todas as configurações, bem como com outros arquivos adicionais.
- Não há documentação oficial completa e descrição dos modelos em xml.

Projeto básico do Xcode

+ Configure rapidamente e imediatamente com todos os arquivos e dependências necessários.
- Remodelar para um projeto específico por um longo tempo. E você pode acidentalmente pular um passo e dar um tiro no próprio pé.

Como resultado, optamos pelo uso de projetos Xcode, o que nos permitiu otimizar o processo e reduzir o tempo para criar um projeto. O projeto básico do Xcode parecia uma muleta, e não precisamos da flexibilidade que os scripts personalizados trazem.


Modelos de Projeto Xcode


Como escrevi acima, usando modelos Xcode, você pode criar projetos iOS / macOS / tvOS / watchOS / entre plataformas e adicionar arquivos e configurações. O problema é que a Apple não fornece nenhuma documentação para isso. Tudo isso - alguns pequenos tutoriais e exemplos de diferentes entusiastas, usei este wiki.

O que está fora da caixa
Os modelos de aplicativos IOS estão aqui:
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/

e para aplicativos MacOS aqui:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/

Os modelos de projeto são representados por arquivos .plist comuns. Veja como é o familiar aplicativo Single View.



Cada modelo possui um nome exclusivo - "Identificador", os modelos da Apple têm o prefixo com.apple.dt.unit.
Antepassados ​​são os pais do modelo atual. Os modelos suportam herança múltipla, ou seja, o Aplicativo de exibição única herda as propriedades do aplicativo Storyboard e do aplicativo Core Data Cocoa Touch.

É assim que a Hierarquia de aplicativo de exibição única se parece.



Crie seu próprio modelo

Modelos personalizados são melhor adicionados à biblioteca local ~ / Library / Developer / Xcode / Templates, portanto, não os perderemos ao atualizar o Xcode. Se não houver esse diretório, crie-o.

Eu preparei um pequeno modelo que será adicionado ao nosso projeto Podfile com dependências predefinidas.

Código do modelo preparado
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kind</key> <string>Xcode.Xcode3.ProjectTemplateUnitKind</string> <key>Identifier</key> <string>ru.surfstudio.dt.unit.customTemplate</string> <key>Ancestors</key> <array> <string>com.apple.dt.unit.singleViewApplication</string> </array> <key>Concrete</key> <true/> <key>Description</key> <string></string> <key>Definitions</key> <dict> <key>../Podfile</key> <string>platform :ios, '11.0' pod 'Alamofire' pod 'Crashlytics' pod 'Fabric' </string> </dict> <key>Nodes</key> <array> <string>../Podfile</string> </array> </dict> </plist> 


Aqui, criamos a seção Definições, que conterá variáveis ​​e arquivos que podem ser adicionados ao projeto. Lá e adicionou a chave Podfile. A chave indica o arquivo que estamos criando ou editando. Após a chave, defina a linha que será gravada neste arquivo. Em vez de escrever linhas manualmente, nos referimos aos arquivos do diretório com o modelo e os retiramos de lá.

Agora pegue esse código e coloque-o em um arquivo chamado TemplateInfo.plist na pasta CustomTemplate.xctemplate do diretório de modelos.

Vamos ver o que temos. Se tudo correu de acordo com o planejado, ao criar um projeto no Xcode (Arquivo-> Novo-> Projeto (⇧⌘N)), veremos uma nova seção Modelos e nela nosso novo modelo “CustomTemplate”.



Nós o selecionamos e criamos um projeto. Após a criação, o Prodfile será adicionado, conforme necessário.



Nós bombeamos o modelo

Vamos adicionar a geração Leiame para o nosso projeto. Agora vamos tentar adicioná-lo imediatamente com um arquivo e não descrevê-lo dentro do modelo.

Portanto, adicione o arquivo README.md dentro do nosso CustomTemplate.xctemplate e aqui está:

 # ___PROJECTNAME___ Description of my project 


Para que nosso modelo possa adicionar um arquivo à seção Nós, você precisa adicionar:

 <string>../README.md</string> 


Além disso, dentro da seção Definições, adicione:

 <key>../README.md</key> <dict> <key>Path</key> <string>README.md</string> </dict> 

O código completo do modelo agora se parece com isso
 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Kind</key> <string>Xcode.Xcode3.ProjectTemplateUnitKind</string> <key>Identifier</key> <string>ru.surfstudio.dt.unit.customTemplate</string> <key>Ancestors</key> <array> <string>com.apple.dt.unit.singleViewApplication</string> </array> <key>Concrete</key> <true/> <key>Description</key> <string></string> <key>Definitions</key> <dict> <key>../Podfile</key> <string> platform :ios, '11.0' pod 'Alamofire' pod 'Crashlytics' pod 'Fabric' </string> <key>../README.md</key> <dict> <key>Path</key> <string>README.md</string> </dict> </dict> <key>Nodes</key> <array> <string>../Podfile</string> <string>../README.md</string> </array> </dict> </plist> 


Vamos verificar o que aconteceu.
Vamos tentar novamente criar um projeto usando nosso CustomTemplate e, no final, veremos que o Leia-me foi adicionado ao projeto:



Pessoas atentas perceberam que em README.md adicionamos ___PROJECTNAME___ ao cabeçalho, e não "MyNewProject". ___PROJECTNAME___, esta é uma constante predefinida que você pode usar para suas necessidades.

Por exemplo, para gerar um cabeçalho para um arquivo com código, como o Xcode geralmente faz para nós, use o seguinte modelo:

 // // ___FILENAME___ // ___PACKAGENAME___ // // Created by ___FULLUSERNAME___ on ___DATE___. //___COPYRIGHT___ // 

Mais informações sobre as constantes disponíveis estão aqui .

Conclusão


Hoje aprendemos como criar modelos de projeto simples. Agora temos um modelo que pode adicionar arquivos Podfile e README ao nosso projeto.

Se você deseja seguir nossos passos e reduzir o tempo para criar um projeto, recomendo:

1. Escolha a solução certa.
Além dos modelos do Xcode, existem outros: XcodeGen ou o projeto base. De qualquer forma, antes de escolher uma ferramenta, estude os prós e os contras e escolha a ferramenta certa.

2. Descreva em detalhes as etapas necessárias para criar um projeto típico. Os projetos não são iniciados com muita frequência, para que você possa esquecer algumas etapas.

3. Tente automatizar as etapas do ponto # 2.
Por exemplo, alguns deles devem ser transferidos para o modelo Xcode e outros para scripts a serem chamados após a criação do projeto.

Informações úteis: um artigo de revisão sobre modelos e docas em modelos

Source: https://habr.com/ru/post/pt460265/


All Articles