From 19712b54247ed2665e78563fb47f34a60bf36a2a Mon Sep 17 00:00:00 2001 From: Sejin Lee Date: Sat, 13 Jan 2024 21:44:03 +0900 Subject: [PATCH 1/3] =?UTF-8?q?[Docs]=20#282=20-=20=EB=A6=AC=EB=93=9C?= =?UTF-8?q?=EB=AF=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 98 +++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 91 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index dfb81571..8dd7d9e1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,5 @@ ## SOPT ๊ณต์‹ ์•ฑ +`2022.09~Now` ### ๐Ÿ’ซ ์†ํŠธ ํ™œ๋™์„ ๋”์šฑ ์•Œ์ฐจ๊ณ  ์ฆ๊ฒ๊ฒŒ ! @@ -6,7 +7,8 @@ SOPT๋Š” IT์™€ ๋ฒค์ฒ˜ ์ฐฝ์—…์— ๋œป์ด ์žˆ๋Š” ๋Œ€ํ•™์ƒ๋“ค์ด ๋ชจ์ธ ๊ตญ๋‚ด ์ตœ SOPT์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์›๋“ค๋„, SOPT์˜ ์—ด์ •์ด ๋˜๊ณ  ์‹ถ์€ ๋ถ„๋“ค๋„ ๋ชจ๋‘ SOPT์— ๋Œ€ํ•ด์„œ ๋” ์•Œ์•„๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์—์š”. -![ios2 0ver](https://user-images.githubusercontent.com/80062632/235308003-87a6eff2-e8ba-40ab-b17e-5a5de2cca26f.png) +![แ„‹แ…ขแ†ธแ„‰แ…ณแ„แ…ฉแ„‹แ…ฅ แ„‹แ…ตแ„†แ…ตแ„Œแ…ต](https://github.com/sopt-makers/SOPT-iOS/assets/77267404/4051a873-5ca6-4c16-b77d-0fdff1ee25d0) + [์•ฑ์Šคํ† ์–ด์—์„œ ๋‹ค์šด ๋ฐ›๊ธฐ](https://apps.apple.com/kr/app/sopt/id6444594319) @@ -68,19 +70,52 @@ SOPT์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์›๋“ค๋„, SOPT์˜ ์—ด์ •์ด ๋˜๊ณ  ์‹ถ์€ ๋ถ„ ### ๐Ÿ“ฑ App Version | ๋‚ ์งœ | ๋ฒ„์ „ | |:--|:--| -| 23.01.13 | `v1.0.1` | -| 23.04.29 | `v2.1.1` | +| 23.01 | `v1.0.0` | +| 23.01 | `v1.0.1` | +| 23.02 | `v1.0.2` | +| 23.04 | `v2.0.0` | +| 23.04 | `v2.1.0` | +| 23.04 | `v2.1.1` | +| 23.05 | `v2.1.2` | +| 23.05 | `v2.1.3` | +| 23.09 | `v2.2.0` | +| 23.10 | `v2.2.1` | +| 23.12 | `v2.2.2` |
### ๐Ÿ›  ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ -[![swift](https://img.shields.io/badge/swift-5.0-orange)]() [![xcode](https://img.shields.io/badge/Xcode-14.2-blue)]() [![tuist](https://img.shields.io/badge/Tuist-3.12.0-purple)]() [![Moya](https://img.shields.io/badge/Moya-15.0.0-yellow)]() [![Then](https://img.shields.io/badge/Then-2-gray)]() [![Kingfisher](https://img.shields.io/badge/Kingfisher-7.0.0-red)]() [![Snapkit](https://img.shields.io/badge/SnapKit-5.0.0-yellow)]() [![Quick](https://img.shields.io/badge/Quick-5.0.0-green)]() [![Nimble](https://img.shields.io/badge/Nimble-10.0.0-green)]() [![Lottie](https://img.shields.io/badge/Lottie-4.1.3-orange)]() [![Inject](https://img.shields.io/badge/Inject-1.2.3-skyblue)]() [![Sentry](https://img.shields.io/badge/Sentry-362d59?style=flat-square&logo=Sentry&logoColor=white)]() +[![swift](https://img.shields.io/badge/swift-5.0-orange)]() [![xcode](https://img.shields.io/badge/Xcode-15.0-blue)]() [![tuist](https://img.shields.io/badge/Tuist-3.12.0-purple)]() [![Moya](https://img.shields.io/badge/Moya-15.0.0-yellow)]() [![Then](https://img.shields.io/badge/Then-2-gray)]() [![Kingfisher](https://img.shields.io/badge/Kingfisher-7.0.0-red)]() [![Snapkit](https://img.shields.io/badge/SnapKit-5.0.0-yellow)]() [![Quick](https://img.shields.io/badge/Quick-5.0.0-green)]() [![Nimble](https://img.shields.io/badge/Nimble-10.0.0-green)]() [![Lottie](https://img.shields.io/badge/Lottie-4.1.3-orange)]() [![Inject](https://img.shields.io/badge/Inject-1.2.3-skyblue)]() [![Sentry](https://img.shields.io/badge/Sentry-362d59?style=flat-square&logo=Sentry&logoColor=white)]() + +
+ +### โ›ณ๏ธ ๋กœ๋“œ๋งต +- [x] Tuist ๊ธฐ๋ฐ˜ Clean Architecture Project ์„ธํŒ… +- [x] Fastlane, Makefile ์„ธํŒ… +- [x] ๋กœ๊ทธ์ธ ํ”Œ๋กœ์šฐ +- [x] SOPT-AMP +- [x] ๋งˆ์ดํŽ˜์ด์ง€ +- [x] ์•ฑ ๋ฉ”์ธ +- [x] ์ถœ์„ +- [x] ํ‘ธ์‹œ ์•Œ๋ฆผ + - [x] ๋”ฅ๋งํฌ, ์›น๋งํฌ ๋ผ์šฐํŒ… +- [ ] Makers Design System + - [x] Toast + - [ ] Dialog + - [x] Color + - [x] Typography +- [ ] WKWebView๋กœ ์ „ํ™˜ +- [ ] ์ฝ• ์ฐŒ๋ฅด๊ธฐ +- [ ] ์บ˜๋ฆฐ๋” +
### ๐Ÿก Skills #### Clean Architecture + MVVM Pattern +![MVVM](https://github.com/sopt-makers/SOPT-iOS/assets/77267404/1ce3aab2-e2bd-49a5-9d64-f56ce95389f8) + - Presentation, Data, Domain Layer๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ณ„์ธต ๋‚ด์™ธ์˜ ์˜์กด์„ฑ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. - MVVM Pattern์œผ๋กœ UI์™€ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. @@ -88,18 +123,66 @@ SOPT์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์›๋“ค๋„, SOPT์˜ ์—ด์ •์ด ๋˜๊ณ  ์‹ถ์€ ๋ถ„ - ์• ํ”Œ์˜ ๊ธฐ๋ณธ API์ธ Combine์„ ์ด์šฉํ•˜์—ฌ ๋ฐ˜์‘ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. - ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ง๊ด€์ ์ด๊ณ  ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. +#### Factory Pattern๊ณผ Dependency Injection +![DI](https://github.com/sopt-makers/SOPT-iOS/assets/77267404/d7a90edc-ceb2-4d31-8505-f672f28e203b) + +- ๊ฐ Feature์˜ Builder๊ฐ€ Factory์˜ ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ๋ทฐ์™€ ๋ทฐ๋ชจ๋ธ์„ ์ถ”์ƒํ™”ํ•œ Presentable์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. +- ์ด ๊ณผ์ •์—์„œ VC, ViewModel, UseCase, Repository๋ฅผ ์ฃผ์ž…ํ•ฉ๋‹ˆ๋‹ค. + +#### Coordinator +![image](https://github.com/sopt-makers/SOPT-iOS/assets/77208067/87495359-42d5-4f19-bdb9-a3ed299f9fba) + +- ํ™”๋ฉด ์ „ํ™˜์„ Coordinator๊ฐ€ ์ฑ…์ž„์ง‘๋‹ˆ๋‹ค. +- Coordinator๋Š” Router์— ์˜์กดํ•˜๊ณ  Router๋Š” UINavigationController์— ์˜์กดํ•ฉ๋‹ˆ๋‹ค. +- VC์™€ ViewModel ๋ชจ๋‘ Coordinator๋ฅผ ์ฐธ์กฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. +- ๋Œ€์‹  Coordinator๊ฐ€ Factory๋ฅผ ์ฐธ์กฐํ•˜์—ฌ Presentable์„ ์ƒ์„ฑํ•˜๊ณ  ๋Ÿฐํƒ€์ž„์— ํด๋กœ์ € ์ฃผ์ž…์œผ๋กœ ํ™”๋ฉด ์ „ํ™˜ ์‹œ ์•ก์…˜์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. + #### Modular Architecture -![graph](https://user-images.githubusercontent.com/77208067/233848626-d7884f0d-bbf5-4582-8375-65b0b3ca1a20.png) +![graph](https://github.com/sopt-makers/SOPT-iOS/assets/77267404/d7248dfb-3bbe-410c-ba8d-e4265be54e3e) - SOPT-iOS ์•ฑ์€ Makers App ํŒ€๊ณผ Makers ์šด์˜ ์„œ๋น„์Šค ํŒ€์˜ ๊ณต๋™ ์ž‘์—…๋ฌผ์ž…๋‹ˆ๋‹ค. - ๋ชฉ์ ์กฐ์ง์˜ ํ˜•ํƒœ์ด๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ Feature ๊ฐ„์˜ ๋…๋ฆฝ์ ์ธ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด Feature Interface๋ฅผ ๋„์ž…ํ–ˆ์Šต๋‹ˆ๋‹ค. - ๋ชจ๋“ˆ์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์‘์ง‘๋„ ๋†’๊ณ  ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์€ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. +- Demo ํƒ€๊ฒŸ์„ ํ†ตํ•ด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ๊ณผ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์„ ๋ถ„๋ฆฌํ•ฉ๋‹ˆ๋‹ค. #### Tuist - Tuist๋ฅผ ์ด์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ชจ๋“ˆ์„ Mono Repo์—์„œ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“ˆ ๋ฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. #### Testability - ์ „๋ฐ˜์ ์œผ๋กœ Testableํ•œ ์ฝ”๋“œ๋ฅผ ์ง€ํ–ฅํ•ฉ๋‹ˆ๋‹ค. -- ์ด๋Ÿฌํ•œ ์ด์ ์„ ์‚ด๋ ค, ๋ณต์žกํ•œ ๋กœ์ง์˜ ๊ฒฝ์šฐ Unit Test๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ ๋ขฐ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ™•๋ณดํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. +- ์ด๋Ÿฌํ•œ ์ด์ ์„ ์‚ด๋ ค, Unit Test๋ฅผ ์ž‘์„ฑํ•˜๊ณ  ์‹ ๋ขฐ์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ํ™•๋ณดํ•ฉ๋‹ˆ๋‹ค. + +
+ + +--- + +### ๐Ÿš™ Getting Started + +Fastlane๊ณผ Makefile์„ ํ™œ์šฉํ•˜์—ฌ ๋ฒˆ๊ฑฐ๋กœ์šด ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ธํŒ…์„ ์ž๋™ํ™”ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. + +๊ณต๊ฐœํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ํŒŒ์ผ๋“ค๊ณผ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ์ธ์ฆ์„œ๋“ค์€ Private ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์žˆ์œผ๋ฉฐ ์ด ๊ณณ์— ์ดˆ๋Œ€๋ฅผ ๋ฐ›์€ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ช…๋ น์–ด 1์ค„์„ ์ž…๋ ฅํ•˜๋ฉด ์ž๋™์œผ๋กœ ๋ชจ๋“  ํ™˜๊ฒฝ์ด ์„ธํŒ…๋ฉ๋‹ˆ๋‹ค. + +#### ์‚ฌ์ „ ์ค€๋น„ +- Fastlane์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค. ([๊ฐ€์ด๋“œ](https://docs.fastlane.tools/getting-started/ios/setup/)) + +#### ์„ค์น˜ +1. ํ˜„์žฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ Fork ํ•ฉ๋‹ˆ๋‹ค. +2. Forkํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ Clone ํ•ฉ๋‹ˆ๋‹ค. + ```sh + git clone https://github.com/your_username_/Project-Name.git + ``` +3. ํ”„๋กœ์ ํŠธ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ณ  ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค. + ```sh + fastlane start_project + ``` +4. ์ด์ œ ํ„ฐ๋ฏธ๋„์—์„œ ์ž…๋ ฅ์„ ์š”์ฒญํ•˜๋Š” ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋ฉด ๋ชจ๋“  ์„ธํŒ…์ด ์™„๋ฃŒ๋ฉ๋‹ˆ๋‹ค. + +#### ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด? +1. ํ˜„์žฌ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— Issue๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. +2. Fork ํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. +3. ํ•ด๋‹น ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. +4. Push ๋ฐ Pull Request๋ฅผ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค. +5. 1๋ช… ์ด์ƒ ์ฝ”๋“œ ๋ฆฌ๋ทฐ ๋ฐ Approve๋ฅผ ๋ฐ›์€ ๋’ค develop ๋ธŒ๋žœ์น˜์— Merge ํ•ฉ๋‹ˆ๋‹ค.
@@ -108,6 +191,7 @@ SOPT์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์›๋“ค๋„, SOPT์˜ ์—ด์ •์ด ๋˜๊ณ  ์‹ถ์€ ๋ถ„ ### ๐Ÿ Contributors | | | | | | |--|--|--|--|--|--| -| [์œค์ˆ˜๋นˆ](https://github.com/devxsby) `1, 2๊ธฐ` | [์ด์„ธ์ง„](https://github.com/lsj8706) `1, 2๊ธฐ` | [์ด์ค€ํ˜ธ](https://github.com/L-j-h-c) `1, 2๊ธฐ` | [์–‘์ˆ˜๋นˆ](https://github.com/yangsubinn) `1๊ธฐ` | [๊น€์˜์ธ](https://github.com/0inn) `2๊ธฐ` | [์ด์Šนํ˜ธ](https://github.com/elesahich) `2๊ธฐ` | +| [์œค์ˆ˜๋นˆ](https://github.com/devxsby)| [์ด์„ธ์ง„](https://github.com/lsj8706) | [์ด์ค€ํ˜ธ](https://github.com/L-j-h-c)| [์–‘์ˆ˜๋นˆ](https://github.com/yangsubinn)| [๊น€์˜์ธ](https://github.com/0inn)| [์ด์Šนํ˜ธ](https://github.com/elesahich) | +| `1, 2, 3๊ธฐ` | `1, 2, 3๊ธฐ` | `1, 2๊ธฐ` | `1๊ธฐ` | `2,3๊ธฐ` | `2,3๊ธฐ` |
From 184337a4f2f5d5ce4189723d3a71aef0f7c3288a Mon Sep 17 00:00:00 2001 From: Sejin Lee Date: Sat, 13 Jan 2024 21:47:55 +0900 Subject: [PATCH 2/3] =?UTF-8?q?[Docs]=20#282=20-=20=EB=A1=9C=EB=93=9C?= =?UTF-8?q?=EB=A7=B5=20=EB=82=B4=EC=9A=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 8dd7d9e1..5d418de1 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,7 @@ SOPT์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์›๋“ค๋„, SOPT์˜ ์—ด์ •์ด ๋˜๊ณ  ์‹ถ์€ ๋ถ„ - [x] SOPT-AMP - [x] ๋งˆ์ดํŽ˜์ด์ง€ - [x] ์•ฑ ๋ฉ”์ธ +- [x] ์›น ์„œ๋น„์Šค ๋ผ์šฐํŒ… - [x] ์ถœ์„ - [x] ํ‘ธ์‹œ ์•Œ๋ฆผ - [x] ๋”ฅ๋งํฌ, ์›น๋งํฌ ๋ผ์šฐํŒ… From 3b78a01e1dbf7c9e06164c16b63e92810c7b7c26 Mon Sep 17 00:00:00 2001 From: Lee SeJin Date: Sun, 14 Jan 2024 20:49:49 +0900 Subject: [PATCH 3/3] =?UTF-8?q?[Docs]=20#282=20-=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=A0=9D=ED=8A=B8=20=EA=B8=B0=EA=B0=84=20=EB=AC=B8=EA=B5=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5d418de1..86b01824 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ ## SOPT ๊ณต์‹ ์•ฑ -`2022.09~Now` +`2022.09 ~ Now` ### ๐Ÿ’ซ ์†ํŠธ ํ™œ๋™์„ ๋”์šฑ ์•Œ์ฐจ๊ณ  ์ฆ๊ฒ๊ฒŒ ! @@ -96,7 +96,7 @@ SOPT์—์„œ ํ™œ๋™ํ•˜๊ณ  ์žˆ๋Š” ํšŒ์›๋“ค๋„, SOPT์˜ ์—ด์ •์ด ๋˜๊ณ  ์‹ถ์€ ๋ถ„ - [x] SOPT-AMP - [x] ๋งˆ์ดํŽ˜์ด์ง€ - [x] ์•ฑ ๋ฉ”์ธ -- [x] ์›น ์„œ๋น„์Šค ๋ผ์šฐํŒ… +- [x] ์›น ํ”„๋กœ๋•ํŠธ ๋ผ์šฐํŒ… - [x] ์ถœ์„ - [x] ํ‘ธ์‹œ ์•Œ๋ฆผ - [x] ๋”ฅ๋งํฌ, ์›น๋งํฌ ๋ผ์šฐํŒ