Clean Swift Architecture: como uma Plataforma de Desenvolvimento padroniza a criação de projetos iOS

Imagem capa do conteúdo sobre Foto de uma tela de computador e de um celular com códigos em verde. No monitor do computador, há um post-it e abaixo o teclado.
Confira um exemplo de como usar a StackSpot EDP para criar projetos padronizados no desenvolvimento iOS utilizando a Clean Swift Architecture junto com ViewCode.

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.

Terminal mostrando os inputs solicitados pela CLI da StackSpot ao criar um novo plugin

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:

  1. Perguntar ao usuário quais são os dados necessários.
  2. 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:

Swift
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.

Imagem mostrando o conteúdo da pasta templates para o plugin de Clean Swift Architecture.

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:

Swift
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.

Terminal solicitando os parâmetros necessários para a aplicação do plugin.

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.

Imagem mostrando a pasta com a estrutura do projeto criado a partir da aplicação do plugin de Clean Swift Architecture recém-criado. 

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.

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

Summary

Related posts

*Material em Inglês

Baixe grátis o eBook
e descubra caminhos para evoluir sua empresa