Table of Contents
App is using an open API of Art Institute of Chicago.
- Supports iOS 13.0+
- Arcitecture: MVP+Router
- UI: UIKit
- Third-party libraries: Kingfisher
- Dependency Manager: SPM
More Info:
UIKit was chosen in this app since the minimum supported iOS version is 13. At this version, SwiftUI is relatively new and lacks stability.Regarding the architecture, given the project's size, complex architectures aren't necessary. Therefore, I've implemented a Presenter to shift a significant portion of the logic away from the ViewController. This approach not only segregates responsibilities but also facilitates the testing of logic.
Additionally, I introduced a Router to extract navigation logic from the View. An alternative would have been using a Coordinator, but that seemed excessive for this project's scope.
The project is segmented into three modules: ArtGallery, Domain, and Networking.
ArtGallery: Contains all the screens and logic for them.
Domain: Contains all the models used in the project, along with relevant protocols.
Networking: Centralizes all the logic required to request data from the internet.
The only third-party library used is Kingfisher, which simplifies working with images.
You don't need any API keys to use this project. By default you have 60 request per minute. More info
- Clone the repo
git clone https://github.com/ArtemPrivet/ArtGallery.git
Currently there are only tests in the main project, so to run them you need to press CMD+U within ArtGallery target
- Use the fields parameter to tell exactly what fields to request.
- Add better loading animations
- Snapshot Tests
- Improve UI
See the open issues for a full list of proposed features (and known issues).
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request

