Décio Montanhani

Acelere seu desenvolvimento com Xcode File Templates

01/12/2019templatesxcodedesenvolvimentoiosswift

Imagina o cenário em que você acabou de ser contratado para uma empresa e não conhece ou não tem familiaridade com o código. A primeira task que irá fazer é criar uma nova tela, e para não fugir do padrão de desenvolvimento da empresa, você abre arquivo por arquivo daquela arquitetura linda de 5 ou mais arquivos. Você deve prestar bastante atenção sobre como é feita a injeção de dependências, formatação de código, etc. Só nisso aí algumas horinhas foram perdidas, não é mesmo? Com Xcode File Templates, é possível criar toda essa estrutura em questão de segundos!

Por padrão, a Apple fornece alguns templates que podem ser escolhidos quando se cria um novo arquivo. Por exemplo, ao criar um arquivo Swift ele já vem com um cabeçalho preenchido e um import de Foundation. Assim como num arquivo do tipo UIViewController que já vem com a classe herdando do pacote do UIKit. Esses são os templates padrões do Xcode, que podem ser encontrados no caminho:

/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates

Dica: não coloque os seus templates customizados nessa pasta do Xcode, pois, caso ele atualize, o template será apagado.

Para a nossa felicidade, o Xcode também fornece uma forma de adicionar seus próprios templates, que pode ser uma excelente forma de acelerar as suas tasks e ser mais produtivo. 😉

Nesses templates customizados, é possível criar um ou mais arquivos que facilitam a seguir arquiteturas, como MVVM, MVP, Viper, etc. Basta colocar o nome e ele já monta toda a estrutura, podendo adicionar até arquivos XIB.

O Xcode procura os nossos templates customizados nessa pasta:

~/Library/Developer/Xcode/Templates

Iniciando o nosso template customizado

Para iniciarmos o nosso template, vamos criar a pasta onde ele ficará, caso ainda não tenha sido feita. Execute o comando abaixo:

mkdir -p ~/Library/Developer/Xcode/Templates/File\ Templates/Custom

Agora, dentro da pasta Custom que fizemos no comando acima, adicione outra pasta com o nome do seu template + .xctemplate (Que é a extensão que o Xcode reconhece como template). Dentro dessa pasta, 4 arquivos devem ,obrigatoriamente, estar presentes:

TemplateIcon.png - Ícone do seu template
TemplateIcon@2x.png - Ícone 2x do seu template, para telas retina
___FILEBASENAME___.swift - Arquivo do seu template
TemplateInfo.plist - Arquivo de configuração do seu template

Todos os arquivos que estiverem dentro dessa pasta serão adicionados no seu projeto quando for selecionado esse template no Xcode. Se colocar mais de um arquivo swift, ele também irá pro seu projeto. É ai que conseguimos fazer isso para criar um template de arquitetura com todas as camadas que precisar.

Arquivo de configuração .plist

No arquivo de configuração, podemos colocar informações sobre o seu template, como descrição, qual o tipo do template e algumas opções mais personalizadas, como perguntar o nome base do arquivo que deseja gerar. Para não perdermos muito tempo, vou disponibilizar neste gist para baixar e alterar do jeito que quiser.

Ao colar no seu template esse Gist que disponibilizei, seu plist deve ficar assim:

A parte mais importante desse arquivo são as options, que nela pedimos ao usuário para inserir o nome do módulo MVVM que ele quer criar. Isso seria o nome base, que iremos precisar para criar os arquivos mais pra frente. Para conseguirmos pegar esse nome dentro do arquivo, acessaremos o identificador productName que criamos na chave Identifier nas options desse arquivo plist.

Caso queria pedir mais alguma informação para utilizar posteriormente dentro dos seus arquivos em options é possível criar essa opção.

Criando o seu primeiro arquivo de template

Vamos iniciar com a viewController, criando um arquivo ___FILEBASENAME___ViewController.swift. Essa variável FILEBASENAME com 3 underlines será substituída pelo nome dado ao template. Agora dentro do seu novo arquivo, copie o seguinte código:

//
//  ___FILENAME___
//  ___PROJECTNAME___
//
//  Created ___FULLUSERNAME___ on ___DATE___.
//  Copyright © ___YEAR___ ___ORGANIZATIONNAME___. All rights reserved.
//

import UIKit

class ___VARIABLE_productName:identifier___ViewController: UIViewController, ___VARIABLE_productName:identifier___View {

    // MARK: - Vars
	var viewModel: ___VARIABLE_productName:identifier___ViewModel!

    // MARK: - Overrides
	override func viewDidLoad() {
        super.viewDidLoad()

        self.viewModel = ___VARIABLE_productName:identifier___ViewModel(view: self)
    }
}

Perceba que com o prefixo ___VARIABLE_ conseguimos acessar qualquer variável definida nas options do plist. No nosso caso, pegamos a variável productName para criar a classe e referenciar os outros arquivos.

Agora você pode criar mais arquivos de sua arquitetura seguindo esse padrão, e caso queira criar mais costumizações, dê uma olhada nos templates padrões do Swift. Dá pra aprender bastante com os templates já definidos pela Apple. :)

Referências:

Use your loaf - Xcode project templates

Apple - Text Macros Reference



© Décio Montanhani 2024