Skip to content

Commit 33aae27

Browse files
authored
[#211] 메인 리드미를 업데이트한다 (#307)
* chore: unit 테스트 제거 * docs: 리드미 1차 업데이트 * docs: 리드미 2차 업데이트 * docs: 리드미 3차 업데이트 * docs: 1.0(11) 빌드 기준 프로젝트 설명 * docs: 1.0(12) 기준 아키텍쳐 업데이트 * docs: Store 프로토콜 추가 * docs: 대표 이미지 추가 * docs: 테플 위치 수정
1 parent e7beeab commit 33aae27

9 files changed

Lines changed: 219 additions & 24 deletions

File tree

README.md

Lines changed: 155 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,155 @@
1-
# SwiftUI_DevLog
2-
3-
손쉽게 사용할 수 있는 개발 일지 및 Todo 관리 앱
4-
5-
## 사용된 패턴
6-
- MVVM
7-
8-
## 최소 iOS 버전
9-
- iOS 16
10-
11-
특징
12-
- 구글, 깃헙, 애플 로그인 및 계정 연동
13-
- FirebaseAuth를 이용해 사용자 인증
14-
- Firestore를 이용해 데이터 저장 및 동기화
15-
- Firebase Cloud Functions를 이용해 각 소셜 로그인 시 각종 토큰 발급 및 저장
16-
- 사용자가 원하는 앱 로고 선택 가능
17-
18-
기술 스택
19-
- Swift
20-
- SwiftUI
21-
- Firebase
22-
- FirebaseAuth
23-
- Firestore
24-
- Firebase Cloud Functions
1+
# DevLog
2+
3+
> 개발 기록과 Todo를 한 곳에서 관리하는 SwiftUI 기반 앱
4+
> 저장한 링크, 작업 메모, 마감 일정, 개인 활동 흐름을 하나의 앱 안에서 정리하는 구조
5+
6+
<table>
7+
<tr>
8+
<td align="center">
9+
<img src="./docs/home.png">
10+
</td>
11+
<td align="center">
12+
<img src="./docs/markdown.png">
13+
</td>
14+
<td align="center">
15+
<img src="./docs/metadata.png">
16+
</td>
17+
<td align="center">
18+
<img src="./docs/notification.png">
19+
</td>
20+
</tr>
21+
<tr>
22+
<td align="center">Home</td>
23+
<td align="center">Markdown</td>
24+
<td align="center">Todo 상세</td>
25+
<td align="center">푸시 알림</td>
26+
</tr>
27+
</table>
28+
29+
## 앱 사용해보기
30+
31+
iOS 17 이상 환경에서 TestFlight 베타 테스트 가능
32+
33+
<a href="https://testflight.apple.com/join/H9hAUU8v">
34+
<img src="https://img.shields.io/badge/TestFlight-0D96F6?style=flat&logo=data:image/svg%2Bxml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAyNCAyNCc%2BPGcgZmlsbD0nI2ZmZicgdHJhbnNmb3JtPSd0cmFuc2xhdGUoMTIgMTIpJz48ZWxsaXBzZSBjeD0nMCcgY3k9Jy02JyByeD0nMy4yJyByeT0nNS40Jy8%2BPGVsbGlwc2UgY3g9JzAnIGN5PSctNicgcng9JzMuMicgcnk9JzUuNCcgdHJhbnNmb3JtPSdyb3RhdGUoMTIwKScvPjxlbGxpcHNlIGN4PScwJyBjeT0nLTYnIHJ4PSczLjInIHJ5PSc1LjQnIHRyYW5zZm9ybT0ncm90YXRlKDI0MCknLz48Y2lyY2xlIHI9JzInLz48L2c%2BPC9zdmc%2B" />
35+
</a>
36+
37+
## 프로젝트 개요
38+
39+
개발 과정에서 해야 할 일, 참고 링크, 진행 기록이 여러 곳에 흩어지기 쉬운 문제 해결 목적
40+
Todo, 저장 링크, 오늘 할 일, 받은 알림, 누적 활동을 하나의 화면 흐름 안에서 함께 관리할 수 있도록 구성한 앱
41+
42+
- Todo 유형별 정리 및 빠른 탐색
43+
- Markdown, 태그, 마감일, 중요 표시를 포함한 Todo 작성
44+
- 웹 페이지 저장 및 재열람
45+
- 오늘 기준 우선 확인 Todo 요약
46+
- 받은 푸시 알림 확인 및 Todo 연계
47+
- 분기별 활동 히트맵 및 주간 추이 차트 제공
48+
- Google, GitHub, Apple 로그인 및 계정 연동
49+
50+
## 주요 기능
51+
52+
### 로그인 및 계정 관리
53+
54+
- Google, GitHub, Apple 로그인 지원
55+
- 설정 화면에서 계정 연동 및 해제 관리
56+
- 앱 내부 로그아웃 및 회원 탈퇴 흐름 제공
57+
- Firebase Authentication 기반 사용자 세션 관리
58+
59+
### Home
60+
61+
- 작업 성격별 Todo 유형 진입점 제공
62+
- Home에서 Todo 유형 노출 여부 및 순서 편집
63+
- 최근 수정 Todo 별도 섹션 제공
64+
- 저장한 웹 페이지 목록 확인 및 즉시 열람
65+
- URL 입력 시 메타데이터 수집 후 제목과 썸네일 저장
66+
67+
### Todo 관리
68+
69+
- 8개 Todo 유형별 목록, 정렬, 완료 상태, 중요 표시 필터 지원
70+
- Todo 목록 내 검색과 페이지네이션 기반 로드
71+
- 스와이프 액션을 통한 중요 표시, 완료 처리, 삭제 지원
72+
- Markdown, 태그, 마감일, 중요 표시 기반 Todo 작성 및 수정
73+
- 상세 화면에서 생성일, 완료일, 마감일, 태그 확인
74+
75+
### Today
76+
77+
- 남은 일, 집중 Todo, 지연 Todo, 7일 내 마감 Todo 요약 카드 제공
78+
- 집중할 일, 지난 마감, 나중 일정, 일정 미정 등 기한 기준 섹션 분류
79+
- 보기 범위와 중요 표시 조건 기반 빠른 필터링
80+
- 항목별 스와이프 액션을 통한 중요 표시 및 완료 처리
81+
82+
### 알림
83+
84+
- 받은 푸시 알림 목록 확인
85+
- 정렬, 기간, 읽지 않음 기준 필터링
86+
- 알림 선택 시 연결된 Todo 상세 확인 및 읽음 처리
87+
- 페이지네이션 및 실시간 동기화 기반 알림 목록 갱신
88+
- 사용자 설정 시각 기준으로 다음 날 마감 Todo 리마인드 푸시 발송
89+
90+
### 검색
91+
92+
- Home 화면 검색 버튼을 통한 통합 검색 진입
93+
- Todo와 저장한 웹 페이지 통합 검색
94+
- 디바운스 기반 검색 처리
95+
- 최근 검색어 저장, 개별 삭제, 전체 삭제 지원
96+
97+
### 프로필 및 설정
98+
99+
- 상태 메시지 직접 수정
100+
- 분기 이동 및 직접 선택, 생성/완료 활동 필터 기반 히트맵과 주간 추이 차트 제공
101+
- 테마 변경, 푸시 알림 시간 설정, 캐시 정리 기능 제공
102+
- 설정 화면에서 앱 버전, 개인정보 처리방침, 베타 테스트 링크 확인
103+
104+
---
105+
106+
## 기술 스택
107+
108+
| 구분 | 스택 |
109+
| --- | --- |
110+
| Deployment Target | iOS 17+ |
111+
| Architecture | MVVM, MVI-inspired state flow, Clean Architecture, Repository Pattern, DI Container |
112+
| UI | SwiftUI, Charts, MarkdownUI |
113+
| State & Async | Observable, Combine, async/await |
114+
| Backend | FirebaseAuth, FirebaseFirestore, Firebase Cloud Functions, FirebaseMessaging |
115+
| Apple Frameworks | AuthenticationServices, UserNotifications, LinkPresentation, Network |
116+
| Utility | GoogleSignIn, OrderedCollections |
117+
| Tooling | Xcode, Swift Package Manager, SwiftLint, Fastlane |
118+
119+
## 아키텍처
120+
121+
MVVM을 기반으로 하되, ViewModel 상태 관리에는 MVI 형태의 단방향 흐름을 차용한 구조
122+
화면, 상태, 비즈니스 로직, 외부 의존성 분리를 위한 `MVVM + Clean Architecture` 기반 구성
123+
124+
<table>
125+
<tr>
126+
<td align="center" width="50%">
127+
<img alt="architecture" src="./docs/architecture.png" />
128+
</td>
129+
<td align="center" width="50%">
130+
<img alt="Store" src="./docs/store-protocol.png" />
131+
</td>
132+
</tr>
133+
<tr>
134+
<td align="center">앱 계층</td>
135+
<td align="center">Store 프로토콜</td>
136+
</tr>
137+
</table>
138+
139+
## 프로젝트 구조
140+
141+
```text
142+
SwiftUI_DevLog/
143+
├── DevLog/
144+
│ ├── App/ # 앱 진입점, DI, Assembler, Root 구성
145+
│ ├── Data/ # DTO, Mapper, Repository 구현
146+
│ ├── Domain/ # Entity, Protocol, UseCase
147+
│ ├── Infra/ # Firebase 및 시스템 서비스
148+
│ ├── Presentation/ # ViewModel, 화면용 구조체와 프로토콜
149+
│ ├── Storage/ # 로컬 저장소 및 사용자 설정 영속성 처리
150+
│ ├── UI/ # SwiftUI 화면
151+
│ └── Resource/ # plist, asset, 이미지 리소스
152+
├── Firebase/
153+
│ └── functions/ # 인증 보조, 푸시 발송, 정리 작업용 Cloud Functions
154+
└── README.md
155+
```

docs/architecture.d2

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
direction: down
2+
3+
style: {
4+
fill: transparent
5+
}
6+
7+
app: "App\nDevLog/App"
8+
ui: "UI\nDevLog/UI"
9+
presentation: "Presentation\nDevLog/Presentation"
10+
domain: "Domain\nDevLog/Domain"
11+
data: "Data\nDevLog/Data"
12+
infra: "Infra\nDevLog/Infra"
13+
storage: "Storage\nDevLog/Storage"
14+
external: "External\nFirebase / Google / GitHub / Apple / Web"
15+
16+
app -> ui: "DI provision, ViewModel composition"
17+
ui -> app: "DI container resolve"
18+
19+
ui -> presentation: "ViewModel ownership"
20+
presentation -> ui: "state, action flow"
21+
22+
presentation -> domain: "UseCase execution, Observe publisher"
23+
domain -> data: "Repository protocol"
24+
data -> infra: "Service call"
25+
data -> storage: "Store call"
26+
27+
infra -> external: "Firebase SDK, social login, metadata fetch"
28+
29+
app -> domain: "exception, Handler -> UserDataRepository"
30+
presentation -> infra: "exception, NWPathConnectivityProvider"

docs/architecture.png

331 KB
Loading

docs/home.png

365 KB
Loading

docs/markdown.png

421 KB
Loading

docs/metadata.png

251 KB
Loading

docs/notification.png

270 KB
Loading

docs/store-protocol.d2

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
direction: down
2+
3+
style: {
4+
fill: transparent
5+
}
6+
7+
view: "View"
8+
9+
store: {
10+
label: "Store Protocol"
11+
direction: down
12+
style: {
13+
fill: transparent
14+
}
15+
16+
action: "Action"
17+
send: "send(action)"
18+
reduce: "reduce(with: action)\n-> [SideEffect]"
19+
side_effect: "SideEffect"
20+
run: "run(effect)"
21+
state: "State"
22+
}
23+
24+
effect_result: "Effect result\nTask / network / timer / callback"
25+
26+
view -> store.action: "user event"
27+
store.action -> store.send: "input"
28+
store.send -> store.reduce: "dispatch"
29+
store.reduce -> store.state: "update state"
30+
store.reduce -> store.side_effect: "return effects"
31+
store.side_effect -> store.run: "iterate"
32+
store.run -> effect_result: "perform side effect"
33+
effect_result -> store.action: "emit next action"
34+
store.state -> view: "render"

docs/store-protocol.png

85.1 KB
Loading

0 commit comments

Comments
 (0)