[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-6885":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":10,"archived":22,"fork":22,"defaultBranch":23,"hasWiki":24,"hasPages":22,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":36,"readmeContent":37,"aiSummary":38,"trendingCount":16,"starSnapshotCount":16,"syncStatus":17,"lastSyncTime":39,"discoverSource":40},6885,"iOS-Clean-Architecture-MVVM","kudoleh\u002FiOS-Clean-Architecture-MVVM","kudoleh","Template iOS app using Clean Architecture and MVVM. Includes DIContainer, FlowCoordinator, DTO, Response Caching and one of the views in SwiftUI ","https:\u002F\u002Ftech.olx.com\u002Fclean-architecture-and-mvvm-on-ios-c9d167d9f5b3",null,"Swift",4386,729,61,4,0,2,8,27,6,30.59,false,"master",true,[26,27,28,29,30,31,32,33,34,35],"architecture","clean-architecture","ios-swift","mvvm","mvvm-architecture","mvvm-ios","swiftui","viewmodel","viewmodels","xcode","2026-06-12 02:01:31","\n# Template iOS App using Clean Architecture and MVVM\n\niOS Project implemented with Clean Layered Architecture and MVVM. (Can be used as Template project by replacing item name “Movie”). **More information in medium post**: \u003Ca href=\"https:\u002F\u002Ftech.olx.com\u002Fclean-architecture-and-mvvm-on-ios-c9d167d9f5b3\">Medium Post about Clean Architecture + MVVM\u003C\u002Fa>\n\n\n![Alt text](README_FILES\u002FCleanArchitecture+MVVM.png?raw=true \"Clean Architecture Layers\")\n\n## Layers\n* **Domain Layer** = Entities + Use Cases + Repositories Interfaces\n* **Data Repositories Layer** = Repositories Implementations + API (Network) + Persistence DB\n* **Presentation Layer (MVVM)** = ViewModels + Views\n\n### Dependency Direction\n![Alt text](README_FILES\u002FCleanArchitectureDependencies.png?raw=true \"Modules Dependencies\")\n\n**Note:** **Domain Layer** should not include anything from other layers(e.g Presentation — UIKit or SwiftUI or Data Layer — Mapping Codable)\n\n## Architecture concepts used here\n* Clean Architecture https:\u002F\u002Fblog.cleancoder.com\u002Funcle-bob\u002F2012\u002F08\u002F13\u002Fthe-clean-architecture.html\n* Advanced iOS App Architecture https:\u002F\u002Fwww.raywenderlich.com\u002F8477-introducing-advanced-ios-app-architecture\n* [MVVM](ExampleMVVM\u002FPresentation\u002FMoviesScene\u002FMoviesQueriesList) \n* Data Binding using [Observable](ExampleMVVM\u002FPresentation\u002FUtils\u002FObservable.swift) without 3rd party libraries \n* [Dependency Injection](ExampleMVVM\u002FApplication\u002FDIContainer\u002FAppDIContainer.swift)\n* [Flow Coordinator](ExampleMVVM\u002FPresentation\u002FMoviesScene\u002FFlows\u002FMoviesSearchFlowCoordinator.swift)\n* [Data Transfer Object (DTO)](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FiOS-Clean-Architecture-MVVM\u002Fblob\u002Fmaster\u002FExampleMVVM\u002FData\u002FNetwork\u002FDataMapping\u002FMoviesResponseDTO%2BMapping.swift)\n* [Response Data Caching](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FiOS-Clean-Architecture-MVVM\u002Fblob\u002Fmaster\u002FExampleMVVM\u002FData\u002FRepositories\u002FDefaultMoviesRepository.swift)\n* [ViewController Lifecycle Behavior](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FiOS-Clean-Architecture-MVVM\u002Fblob\u002F3c47e8a4b9ae5dfce36f746242d1f40b6829079d\u002FExampleMVVM\u002FPresentation\u002FUtils\u002FExtensions\u002FUIViewController%2BAddBehaviors.swift#L7)\n* [SwiftUI and UIKit view](ExampleMVVM\u002FPresentation\u002FMoviesScene\u002FMoviesQueriesList\u002FView\u002FSwiftUI\u002FMoviesQueryListView.swift) implementations by reusing same [ViewModel](ExampleMVVM\u002FPresentation\u002FMoviesScene\u002FMoviesQueriesList\u002FViewModel\u002FMoviesQueryListViewModel.swift) (at least Xcode 11 required)\n* Error handling examples: in [ViewModel](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FiOS-Clean-Architecture-MVVM\u002Fblob\u002F201de7759e2d5634e3bb4b5ad524c4242c62b306\u002FExampleMVVM\u002FPresentation\u002FMoviesScene\u002FMoviesList\u002FViewModel\u002FMoviesListViewModel.swift#L116), in [Networking](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FiOS-Clean-Architecture-MVVM\u002Fblob\u002F201de7759e2d5634e3bb4b5ad524c4242c62b306\u002FExampleMVVM\u002FInfrastructure\u002FNetwork\u002FNetworkService.swift#L84)\n* CI Pipeline ([Travis CI + Fastlane](.travis.yml))\n \n## Includes\n* Pagination\n* Unit Tests for Use Cases(Domain Layer), ViewModels(Presentation Layer), NetworkService(Infrastructure Layer)\n* Dark Mode\n* Size Classes and UIStackView in Detail view\n* SwiftUI example, demostration that presentation layer does not change, only UI (at least Xcode 11 required)\n\n## Networking\nIf you would like to reuse Networking from this example project as repository I made it availabe [here](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FSENetworking)\n\n## Views in Code vs Storyboard\nThis 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. \nIt also uses UITableViewDiffableDataSource:\n[iOS-Clean-Architecture-MVVM-Views-In-Code](https:\u002F\u002Fgithub.com\u002Fkudoleh\u002FiOS-Clean-Architecture-MVVM-Views-In-Code)\n\n## How to use app\nTo 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.\n\n\nhttps:\u002F\u002Fuser-images.githubusercontent.com\u002F6785311\u002F236615779-153ef846-ae0b-4ce8-908a-57fca7158b9d.mp4\n\n\n## Requirements\n* Xcode Version 11.2.1+  Swift 5.0+\n\n","该项目提供了一个基于Clean Architecture和MVVM模式的iOS应用模板。它集成了依赖注入容器、流程协调器、数据传输对象以及响应缓存等功能，并且展示了如何在同一个视图模型下同时使用SwiftUI和UIKit构建视图。项目采用了清晰的分层架构，包括领域层、数据存储层及展示层（MVVM），确保了良好的模块化与可维护性。此外，还提供了错误处理示例、单元测试支持以及深色模式适配等特性。适用于希望遵循最佳实践来开发高质量iOS应用程序的开发者，特别是那些正在寻找如何将Clean Architecture与MVVM结合使用的实际案例的人士。","2026-06-11 03:09:22","top_language"]