A Clean Swift Architecture é amplamente utilizada no ecossistema de desenvolvimento iOS, certamente, por sua alta modularidade e escalabilidade. No entanto, suas múltiplas camadas podem consumir um tempo precioso da pessoa desenvolvedora durante a criação dos arquivos e classes base da arquitetura. Além disso, em equipes grandes, a padronização do código pode ser comprometida devido a pequenas modificações individuais.
Para solucionar esse tipo de problema, ferramentas como a StackSpot EDP podem ser extremamente úteis, por exemplo. Em primeiro lugar, vamos apresentar um exemplo simples de como utilizar essa ferramenta para criar projetos padronizados no desenvolvimento iOS. Por fim, teremos automatizado todo o processo de criação de uma cena utilizando a Clean Swift Architecture junto com ViewCode. Dessa maneira, a ação permitirá que a pessoa desenvolvedora concentre sua produtividade em tarefas não repetitivas. Além disso, vamos destacar as melhorias e outras possibilidades que a StackSpot pode trazer para esse contexto.
A StackSpot, é uma plataforma de desenvolvimento para empresas que acelera a criação, distribuição e reuso de padrões de tecnologia. Sendo assim, você pode padronizar o uso de tecnologias para cada contexto e, com isso, os times conseguem criar softwares confiáveis, com uma arquitetura executável, que pode reduzir o tempo entre o desenvolvimento do primeiro código e a aplicação em produção.
Além disso, a versão em CLI da StackSpot EDP está disponível para uso pessoal. Em resumo, basta baixar e começar a usar.
Esse artigo será dividido em duas partes: o processo de criação e, na mesma linha, em seguida a aplicação de um template.
Criação de um template
1. Em primeiro lugar, é necessário instalar a CLI da StackSpot.
Sendo assim, só seguir o passo a passo para baixar e instalar a CLI da StackSpot EDP na página da Documentação.
2. Em seguida, acesse o seu terminal para criar um Plugin com nome clean-swift-architecture-template utilizando o comando abaixo:
stk create plugin clean-swift-architecture-template
Confira mais detalhes sobre os dois tipos de Plugins e como criar o seu.
3. Contudo, no próximo passo a CLI da StackSpot irá solicitar algumas informações sobre o seu Plugin. Neste exemplo, o atributo ‘type’ dentro do YAML indica o tipo de Plugin que você irá criar. Sendo assim, ele será do tipo app, de aplicação.
Saiba mais sobre os possíveis tipos de Plugins na Documentação da StackSpot EDP.
4. Por fim, a CLI da StackSpot cria toda a estrutura inicial de um Plugin. Você verá a pasta do seu Plugin com a estrutura do arquivo YAML. Além disso, ao final a CLI irá indicar qual o comando que você deve executar para aplicar o Plugin que será criado.
Há alguns artefatos gerados, mas neste artigo iremos focar no arquivo plugin.yaml que oferece diversas possibilidades interessantes. Aqui trataremos de duas delas:
1. inputs
Tratam-se de parâmetros de entrada que serão solicitados à pessoa usuária quando ela aplicar o template para seu projeto. Esses parâmetros serão úteis para materialização dos arquivos .swift gerados após a aplicação do template, por exemplo.
2. hooks
Em resumo, os Hooks Declarativos são ações que podem ser executadas durante alguma das etapas de aplicação do template. Então, dito isto, a utilização do Plugin ocorre em duas etapas:
- Perguntar ao usuário quais são os dados necessários.
- Usar esses dados para preencher modelos de arquivo e criar os arquivos correspondentes.
Saiba mais sobre os tipos de hooks na documentação da StackSpot.
Confira abaixo o arquivo plugin.yaml com os inputs e hooks necessários para o contexto do Plugin que você está criando, e alguns comentários detalhando cada um deles como por exemplo:
schema-version: v2
kind: plugin
# informações gerais sobre o plugin que está sendo criado
metadata:
name: clean-swift-architecture-plugin
display-name: clean-swift-architecture-plugin
description: › Clean Architecture Plugin
version: 0.0.1
picture: plugin.png
spec:
type: app
compatibility:
- iOS
docs:
pt-br: docs/pt-br/docs.md
en-us: docs/en-us/docs.md
single-use: False
repository: https://github.com/Yeltsinn/iOS-Studies-.git
technologies: Swift
- Api
stk-projects-only: false
inputs:
# nome da pasta principal do projeto
- label: Project name
type: text
name: project_name
default: project-name
# nome do pacote, será o mesmo nome do arquivo .xcodeproj
- label: Package Name
type: text
name: package_name
# nome da feature que virá criada junto ao projeto
- label: Feature Name
type: text
name: feature_name
hooks:
# essa ação é responsável por localizar o arquivo de View da feature gerada
# e incluir o snippet com os métodos do protocolo de ViewCode
- type: edit
trigger: after-render
path: "{{inputs.package_name}}/{{inputs.feature_name}}/{{inputs.feature_name}}View.swift"
changes:
- search:
string: "extension {{inputs.feature_name}}View: ViewCodable {"
insert-after:
snippet: snippets/ViewCodeFunctions.swift
when:
not-exists-snippet: snippets/ViewCodeFunctions.swift
# ação responsável por executar o comando xcodegen ao final do processo
# e gerar o arquivo .xcodeproj
- type: run
trigger: after-render
commands:
- "xcodegen"
3. Armazenando os arquivos que serão gerados pelo Plugin
Um outro componente importante é a pasta templates. Em outras palavras, ela contém tudo que será materializado após a aplicação do template, como arquivos de maneira geral e outras pastas.
Além disso, em nosso exemplo, adicionamos os arquivos .swift referentes a cada uma das camadas da Clean Swift Architecture nessa pasta. Dessa forma, os arquivos serão materializados após a aplicação do template.
Ao utilizarmos o parâmetro de input feature_name declarado no arquivo plugin.yaml mencionado anteriormente, o mesmo será substituído pelo valor que a pessoa usuária informar no momento da aplicação do template.
O parâmetro package_name, por exemplo, foi usado para gerar a pasta na qual esses arquivos estarão alocados no projeto.
Por fim, vamos criar uma pasta chamada snippets. Nela podemos inserir arquivos com trechos de código que desejamos aplicar em diferentes pontos do nosso template, no entanto, deixando ele mais enxuto e com menos duplicações de código.
Aqui, por exemplo, vamos usar um snippet que contém os métodos referentes a um protocolo de ViewCode que será aplicado nos arquivos UIView. Confira abaixo:
func setupHierarchy() {
}
func setupConstraints() {
let constraints: [NSLayoutConstraint] = [
/* declare your constraints here */
]
NSLayoutConstraint.activate(constraints)
}
func setupConfigurations() {
}
Aplicação de um Plugin
Após finalizar toda configuração do Plugin, é hora de aplicá-lo na criação de um projeto. No entanto, para isso, execute o comando que foi indicado ao final do processo de criação do Plugin:
stk apply plugin /Users/myuser/clean-swift-architecture-plugin
Posteriormente a execução do comando, os parâmetros de entrada que você definiu no arquivo plugin.yaml devem ser solicitados, como nome do projeto, nome do pacote e funcionalidade inicial.
Por fim, a CLI da StackSpot irá gerar toda estrutura de um projeto de desenvolvimento iOS, com os arquivos da funcionalidade de Login e utilizando como base a Clean Swift Architecture. Em sequência executará o comando xcodegen, conforme um dos hooks definido no arquivo plugin.yaml, resultando na criação do arquivo .xcodeproj.
Consuma inovação, comece a transformação
Assine nosso boletim informativo para se manter atualizado sobre as práticas recomendadas mais recentes para aproveitar a tecnologia para gerar impacto nos negócios
Por fim, as considerações finais
Em conclusão, demonstramos como a StackSpot EDP nos permite automatizar tarefas repetitivas do dia a dia de desenvolvimento, que por vezes, não só minam nossa produtividade como abrem margem para falta de padronização de projetos dentro de uma equipe.
Certamente, é importante ressaltar que a StackSpot trás diversas possibilidade de evolução para o contexto dado neste artigo, por exemplo, a criação de Plugins com as seguintes funcionalidades:
- Adiciona uma camada de Network para requisições REST no projeto.
- Criptografia de dados da aplicação com KeyChain.
- Adiciona uma camada de persistência de dados com CoreData ou algum outro framework.
A ideia é que esses Plugins possam adicionar tais capacidades a quaisquer projetos de desenvolvimento iOS sem a necessidade de reimplementação por parte das pessoas desenvolvedoras, aumentando assim a produtividade e reduzindo as possibilidade de bugs.
Por fim, teminamos, pessoal! Ficou com alguma dúvida ou tem sugestões? Então deixe um comentário.