ScreenRecording_08-20-2024.10-44-10_1.MP4
Foi muito legal ter feito esse desafio, pois quando olhei as telas do desafio eu pensei que ia ser uma tarefa fácil, mas depois de ver que eu seria avaliado de acordo com o nível da posição, eu vi a oportunidade de fazer overengineering caprichar
na solução. Então fiz o que estava dentro dos meus limites de conhecimento e tempo (que eu não tive muito pois só consegui iniciar
o projeto na quinta-feira).
Eu acho que eu podia ter feito telas mais elaboradas, pois achei que o design, apesar de funcional e bonito (na minha opinião e na dos meus amigos),
é bem simplória, além de eu não ter feito tantos testes quanto eu acho que deveria ter feito. Algo que com certeza eu teria tempo pra fazer se
eu tivesse conseguido iniciarn o dia em que o desafio foi passado pra mim. Além, também, de eu não ter testado as UIView e UIViewController,
e portanto os testes só tiveram uma cobertura de (quase) 100% nos Models, ViewModels e Repositorys.
Utilizei estas bibliotecas pois são as que eu mais tenho experiência, e portanto, mais facilidade. Tentei usar Hero para animações mas eu acabei perdendo horas tentando fazer ele dar certo do jeito que eu queria, porém não tive sucesso, infelizmente. Percebi que as imagens da listagem de repositórios estavam tendo flickering e percebi que teria que cachear as imagens para uma melhor performance e menos bugs na interface, então usei SDWebImage.
- UIKit
- SnapKit
- RxSwift
- Alamofire
- SDWebImage
MVVM-C
Fiz o projeto de forma modularizada (packages independentes uns dos outros), com um design system básico, e o código mais limpo que eu pude pensar na hora, e portanto escalável. Tentei abstrair o máximo possível as coisas que poderiam ser reutilizadas múltiplas vezes, além de tentar sempre facilitar o desenvolvimento com extensions que aceleram e que ajudam em diversos casos. A interface, apesar de simplória, é algo que é bastante do meu agrado algo bem nativo iOS, poderia ser mais elaborada. Algo que eu gostei foram as animações na listagem principal, que por mais simples que seja, fez sentido pra mim pois ela só ocorre em células que não foram vistas antes, parecendo que está a todo momento carregando, dando a ideia do scroll infinito só que mais smooth
Algumas funções de extensões eu peguei de códigos que eu já conhecia e que julgava extremamente úteis e indispensáveis para ajudar no desenvolvimento. Quero deixar claro que essas funções só serviram apenas para essa finalidade, acelerar o desenvolvimento, não descartando o fato de eu ter um extenso conhecimento prévio desse código antes de usar uma parte pequena dele aqui (é fácil de entender se imaginar que é mais uma lib externa que facilita a vida, tipo SDWebImage).
Com sua chave API do Github em mãos, edite o esquema principal do projeto:
Na janela que abrir, clique em "Run" e depois em "Arguments". Procure por "Environment Variables" subistitua na chave API_KEY o campo que explicita o local que
você deve substituir pela chave, na coluna "Value":
Por último, caso tenha problemas com os pacotes, resete o cache deles:
Isso é tudo. Obrigado pela oportunidade!