Skip to content

Commit

Permalink
Merge pull request #351 from lsj8706/docs/#282-리드미-수정
Browse files Browse the repository at this point in the history
[Docs] #282 - 리드미 수정
  • Loading branch information
lsj8706 authored Jan 14, 2024
2 parents cd7d0b4 + 3b78a01 commit ff1e627
Showing 1 changed file with 92 additions and 7 deletions.
99 changes: 92 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
## SOPT 공식 앱
`2022.09 ~ Now`

### 💫 솝트 활동을 더욱 알차고 즐겁게 !

SOPT는 IT와 벤처 창업에 뜻이 있는 대학생들이 모인 국내 최대 규모의 대학생 연합 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)

Expand Down Expand Up @@ -68,38 +70,120 @@ 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` |

<br>

### 🛠 개발 환경 및 라이브러리
[![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)]()

<br>

### ⛳️ 로드맵
- [x] Tuist 기반 Clean Architecture Project 세팅
- [x] Fastlane, Makefile 세팅
- [x] 로그인 플로우
- [x] SOPT-AMP
- [x] 마이페이지
- [x] 앱 메인
- [x] 웹 프로덕트 라우팅
- [x] 출석
- [x] 푸시 알림
- [x] 딥링크, 웹링크 라우팅
- [ ] Makers Design System
- [x] Toast
- [ ] Dialog
- [x] Color
- [x] Typography
- [ ] WKWebView로 전환
- [ ] 콕 찌르기
- [ ] 캘린더


<br>

### 🏡 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와 비즈니스 로직을 분리합니다.

#### Combine Reactive Programming
- 애플의 기본 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를 작성하고 신뢰성 및 유지보수성을 확보합니다.

<br>


---

### 🚙 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 합니다.

<br>

Expand All @@ -108,6 +192,7 @@ SOPT에서 활동하고 있는 회원들도, SOPT의 열정이 되고 싶은 분
### 🍏 Contributors
| <img src="https://user-images.githubusercontent.com/81167570/213436276-c1887933-0c9d-4540-b0e2-7bb7f8f110da.jpeg" width=120/> | <img src="https://user-images.githubusercontent.com/81167570/213436338-6778dd31-a614-464b-a730-8f3cec93ec8e.jpeg" width=120 /> | <img src="https://user-images.githubusercontent.com/81167570/213436397-ab386305-6171-4c3e-acd1-afd78c9456de.jpeg" width=120/> | <img src="https://user-images.githubusercontent.com/81167570/213436015-e9bcce7d-45f2-49d8-a9cd-d1a31f511eba.jpeg" width=120 /> | <img src="https://user-images.githubusercontent.com/77208067/233848222-85097d90-c2e2-4c10-94ee-71910d6e0cbd.jpeg" width=120 /> | <img src="https://user-images.githubusercontent.com/77208067/233848225-2aaad9eb-84ef-47bc-b164-eceb78cf85b0.jpeg" width=120 />
|--|--|--|--|--|--|
| [윤수빈](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기` |

<br>

0 comments on commit ff1e627

Please sign in to comment.