iOS Project implemented with Clean Layered Architecture and MVVM. (Can be used as Template project by replacing item name “Movie”). More information in medium post: Medium Post about Clean Architecture + MVVM
- Domain Layer = Entities + Use Cases + Repositories Interfaces
- Data Repositories Layer = Repositories Implementations + API (Network) + Persistence DB
- Presentation Layer (MVVM) = ViewModels + Views
Note: Domain Layer should not include anything from other layers(e.g Presentation — UIKit or SwiftUI or Data Layer — Mapping Codable)
- Clean Architecture https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html
- Advanced iOS App Architecture https://www.raywenderlich.com/8477-introducing-advanced-ios-app-architecture
- MVVM
- Data Binding using Observable without 3rd party libraries
- Dependency Injection
- Flow Coordinator
- Data Transfer Object (DTO)
- Response Data Caching
- ViewController Lifecycle Behavior
- SwiftUI and UIKit view implementations by reusing same ViewModel (at least Xcode 11 required)
- Error handling examples: in ViewModel, in Networking
- CI Pipeline (Travis CI + Fastlane)
- Unit Tests with Quick and Nimble, and View Unit tests with iOSSnapshotTestCase
- Unit Tests for Use Cases(Domain Layer), ViewModels(Presentation Layer), NetworkService(Infrastructure Layer)
- UI test with XCUITests
- Size Classes and UIStackView in Detail view
- Dark Mode
- SwiftUI example, demostration that presentation layer does not change, only UI (at least Xcode 11 required)
- Pagination
If you would like to use Networking from this example project as repo I made it availabe here
- Xcode Version 11.2.1+ Swift 5.0+
To search a movie, write a name of a movie inside searchbar and hit search button. There are two network calls: request movies and request poster images. Every successful search query is stored persistently.