{"id":791,"url":"https://github.com/tailec/ios-architecture","last_synced_at":"2025-07-30T19:32:10.430Z","repository":{"id":38355370,"uuid":"167632213","full_name":"tailec/ios-architecture","owner":"tailec","description":"A collection of iOS architectures - MVC, MVVM, MVVM+RxSwift, VIPER, RIBs and many others","archived":false,"fork":false,"pushed_at":"2022-05-16T12:52:58.000Z","size":1259,"stargazers_count":1488,"open_issues_count":4,"forks_count":185,"subscribers_count":37,"default_branch":"master","last_synced_at":"2024-08-14T13:17:24.227Z","etag":null,"topics":["architecture","ios","ios-architectures","mvc","mvvm","redux","rib","rxswift","swift","viper"],"latest_commit_sha":null,"homepage":"","language":"Swift","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tailec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-01-26T00:28:25.000Z","updated_at":"2024-08-12T19:40:43.000Z","dependencies_parsed_at":"2022-07-12T02:17:24.091Z","dependency_job_id":null,"html_url":"https://github.com/tailec/ios-architecture","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailec%2Fios-architecture","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailec%2Fios-architecture/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailec%2Fios-architecture/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tailec%2Fios-architecture/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tailec","download_url":"https://codeload.github.com/tailec/ios-architecture/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":228178883,"owners_count":17881104,"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":["architecture","ios","ios-architectures","mvc","mvvm","redux","rib","rxswift","swift","viper"],"created_at":"2024-01-05T20:15:31.394Z","updated_at":"2024-12-04T19:31:55.217Z","avatar_url":"https://github.com/tailec.png","language":"Swift","funding_links":[],"categories":["Architecture Patterns","Swift","Uncategorized","개발문화"],"sub_categories":["Uncategorized","Getting Started","iOS 아키텍처 레포지터리"],"readme":"\u003ch1 align=\"center\"\u003eios-architecture\u003c/h1\u003e\n\n\u003ch3 align=\"center\"\u003eWIP\u003c/h3\u003e\n\n\u003cdiv align=\"center\"\u003e\n👷 🧱 🧰 🛠️\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n\u003cstrong\u003eDemystifying MVC, MVVM, VIPER, RIBs and many others\u003c/strong\u003e\n\u003c/div\u003e\n\u003cdiv align=\"center\"\u003e\n A collection of simple one screen apps to showcase and discuss different architectural approaches in iOS\n\u003c/div\u003e\n\n\u003cbr /\u003e\n\n\u003cdiv align=\"center\"\u003e\n\u003c!-- Last commit --\u003e\n\u003cimg src=\"https://img.shields.io/github/last-commit/tailec/ios-architecture.svg\" alt=\"last commit\"/\u003e\n\u003c!-- Open issues --\u003e\n\u003cimg src=\"https://img.shields.io/github/issues-raw/tailec/ios-architecture.svg\" alt=\"open issues\" /\u003e\n\u003c!-- Swift version --\u003e\n\u003cimg src=\"https://img.shields.io/badge/swift%20version-4.2-brightgreen.svg\" alt=\"swift version\"\u003e\n\u003c!-- Platform --\u003e\n\u003cimg src=\"https://img.shields.io/badge/platform-ios-lightgrey.svg\" alt=\"platform\" /\u003e\n\u003c!-- License --\u003e\n\u003cimg src=\"https://img.shields.io/badge/licence%20-MIT%20-blue.svg\" alt=\"license\" /\u003e\n\u003c/div\u003e\n\n\n\u003cdiv align=\"center\"\u003e\n\u003csub\u003eBuilt with ❤︎ by\nPawel Krawiec\n\u003c/sub\u003e\n\u003c/div\u003e\n\u003cbr /\u003e\n\u003cbr /\u003e\n\n\n## Apps\n\n\n\u003cdiv align=\"center\"\u003e\n\n\n| Multi-screen examples | Single screen examples |\n| ------------- | ------------- |\n| ![app-ui](multiscreen-ui.gif) | ![app-ui](app-ui.gif)|\n\n\n\u003c/div\u003e\n\n\n## Architectures\nThis repository hosts each sample app in separate directory.\n\n:star: Click the title of example to see detailed README information about specific architecture.\n\n### Multiple screens app examples\n🔒 ** If you want to login, use username `iostest` and password `test`.**\n\n*If you're a [themoviedb](themoviedb.com) user, please use your own account and API key!*\n\n| Example | Description |\n| ------------- | ------------- |\n| [tmdb-mvvm-rxswift-pure](tmdb-mvvm-rxswift-pure) | Uses [RxSwift](https://github.com/ReactiveX/RxSwift) and observables as binding mechanism between `ViewController` and `ViewModel`. Also, it uses simple navigator pattern for transitions between screens. (README in progress) |\n\n\n### Single screen app examples\nThe purpose of having examples with single page applications is highlighting connection between view code and business logic code.\n\n| Example | Description |\n| ------------- | ------------- |\n| [mvc](mvc) | Standard MVC pattern recommended by Apple. Uses composition design pattern to make `ViewController`  smaller.  (README in progress)  |\n| [mvp](mvp) | Standard MVP pattern.  (README in progress)    |\n| [mvvm-rxswift-pure](mvvm-rxswift-pure) | Uses [RxSwift](https://github.com/ReactiveX/RxSwift) and observables as binding mechanism between `ViewController` and `ViewModel`. |\n| [mvvm-rxswift-functions-subjects-observables](mvvm-functions-subjects-observables) | Uses [RxSwift](https://github.com/ReactiveX/RxSwift) and observables as outputs from `ViewModel`. `ViewModel` inputs are defined as subjects wrapped in functions. |\n| [mvvm-rxswift-subjects-observables](mvvm-rxswift-subjects-observables) | Uses [RxSwift](https://github.com/ReactiveX/RxSwift) with observables as `ViewModel` outputs and subjects as `ViewModel` inputs. |\n| [mvvm-closures](mvvm-closures) | Binds `ViewController` and `ViewModel` using closures and swift functions (README in progress)  |\n| [rxfeedback-mvc](rxfeedback-mvc) | Uses RxFeedback in MVC architecture  (README in progress)    |\n| [viper](viper) | Uses VIPER architecture (README in progress) |\n\n\n### Examples in progress\n| Example | Description |\n| ------------- | ------------- |\n| reactorkit | In Progress |\n| mvvm+rxfeedback | In Progress |\n| mvvm-reactive-swift | In Progress  |\n| reswift | In Progress  |\n| viper-rxswift | In Progress  |\n| ribs | In Progress  |\n\n\n## Sample apps\nApps in this repository are split into 2 groups - single screen and multiscreen.\n\n\nSimple one screen apps aim to be simple enough that you can understand crucial bits about given architecture (i.e. bindings between `ViewModel` and `ViewController` in MVVM examples).\nHowever, some other architectures require more complexity (i.e. RIBs architecture) and this is the reason of having multiscreen examples in this project.\n\n#### Single screen app\nSingle screen app is a simple list of repositories fetched from GitHub and a text field that makes queries for new data.\n\n#### Multiscreen app\nMultiscreen app is a simple [themoviedb](themoviedb.com) client.\nIt lets user to authenticate, view popular movies/tv shows or actors and see details about each movie. Also, it has a search screen that allows you to browse movies or actors.\n\n## Open in Xcode\nClone the repository:\n\n`git clone git@github.com:tailec/ios-architecture.git`\n\nGo to example directory, for example:\n\n`cd mvvm-pure-swift`\n\nInstall pods:\n\n`pod install`\n\n\n**Note:** Some of the examples don't use external libraries so `pod install` is not required.\n\n## Licence\nMIT.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailec%2Fios-architecture","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftailec%2Fios-architecture","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftailec%2Fios-architecture/lists"}