Skip to content

MaisaMilena/ios-recruiting-brazil

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

41 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Concrete iOS Recruit Challenge


Gif

Criação de um app sobre filmes, usando a API do TheMovieDB.

Optei por utilizar a arquitetura VIP (Clean Swift) pois eu a acho muito adequada quando o contexto envolve consultas à API. Ela encapsula comportamentos de request, response, tratamento e apresentação de dados.

Configurações do projeto

Abra o arquivo Movs.xcworkspace e execute o projeto.

Caso tenha problemas com dependências, abra o terminal na pasta do projeto e execute os seguintes comandos:

  1. bundler exec pod install
    1.1 Se der error, instale o Bundler com o comando gem install bundler e execute o primeiro comando novamente
    1.2 Se ainda tiver erro, verifique a versão do Ruby ruby --version, ela deve ser igual ou superior a 2.3.7

O bundler garante a instalação do CocoaPods, que junto com o arquivo Podfile, são necessários pra baixar as dependências do projeto

Features

  • Tela de Splash;
  • Layout em abas, contendo na primeira aba a tela de grid de filmes e na segunda aba a tela de lista de filmes favoritados no app;
  • Tela de grid de filmes trazendo a lista de filmes populares da API.
  • Tratamento de erros e apresentação dos fluxos de exceção: Busca vazia, Error generico, loading;
  • Ao clicar em um filme do grid deve navegar para a tela de detalhe do filme;
  • Tela de Detalhe do filme deve conter ação para favoritar o filme;
  • Tela de Detalhe do filme deve conter gênero do filme por extenso (ex: Action, Horror, etc); Uso desse request da API para trazer a lista.
  • Tela de lista de favoritos persistido no app entre sessões;
  • Tela de favoritos deve permitir desfavoritar um filme.
  • Tela de grid com busca local;
  • Scroll Infinito para fazer paginação da API de filmes populares;
  • Célula do Grid de filmes com informação se o filme foi favoritado no app ou não;
  • Tela de filtro com seleção de data de lançamento e gênero. A tela de filtro só é acessível a partir da tela de favoritos;
  • Ao Aplicar o filtro, retornar a tela de favoritos e fazer um filtro local usando as informações selecionadas referentes a data de lançamento e gênero;
  • Testes unitários no projeto;
  • Testes funcionais.
  • Pipeline Automatizado

Frameworks

  • A manipulação de favoritos envolve um escopo pequeno de persistência de dados, por isso, optei por utilizar CoreData, que é muito rápido (in-memory) e não aumenta o tamanho do projeto como é o caso do Realm (aproximadamente 78MB)
  • O Moya simplifica o uso do Alamofire, sendo uma opção de fácil manipulação e manutenção
  • O Kingfisher deixa a busca por imagens em URL's muito simples. Parece que estamos fazendo errado de tão simples.

Detalhes

  • Optei por fazer meu próprio design porque acho que aproveitaria melhor o app e a visualização das informações. Utilizei o Sketch e tomei como referência protótipos do Davit Petriashvili e D Design
  • A busca local por filmes local é feita sincronizada com o momento que o usuário está digitando
  • A parte parte de favoritos atualmente é feita localmente mas a arquitetura permite uma fácil alteração para que seja feita pela API.
  • Faço muito uso de Extensions pois adoro como separa comportamentos específicos e deixa o código limpo.
  • Utilizo Factory para simplificar a criação de objetos e configuração de dependências paras as Scenes

Lista de filmes populares

Image of Yaktocat

Detalhes

Image of Yaktocat

Favoritos

Image of Yaktocat

About

[accepted] Desafio iOS da Concrete

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Swift 97.7%
  • Ruby 2.3%