Simple UIKit based app for displaying grid of pictures from https://picsum.photos.
Available from iOS 13+.
Install Sourcery (https://github.com/krzysztofzablocki/Sourcery)
Open LoremPicsum.xcodeproj and:
- cmd+r to run project
- cmd+u to run unit tests
Architecture design is variation over Clean Architecure / Layered Archictecture with UIKit.
Code is splited into
Features folders. Goal is to have all of features decoupled of each other and have an app that is easy to modularize.
View (Display) <-> ViewModel (Business logic, Navigation) <- Repository (Loading data from providers) <- Data provider (APIClient, CoreData etc.)
View is decoupled from ViewModel so we can easily switch between View frameworks, for example UIKit and SwiftUI
Steps to improve
- Add Snapshot testing (https://github.com/pointfreeco/swift-snapshot-testing)
- Add UI tests
- Add dependency injection system (https://github.com/hmlongco/Resolver)
- Improve UI -> animations on interaction, support dark mode
- Improve details view -> Add scroll view to support zooming
- Add better navigation handling -> for such small project pure navigation controller is fine but adding more features will make it hard to maintain. Prefferable approaches Coordinator + Router
- Setup Fastlane
- Improve LaunchScreen
- Improve caching