|
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 | +``` |
0 commit comments