Skip to content

luis-gustavo/compasso-challenge

Repository files navigation

Events App

O Events App é um aplicativo baseado no Teste de para desenvolvedor(a) iOS do Woop Sicredi. Trata-se de um aplicativo em Swift que consome uma REST API para exibir uma lista de eventos, mostrar detalhe dos eventos, permitir realizar o check in em um evento e, por fim, compartilhar o evento.

App's preview

Arquitetura

MVVM (Model-View-ViewModel) foi a arquitetura adodata para este projeto com o intuito evitar ViewControllers massivas, garantir boa testabilidade do projeto e por compreender a necessidade do projeto

Integração Contínua

Foi configurado um CI para este projeto utilizando o Github Actions, com o intuito de evitar a regressão de código. Este CI roda tanto os testes quanto o build da aplicação. O status atual do CI é:

Actions Status

Desenvolvimento da Interface

Para o desenvolvimento da interface do projeto foi escolhido o UIKit utilizando a abordagem de ViewCode. O ViewCode foi escolhido pois:

  • Permite melhor reuzo e componentização;
  • Permite melhor controle sobre o fluxo de inicialização;
  • Melhor para trabalhar em equipe (não tem storyboard merge hell).

Testes

Até o momento foram criados 16 testes automatizados para este projeto:

  • 4 Testes são testes focados na interface da aplicação;
  • 12 Testes são focados na parte de networking e nas viewmodels, visto que contém a lógica crucial do aplicativo;

Imagens geradas nos testes de Snapshot:

Snapshot Tests

Todos os testes executando com sucesso:

Tests Suite

Camada de Networking

Foi desenvolvida uma "camada", utilizando Combine, responsável pelo networking, visto que o projeto trabalha essencialmente com uma REST API.

Nework Layer

Destaca-se a utilização do paradigma Protocol Oriented Programming na construção deste módulo, que permite criar código de alta qualidade diminuindo o número de erros e aumentando a manutenibilidade.

Exemplo da utilização da técnica de Type-Erasure utilizada para implementar a Injeção de DepeNdência nesta camada:

Type Erasure

Gerenciamento de Dependências

O Swift Package Manager foi a ferramenta escolhida para o gerenciamento das depedências do projeto, por trazer o benefício de ser completamente integrado com o Xcode, tornando o trabalho mais produtivo. Abaixo estão as depedências deste projeto:

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages