Neste projeto foi desenvolvido um aplicativo para consultar a API do GitHub e retornar os repositórios mais populares de Swift, mostrando sua lista de pull requests. O projeto foi desenvolvido visando as boas práticas de programação e os conceitos fundamentais de aplicativos nativos de iOS.
A solução adotada envolve um aplicativo Swift desenvolvido através de UIKit e que possui 3 cenas principais, representando a navegação do usuário pelo App:
- Home: tela principal do aplicativo, onde é mostrada a lista de repositórios do GitHub dada requisição na url:
https://api.github.com/search/repositories?q=language:Swift&sort=stars&page={page} - RepoDetail: tela apresentada ao usuário como um detalhe do repositório selecionado. O detalhe representa a lista de pull requests abertos para o repositório selecionado.
- PullRequestDetail: tela de detalhe do pull request, apresentada como modal e que carrega uma webview dado clique em determinado PullRequest da lista
Para este projeto, as seguintes libs foram utilizadas:
- UIKit: Framework Swift para desenvolvimento de apps
- Snapkit: Lib para construção de constraints
- RXSwif: Lib para desenvolvimento de programação reativa
- Kingfisher: Lib para download de imagens através de uma URL
A arquitetura utilizada para o projeto é a Clean Swift, que divide a responsabilidade do desenvolvimento através de:
- ViewController -> Responsável por controlar o ciclo de vida da view e as possíveis interações do usuário com a mesma
- Interactor -> Responsável por gerenciar as interações do usuário. Através das interações aqui processadas, um resultado é apresentado ao usuário
- Worker -> Processa as interações. Aqui são realizadas as chamadas de API, por exemplo.
- Presenter -> Apresenta os resultados com base em cada interação
- View -> É o modelo visual que é controlado pela ViewController
- Router -> Gerencia as rotas que o usuário pode seguir dentro da controller
- Foi utilizado coordinator pattern para a organização e orquestração da navegação do app em um único arquivo. Facilitando identificar cada ponto de entrada em determinada jornada
- A maior parte da documentação foi realizada através das issues do Git
- Pods foram utilizados no projeto para otimizar o desenvolvimento, já que possibilitam a economia de linhas de código, arquivos e até mesmo oferecem ao app ganho de performance e orquestração de threads (como RXSwift por exemplo)
Para rodar o projeto, as seguintes instruções devem ser seguidas:
- Clone este repositório
- Abra o projeto do repositório via terminal
- Em seu terminal, rode o script
sh rebuild_project.sh
In this project, an application was developed to query the GitHub API and return the most popular Swift repositories, showing their list of pull requests. The project was developed with a focus on best programming practices and the fundamental concepts of native iOS applications.
The solution adopted involves a Swift application developed using UIKit and which has 3 main scenes, representing the user's navigation through the App:
- Home: main screen of the application, where the list of GitHub repositories is shown given the request at the url:
https://api.github.com/search/repositories?q=language:Swift&sort=stars&page={page} - RepoDetail: screen presented to the user as a detail of the selected repository. The detail represents the list of open pull requests for the selected repository.
- PullRequestDetail: pull request detail screen, presented as modal and which loads a webview when clicking on a specific PullRequest in the list
For this project, the following libs were used:
- UIKit: Swift framework for app development
- Snapkit: Lib for building constraints
- RXSwif: Lib for reactive programming development
- Kingfisher: Lib for downloading images via a URL
The architecture used for the project is Clean Swift, which divides development responsibility through:
- ViewController -> Responsible for controlling the view's life cycle and possible user interactions with it
- Interactor -> Responsible for managing user interactions. Through the interactions processed here, a result is presented to the user
- Worker -> Processes interactions. API calls are made here, for example.
- Presenter -> Presents results based on each interaction
- View -> It is the visual model that is controlled by the ViewController
- Router -> Manages the routes that the user can follow within the controller
- Coordinator pattern was used to organize and orchestrate the app's navigation in a single file. Making it easier to identify each entry point in a given journey
- Most of the documentation was done through Git issues
To run this project, the following instructions must be followed:
- Clone this repository
- Open the repository project via terminal
- In your terminal, run the
sh rebuild_project.shscript.



