Template iOS App using Clean Architecture and MVVM with Views written in Code
iOS Project implemented with Clean Layered Architecture and MVVM. (Can be used as Template project by replacing item name “Repository”). More information in medium post: Medium Post about Clean Architecture + MVVM
Layers
- Domain Layer = Entities + Use Cases + Repositories Interfaces
- Data Repositories Layer = Repositories Implementations + API (Network) + Persistence DB
- Presentation Layer (MVVM) = ViewModels + Views
Dependency Direction
Note: Domain Layer should not include anything from other layers(e.g Presentation — UIKit or SwiftUI or Data Layer — Mapping Codable)
Architecture concepts used here
- 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
- Observable
- Dependency Injection
- Flow Coordinator
- Data Transfer Object (DTO)
- Response Data Caching
- ViewController Lifecycle Behavior
- SwiftUI and UIKit Views in code
- Use of UITableViewDiffableDataSource
- Shimmering Loading
- Error handling
- CI Pipeline (Travis CI + Fastlane)
Includes
- Unit Tests for Use Cases(Domain Layer), ViewModels(Presentation Layer), NetworkService(Infrastructure Layer)
- Dark Mode
- SwiftUI example, demostration that presentation layer does not change, only UI (at least Xcode 11 required)
Networking
If you would like to use Networking from this example project as repo I made it availabe here
Requirements
- Xcode Version 11.2.1+ Min iOS version 13 Swift 5.0+
How to use app
Tap on repository cell to expand cell and see its details.