{"id":25065555,"url":"https://github.com/rlarjsdn3/ios-clean-architecture-mvvm","last_synced_at":"2025-03-31T13:27:36.852Z","repository":{"id":263354664,"uuid":"882914683","full_name":"rlarjsdn3/iOS-Clean-Architecture-MVVM","owner":"rlarjsdn3","description":"⚪️iOS 클린 아키텍처-MVVM 예제 클론 프로젝트","archived":false,"fork":false,"pushed_at":"2025-01-20T10:51:03.000Z","size":1686,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-02-06T19:48:51.116Z","etag":null,"topics":["clean-architecture","clone-coding","mvvm"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rlarjsdn3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-11-04T03:14:01.000Z","updated_at":"2025-01-20T10:51:04.000Z","dependencies_parsed_at":"2025-01-15T03:25:57.858Z","dependency_job_id":"a5b44ad2-f4c3-4947-ba54-0063041e92ce","html_url":"https://github.com/rlarjsdn3/iOS-Clean-Architecture-MVVM","commit_stats":null,"previous_names":["rlarjsdn3/ios-clean-architecture-mvvm"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlarjsdn3%2FiOS-Clean-Architecture-MVVM","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlarjsdn3%2FiOS-Clean-Architecture-MVVM/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlarjsdn3%2FiOS-Clean-Architecture-MVVM/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rlarjsdn3%2FiOS-Clean-Architecture-MVVM/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rlarjsdn3","download_url":"https://codeload.github.com/rlarjsdn3/iOS-Clean-Architecture-MVVM/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246473278,"owners_count":20783238,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["clean-architecture","clone-coding","mvvm"],"created_at":"2025-02-06T19:44:14.701Z","updated_at":"2025-03-31T13:27:36.830Z","avatar_url":"https://github.com/rlarjsdn3.png","language":"Swift","funding_links":[],"categories":[],"sub_categories":[],"readme":"## iOS 클린 아키텍처-MVVM 예제 클론 프로젝트\n\n클린 아키텍처와 MVVM으로 구현한 iOS 예제 클론 프로젝트입니다. **더 자세한 정보는 [여기](https://tech.olx.com/clean-architecture-and-mvvm-on-ios-c9d167d9f5b3)를 참조해주세요.** 원본 리포지토리는 [여기](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM?tab=readme-ov-file)를 참조해주세요. \n\n![CleanArchitecture+MVVM](https://github.com/user-attachments/assets/e6706a2b-23b8-402c-bcbe-885aebcf8bc6)\n\n## 레이어\n\n* **도메인 레이어** = 엔터티 + 유스케이스 + 리포지토리 인터페이스\n* **데이터 레이어** = 리포지토리 구현 + API(네트워크) + 데이터베이스\n* **프레젠테이션 레이어(MVVM)** = 뷰-모델 + 뷰\n\n### 의존성 주입\n\n![CleanArchitectureDependencies](https://github.com/user-attachments/assets/30a55844-eead-4f49-86bd-d2483a378603)\n\n**Note:** **도메인 레이어**는 다른 레이어에도 의존하면 안됩니다(예: UIKit이나 SwiftUI, 리포지토리 구현). **프레젠테이션 레이어**와 **데이터 레이어**만 **도메인 레이어**에 의존해야 합니다.\n\n## 아키텍처 개념\n\n* [Clean Architecture](https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html)\n* [Advanced iOS App Architecture](https://www.raywenderlich.com/8477-introducing-advanced-ios-app-architecture)\n* [MVVM](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Presentation/MoviesScene/MoviesQueriesList)\n* Data Binding using [Observable](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Presentation/Utils/Observable.swift) without 3rd party libraries\n* [Dependency Injection](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Application/DIContainer/AppDIContainer.swift)\n* [Flow Coordinator](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Presentation/MoviesScene/Flows/MoviesSearchFlowCoordinator.swift)\n* [Data Transfer Object (DTO)](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Data/Network/DataMapping/MoviesResponseDTO%2BMapping.swift)\n* [Response Data Caching](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Data/Repositories/DefaultMoviesRepository.swift)\n* [ViewController Lifecycle Behavior](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/3c47e8a4b9ae5dfce36f746242d1f40b6829079d/ExampleMVVM/Presentation/Utils/Extensions/UIViewController%2BAddBehaviors.swift#L7)\n* [SwiftUI and UIKit view](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Presentation/MoviesScene/MoviesQueriesList/View/SwiftUI/MoviesQueryListView.swift) implementations by reusing same [ViewModel](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/master/ExampleMVVM/Presentation/MoviesScene/MoviesQueriesList/ViewModel/MoviesQueryListViewModel.swift) (at least Xcode 11 required)\n* Error handling examples: in [ViewModel](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/201de7759e2d5634e3bb4b5ad524c4242c62b306/ExampleMVVM/Presentation/MoviesScene/MoviesList/ViewModel/MoviesListViewModel.swift#L116), in [Networking](https://github.com/kudoleh/iOS-Clean-Architecture-MVVM/blob/201de7759e2d5634e3bb4b5ad524c4242c62b306/ExampleMVVM/Infrastructure/Network/NetworkService.swift#L84)\n\n## 요구 사항\n\n* Xcode Version 11.2.1+ Swift 5.0+\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlarjsdn3%2Fios-clean-architecture-mvvm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frlarjsdn3%2Fios-clean-architecture-mvvm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frlarjsdn3%2Fios-clean-architecture-mvvm/lists"}