Skip to content

Commit dce8b46

Browse files
authored
Merge pull request #17 from YAPP-Github/docs/#16-README
docs: #16 - README.md 작성
2 parents a79a743 + 917e61f commit dce8b46

1 file changed

Lines changed: 241 additions & 1 deletion

File tree

README.md

Lines changed: 241 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,241 @@
1-
# 27th-App-Team-1-iOS
1+
# NDGL-iOS
2+
3+
<p align="center">
4+
<img src="https://img.shields.io/badge/Swift-5.0-orange.svg" />
5+
<img src="https://img.shields.io/badge/iOS-17.0+-blue.svg" />
6+
<img src="https://img.shields.io/badge/Tuist-4.x-purple.svg" />
7+
<img src="https://img.shields.io/badge/Architecture-RIBs-green.svg" />
8+
</p>
9+
10+
## 📱 프로젝트 소개
11+
12+
NDGL은 여행 콘텐츠를 따라가며 나만의 여행을 계획할 수 있는 iOS 앱입니다.
13+
14+
## 🛠 기술 스택
15+
16+
| 구분 | 기술 |
17+
|:---:|:---|
18+
| **Architecture** | RIBs (Router-Interactor-Builder-Presenter) |
19+
| **UI** | UIKit, SnapKit, Then |
20+
| **Reactive** | RxSwift, RxCocoa |
21+
| **Network** | Moya, Alamofire |
22+
| **Image** | Kingfisher |
23+
| **Animation** | Lottie |
24+
| **Push** | Firebase Cloud Messaging (FCM) |
25+
| **Project** | Tuist |
26+
| **CI/CD** | GitHub Actions, Fastlane |
27+
28+
## 📁 모듈 구조
29+
30+
```
31+
NDGL-iOS
32+
├── Projects
33+
│ ├── App # 앱 타겟
34+
│ ├── Features # Feature 모듈
35+
│ │ ├── RootFeature # 앱 진입점 RIB
36+
│ │ ├── TabBarFeature # 탭바 RIB
37+
│ │ ├── HomeFeature # 홈 화면
38+
│ │ ├── FollowFeature # 따라가기 콘텐츠
39+
│ │ ├── TravelFeature # 다가오는 여행
40+
│ │ └── BaseFeatureDependency
41+
│ ├── Domain # Entity, UseCase, Repository Interface
42+
│ ├── Data # Repository 구현체, DTO
43+
│ ├── Core # 공통 유틸리티
44+
│ └── Modules
45+
│ ├── DSKit # 디자인 시스템 (Color, Font, Component)
46+
│ ├── Networks # 네트워크 레이어
47+
│ └── ThirdPartyLibs # 외부 라이브러리 의존성
48+
├── Plugins
49+
│ └── EnvPlugin # 환경 설정 플러그인
50+
├── Tuist # Tuist 설정
51+
├── fastlane # CI/CD 스크립트
52+
└── Scripts # 빌드 스크립트
53+
```
54+
55+
## 🏗 아키텍처
56+
57+
### RIBs Architecture
58+
59+
```
60+
┌─────────────────────────────────────────────────┐
61+
│ Router │
62+
│ (화면 전환, Child RIB Attach/Detach) │
63+
└─────────────────────────────────────────────────┘
64+
65+
66+
┌─────────────────────────────────────────────────┐
67+
│ Interactor │
68+
│ (비즈니스 로직, 상태 관리) │
69+
└─────────────────────────────────────────────────┘
70+
71+
┌──────────┴──────────┐
72+
▼ ▼
73+
┌──────────────────┐ ┌──────────────────┐
74+
│ Presenter │ │ Builder │
75+
│ (View ↔ 통신) │ │ (DI, RIB 생성) │
76+
└──────────────────┘ └──────────────────┘
77+
78+
79+
┌──────────────────┐
80+
│ ViewController │
81+
│ (UI 렌더링) │
82+
└──────────────────┘
83+
```
84+
85+
### 모듈 의존성
86+
87+
```
88+
┌─────────┐
89+
│ App │
90+
└────┬────┘
91+
92+
┌────────────────────┼────────────────────┐
93+
▼ ▼ ▼
94+
┌──────────┐ ┌──────────┐ ┌───────────┐
95+
│ Data │ │ Networks │ │ Root │
96+
└────┬─────┘ └────┬─────┘ │ Feature │
97+
│ │ └─────┬─────┘
98+
│ ┌────┴────┐ │
99+
│ ▼ ▼ ▼
100+
│ ┌────────┐┌────────┐ ┌───────────┐
101+
│ │ Domain ││ Core │ │ TabBar │
102+
│ └────────┘└────────┘ │ Feature │
103+
│ └─────┬─────┘
104+
│ │
105+
▼ ▼
106+
┌──────────┐ ┌───────────┐
107+
│ Domain │ │ Home │
108+
│ Networks │ │ Feature │
109+
└──────────┘ └─────┬─────┘
110+
111+
112+
┌─────────────────────┐
113+
│ BaseFeatureDependency│
114+
└──────────┬──────────┘
115+
116+
┌───────────────┼───────────────┐
117+
▼ ▼ ▼
118+
┌────────┐ ┌────────┐ ┌───────┐
119+
│ Core │ │ Domain │ │ DSKit │
120+
└────┬───┘ └────┬───┘ └───┬───┘
121+
│ │ │
122+
└──────────────┴──────────────┘
123+
124+
125+
┌────────┐
126+
│ Core │
127+
└────┬───┘
128+
129+
130+
┌───────────────┐
131+
│ ThirdPartyLibs│
132+
└───────────────┘
133+
```
134+
135+
### 주요 의존성 관계
136+
137+
| 모듈 | 의존성 |
138+
|:---:|:---|
139+
| **App** | Data, Networks, RootFeature |
140+
| **RootFeature** | TabBarFeature |
141+
| **TabBarFeature** | HomeFeature |
142+
| **HomeFeature** | BaseFeatureDependency |
143+
| **BaseFeatureDependency** | Core, Domain, DSKit |
144+
| **Data** | Domain, Networks |
145+
| **Networks** | Core, Domain |
146+
| **Domain** | Core |
147+
| **DSKit** | Core |
148+
| **Core** | ThirdPartyLibs (RxSwift, RIBs, SnapKit, Then, Moya, Kingfisher) |
149+
150+
## 🌿 브랜치 전략
151+
152+
| 브랜치 | 설명 |
153+
|:---:|:---|
154+
| `main` | 프로덕션 배포 브랜치 |
155+
| `develop` | 개발 통합 브랜치 |
156+
| `feat/#이슈번호-작업내용` | 기능 개발 브랜치 |
157+
| `fix/#이슈번호-작업내용` | 버그 수정 브랜치 |
158+
| `hotfix/#이슈번호-작업내용` | 긴급 수정 브랜치 (develop에서 분기) |
159+
160+
### PR 규칙
161+
- **2명 이상 승인** 시 머지 가능
162+
- CI 통과 필수
163+
164+
## 🔄 CI/CD
165+
166+
| 환경 | 트리거 | 동작 |
167+
|:---:|:---:|:---|
168+
| **CI** | `develop` PR/Push | 빌드 체크, 린트 검사 |
169+
| **CD** | `main` Push | Fastlane을 통한 TestFlight 배포 |
170+
171+
## 📝 커밋 컨벤션
172+
173+
```
174+
feat: #이슈번호 - 작업 내용
175+
```
176+
177+
| 타입 | 설명 |
178+
|:---:|:---|
179+
| `feat` | 새로운 기능 추가 |
180+
| `fix` | 버그 수정 |
181+
| `docs` | 문서 수정 |
182+
| `style` | 코드 포맷팅 (기능 변경 없음) |
183+
| `refactor` | 코드 리팩토링 |
184+
| `test` | 테스트 코드 추가/수정 |
185+
| `chore` | 빌드, 패키지 매니저 설정 |
186+
| `design` | UI/UX 디자인 변경 |
187+
188+
## 📐 코드 컨벤션
189+
190+
[StyleShare Swift Style Guide](https://github.com/StyleShare/swift-style-guide) 준수
191+
192+
### SwiftLint
193+
프로젝트 루트의 `.swiftlint.yml` 설정 파일 사용
194+
195+
## 🚀 시작하기
196+
197+
### 요구사항
198+
- Xcode 16.0+
199+
- iOS 17.0+
200+
- [mise](https://mise.jdx.dev/) (Tuist, Ruby 버전 관리)
201+
202+
### 설치 및 실행
203+
204+
```bash
205+
# 1. 저장소 클론
206+
git clone https://github.com/YourOrg/NDGL-iOS.git
207+
cd NDGL-iOS
208+
209+
# 2. mise로 도구 설치
210+
mise install
211+
212+
# 3. 의존성 설치
213+
bundle install
214+
tuist install
215+
216+
# 4. 프로젝트 생성
217+
tuist generate
218+
219+
# 5. Xcode에서 NDGL-iOS.xcworkspace 열기
220+
```
221+
222+
## 👥 팀원
223+
224+
<table>
225+
<tr>
226+
<td align="center">
227+
<a href="https://github.com/KimNahun">
228+
<img src="https://github.com/KimNahun.png" width="120" />
229+
<br />
230+
<b>김나훈</b>
231+
</a>
232+
</td>
233+
<td align="center">
234+
<a href="https://github.com/ChoiAnYong">
235+
<img src="https://github.com/ChoiAnYong.png" width="120" />
236+
<br />
237+
<b>최안용</b>
238+
</a>
239+
</td>
240+
</tr>
241+
</table>

0 commit comments

Comments
 (0)