O presente aplicativo é o resultado de um desafio técnico para a BornLogic, e contava com os seguintes requisitos:
- O app deve consumir a seguinte API: https://newsapi.org
- O app deve conter duas telas
- Na primeira tela, exibir do artigo as imagens, autores, títulos e as descrições utilizando UITableView ou UICollectionView
- Ao selecionar uma célula, exibir na segunda tela a imagem, a data de publicação e o conteúdo do artigo, respectivamente
O projeto também contava com os seguintes requisitos opcionais (desejáveis):
- View Code para auto layout
- Utilizar Design Patterns
- Utilizar frameworks nativos
- Protocol Oriented Programming
- Princípios do SOLID
- Ser criativo com a construção do Layout
- Escrever testes com XCTest
O projeto conta com um Design feito seguindo as normas da Human Interface Guidelines da Apple, utilizando da melhor forma os componentes nativos do sistema.
O app se adapta também as configurações dinâmicas do sistema, como dark mode e dynamic font, provendo a melhor experiência possível para todos os usuários, incluindo aqueles com opções de acessibilidade.
Para este projeto foram utilizados Swift, UIKit e XCTest para os testes. Através do UIKit, o projeto utilizou de View Code para o auto layout.
O app também utilizou dos seguintes Design Patterns:
- Factory
- Singleton
- Strategy
O projeto conta com a arquitetura MVVM (Model-View-ViewModel) e segue os conceitos da Clean Architecture, realizando a separação em camadas. A arquitetura implementada permite de modo fácil retirar, atualizar ou inserir novas funcionalidades com bastante facilidade e manutenabilidade, permitindo que o app escale caso necessário.
O projeto conta com testagem unitária utilizando XCTest. Os testes foram organizados a nível de funcionalidade, contando com mocks para cada testes não depender de outras camadas.
O projeto consta apenas com o Kingfisher como dependência (instalado através do Swift Package Manager). Este é usado para o download e cache das imagens baixadas para as notícias.
Como o projeto teve um escopo mais limitado devido ao fato de ser um teste técnico, certas coisas foram deixadas de fora visto que não eram essenciais. Sendo assim, para novas versões é possível adicionar essas funcionalidades e telas, sendo elas:
- Compartilhamento de notícia
- Busca por notícia
- Adição de filtros
- Salvar notícias favoritas