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.
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:
bundler exec pod install
1.1 Se der error, instale o Bundler com o comandogem install bundler
e execute o primeiro comando novamente
1.2 Se ainda tiver erro, verifique a versão do Rubyruby --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
- 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
- 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.
- 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