kudoleh/ios-clean-architecture-mvvm

Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoordinator, DTO, Response Caching and one of the views in SwiftUI

View on GitHub ↗Jump to charts ↓

Summary Information

Updated 1 hour ago
Type:Template / ExampleCategory(s):iOS & macOSMobile & Desktop
Added to GitGenius on September 15th, 2026
Created on August 20th, 2019
Open Issues & Pull Requests: 10 (+0)
GitHub issues: Enabled
Number of forks: 732
Total Stargazers: 4,411 (+0)
Total Subscribers: 60 (+0)

Charts & Analytics

Fetching additional details & charts...

Issue Activity (beta)

Open issues: 1
New in 7 days: 0
Closed in 7 days: 0
Avg open age: 650 days
Stale 30+ days: 1
Stale 90+ days: 1

Recent activity

Opened in 7 days: 0
Closed in 7 days: 0
Comments in 7 days: 0
Events in 7 days: 0

Top labels

No label distribution available yet.

Most active issues this week

Sign in to see which issues are moving.

Detailed Description

ios-clean-architecture-mvvm is a template iOS app that demonstrates Clean Architecture and MVVM patterns.

The project addresses the challenge of structuring iOS applications in a maintainable, testable way by separating concerns into three distinct layers: Domain (entities, use cases, and repository interfaces), Data (repository implementations, networking, and persistence), and Presentation (ViewModels and Views). Dependencies flow inward toward the Domain layer, which remains isolated from framework-specific code. The template uses a concrete example of a movie search application that developers can adapt by replacing the Movie entity with their own domain model.

The architecture is suited for developers building medium to large iOS applications who want a scalable foundation with clear separation of concerns. The project demonstrates practical implementations of dependency injection, flow coordinators for navigation, data transfer objects for network mapping, and response caching strategies. It includes both UIKit and SwiftUI view implementations that share the same ViewModel, showing how the presentation layer remains decoupled from UI framework choices. The template includes unit tests covering the Domain, Presentation, and Infrastructure layers, pagination support, and dark mode compatibility. This approach works well for teams prioritizing testability and long-term maintainability over rapid prototyping.

The project shows consistent refinement of its example implementation, with updates addressing error handling patterns across ViewModels and networking layers, lifecycle management for view controllers, and integration of modern UI frameworks. The codebase demonstrates thoughtful architectural decisions through detailed examples rather than abstract patterns, making it a learning resource as much as a template. A companion networking library has been extracted and maintained separately, indicating the maintainers' willingness to modularize reusable components.