kudoleh/iOS-Clean-Architecture-MVVM
kudoleh/iOS-Clean-Architecture-MVVM has 4,416 GitHub stars and 729 forks. GitHot measured +2 stars in 24 hours and +4 in 7 days. Last checked 2026-11-09 13:37 UTC. Last push 2026-10-11.
Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoordinator, DTO, Response Caching and one of the views in SwiftUI
Measured star growth
- in 24h
- +2
- in 7 days
- +4
- in 15 days
- Collecting history
- in 1 month
- Collecting history
Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.
README.md
OriginalTemplate iOS App using Clean Architecture and MVVM
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

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
- 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)
Includes
- Pagination
- Unit Tests for Use Cases(Domain Layer), ViewModels(Presentation Layer), NetworkService(Infrastructure Layer)
- Dark Mode
- Size Classes and UIStackView in Detail view
- SwiftUI example, demostration that presentation layer does not change, only UI
- Empty state with a Search button for "no query" and "no results"
- UIScene life cycle (SceneDelegate), required for apps built with the iOS 26+ SDKs
Networking
If you would like to reuse Networking from this example project as repository I made it availabe here
Views in Code vs Storyboard
This repository uses Storyboards (except one view written in SwiftUI). There is another similar repository but instead of using Storyboards, all Views are written in Code. It also uses UITableViewDiffableDataSource: iOS-Clean-Architecture-MVVM-Views-In-Code
How to use app
To search a movie, write a name of a movie inside searchbar and hit enter or the search button. There are two network calls: request movies and request poster images. Every successful search query is stored persistently.
https://user-images.githubusercontent.com/6785311/236615779-153ef846-ae0b-4ce8-908a-57fca7158b9d.mp4
Requirements
- Xcode 14+, Swift 5.7+
- iOS 15.0+
Explore related projects
codecrafters-io/build-your-own-x
Master programming by recreating your favorite technologies from scratch.
561,239 starspublic-apis/public-apis
A collective list of free APIs
497,490 starsmorluto/rea
Reverse engineer anything with agents, from app behavior down to native binaries.
445,685 starsopenclaw/openclaw
The AI that really does things. Any OS. Any Platform. The lobster way. 🦞
394,228 stars