Skip to content

ProudlyOffbeat/ProudlyOffbeat-MVP-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

197 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ“– λ‚˜λ£¨ (LivingStory) β€” HomeKit 연동 λͺ°μž…ν˜• 동화 읽기 μ•±

λ‚˜λ£¨ μ•± λŒ€ν‘œ 이미지

Xcode iOS Swift UIKit SwiftUI

"μ½λŠ” 것을 λ„˜μ–΄, 곡간이 이야기가 λ˜λŠ” κ²½ν—˜" λ°”μ½”λ“œ ν•œ 번으둜 책을 λ“±λ‘ν•˜κ³ , HomeKit μ‘°λͺ…Β·μ‚¬μš΄λ“œκ°€ 동화와 ν•¨κ»˜ μ›€μ§μž…λ‹ˆλ‹€.


🧩 About

**λ‚˜λ£¨(LivingStory)**λŠ” 아이듀이 동화책을 읽으며 μ‹€μ œ κ³΅κ°„μ˜ μ‘°λͺ…κ³Ό μ‚¬μš΄λ“œκ°€ 이야기에 맞좰 λ³€ν•˜λŠ” λͺ°μž…ν˜• 동화 읽기 μ•±μž…λ‹ˆλ‹€.

ISBN λ°”μ½”λ“œλ₯Ό μŠ€μΊ”ν•΄ 책을 λ“±λ‘ν•˜κ³ , HomeKit 연동 슀마트 κΈ°κΈ°κ°€ 동화 μž₯면에 따라 λΉ›κ³Ό μ†Œλ¦¬λ₯Ό μ—°μΆœν•©λ‹ˆλ‹€. 읽기 μ„Έμ…˜μ„ κΈ°λ‘ν•˜κ³  톡계λ₯Ό 확인할 수 μžˆμ–΄ 읽기 μŠ΅κ΄€ ν˜•μ„±κΉŒμ§€ μ§€μ›ν•©λ‹ˆλ‹€.


🏘️ Team

λ‹΄λ‹Ήμž μ—­ν•  λ‹΄λ‹Ή ν™”λ©΄
Demian (λ°λ―Έμ•ˆ) UIKit 기반 ν™”λ©΄ Β· Coordinator Β· λ„€νŠΈμ›Œν¬ μ˜¨λ³΄λ”© Β· ν™ˆ Β· μŠ€μΊλ„ˆ
Ito (이토) SwiftUI 기반 ν™”λ©΄ Β· 데이터 계측 μ±… ν”„λ‘œν•„ Β· μ±… 읽기 Β· 톡계

πŸ“Œ Main Features

πŸ“· λ°”μ½”λ“œ μŠ€μΊ” & ISBN 등둝

  • AVFoundation 기반 ISBN λ°”μ½”λ“œ μŠ€μΊλ„ˆ
  • Kakao Book API둜 λ„μ„œ 정보 μžλ™ 쑰회 (제λͺ© Β· μ €μž Β· ν‘œμ§€)
  • CoreData에 μ±… 영ꡬ μ €μž₯ (BookRepository)

πŸ“š ν™ˆ & μ„œμž¬

  • λ“±λ‘λœ 동화책 μΊλŸ¬μ…€ UI (UICollectionView + Custom FlowLayout)
  • 책별 ν”„λ‘œν•„ 상세 ν™”λ©΄

πŸ“– 읽기 μ„Έμ…˜ & 타이머

  • 동화 읽기 μ‹œμž‘/μ’…λ£Œ 기둝
  • 읽기 μ„Έμ…˜λ³„ μ‹œκ°„ μΈ‘μ • (ReadingSessionRepository)
  • Gemini AI 기반 독후감 λŒ€ν™” 지원

🏑 HomeKit 곡간 μ—°μΆœ

  • HMHomeManager 기반 슀마트 κΈ°κΈ° 검색 Β· 등둝
  • μ‘°λͺ… 색상 Β· 밝기 Β· μ‚¬μš΄λ“œλ₯Ό 동화 μž₯면에 맞좰 μ œμ–΄
  • λ°°κ²½ μŒμ•… μž¬μƒ (AVFoundation AudioPlayerService)

πŸ“Š 읽기 톡계

  • 총 읽기 μ‹œκ°„ Β· 완독 ꢌ수 Β· μΊ˜λ¦°λ” 기반 읽기 기둝
  • StatCardView둜 μ‹œκ°ν™”

πŸ› οΈ Tech Stack

Frameworks

Architecture & Pattern

API & Services

Tools


🧠 Architecture

MVC (ν˜„μž¬) β†’ MVVM (λ¦¬νŒ©ν† λ§ κ³„νš)

Phase 1 (ν˜„μž¬)     Phase 2           Phase 3           Phase 4           Phase 5
─────────────────────────────────────────────────────────────────────────────────
UIKit + MVC    β†’   SwiftUI 톡합   β†’   MVVM + RxSwift  β†’   Combine μ „ν™˜   β†’   iOS 26 μ™„μ„±
Observable<T>      UIHostingVC        Input/Output       @Published        Liquid Glass
BaseVC             Coordinator         ViewModel          SwiftUI 6

Coordinator Pattern

  • AppCoordinatorκ°€ ν™”λ©΄ μ „ν™˜ μ „λ‹΄
  • SceneDelegate β†’ AppCoordinator β†’ 각 ν™”λ©΄ ViewController
  • MainTabBarController둜 νƒ­ 기반 λ„€λΉ„κ²Œμ΄μ…˜

Repository Pattern

  • BookRepositoryProtocol / ReadingSessionRepositoryProtocol β€” ν”„λ‘œν† μ½œ 기반 좔상화
  • BookRepository / ReadingSessionRepository β€” CoreData κ΅¬ν˜„μ²΄
  • BookEntity Β· ReadingSessionEntity Β· ConversationEntity ν™•μž₯

πŸ“¦ Project Structure

LivingStory-iOS/
β”œβ”€β”€ Application/
β”‚   β”œβ”€β”€ AppDelegate.swift
β”‚   β”œβ”€β”€ SceneDelegate.swift
β”‚   β”œβ”€β”€ MainTabBarController.swift
β”‚   └── Coordinator/
β”‚       β”œβ”€β”€ AppCoordinator.swift
β”‚       └── Coordinator.swift              # Coordinator ν”„λ‘œν† μ½œ
β”‚
β”œβ”€β”€ Core/
β”‚   β”œβ”€β”€ Components/                        # μž¬μ‚¬μš© UI
β”‚   β”‚   β”œβ”€β”€ ReadingLogCalendar.swift       # 읽기 μΊ˜λ¦°λ”
β”‚   β”‚   β”œβ”€β”€ ReadingTimeFormatter.swift
β”‚   β”‚   β”œβ”€β”€ StatCardView.swift             # 톡계 μΉ΄λ“œ
β”‚   β”‚   β”œβ”€β”€ CarouselCell.swift / FlowLayout
β”‚   β”‚   β”œβ”€β”€ PrimaryButton.swift
β”‚   β”‚   └── RadialGlowView.swift
β”‚   β”œβ”€β”€ Consts/
β”‚   β”‚   β”œβ”€β”€ FontLiterals.swift
β”‚   β”‚   β”œβ”€β”€ GeminiPrompts.swift            # AI ν”„λ‘¬ν”„νŠΈ
β”‚   β”‚   β”œβ”€β”€ StringLiterals.swift
β”‚   β”‚   └── SymbolLiterals.swift
β”‚   β”œβ”€β”€ Models/
β”‚   β”‚   β”œβ”€β”€ GeminiResponse.swift           # AI 응닡 λͺ¨λΈ
β”‚   β”‚   β”œβ”€β”€ LightingConfig.swift           # μ‘°λͺ… μ„€μ •
β”‚   β”‚   └── MusicCategory.swift            # λ°°κ²½ μŒμ•… λΆ„λ₯˜
β”‚   β”œβ”€β”€ Network/
β”‚   β”‚   β”œβ”€β”€ NetworkService.swift           # URLSession 기반
β”‚   β”‚   β”œβ”€β”€ NetworkError.swift
β”‚   β”‚   β”œβ”€β”€ Config.swift                   # API Key 관리
β”‚   β”‚   └── ISBN/
β”‚   β”‚       β”œβ”€β”€ ISBNLookupService.swift    # Kakao Book API
β”‚   β”‚       └── KakaoBookDTO.swift
β”‚   β”œβ”€β”€ Persistence/
β”‚   β”‚   β”œβ”€β”€ PersistenceController.swift    # CoreData μŠ€νƒ
β”‚   β”‚   β”œβ”€β”€ NaruModel.xcdatamodeld        # 데이터 λͺ¨λΈ
β”‚   β”‚   β”œβ”€β”€ Repositories/
β”‚   β”‚   β”‚   β”œβ”€β”€ BookRepository.swift
β”‚   β”‚   β”‚   └── ReadingSessionRepository.swift
β”‚   β”‚   └── Extensions/
β”‚   β”‚       β”œβ”€β”€ BookEntity+Extensions.swift
β”‚   β”‚       β”œβ”€β”€ ReadingSessionEntity+Extensions.swift
β”‚   β”‚       └── ConversationEntity+Extensions.swift
β”‚   β”œβ”€β”€ Protocols/
β”‚   β”‚   β”œβ”€β”€ BookRepositoryProtocol.swift
β”‚   β”‚   └── ReadingSessionRepositoryProtocol.swift
β”‚   β”œβ”€β”€ Services/
β”‚   β”‚   β”œβ”€β”€ AudioPlayerService.swift       # λ°°κ²½ μŒμ•… μž¬μƒ
β”‚   β”‚   └── GeminiService.swift            # AI λŒ€ν™” μ„œλΉ„μŠ€
β”‚   └── Storage/
β”‚       β”œβ”€β”€ UserData.swift
β”‚       └── UserDefaultsWrapper.swift
β”‚
β”œβ”€β”€ Model/
β”‚   β”œβ”€β”€ BookProfileModel.swift
β”‚   β”œβ”€β”€ ConversationProfile.swift
β”‚   β”œβ”€β”€ DeviceModel.swift                  # HomeKit κΈ°κΈ°
β”‚   β”œβ”€β”€ HomeDeviceType.swift
β”‚   β”œβ”€β”€ HomeModel.swift
β”‚   β”œβ”€β”€ ReadingSessionProfile.swift
β”‚   └── RoomModel.swift
β”‚
β”œβ”€β”€ Presentation/Screens/
β”‚   β”œβ”€β”€ Onboarding/                        # λ°λ―Έμ•ˆ λ‹΄λ‹Ή (UIKit)
β”‚   β”œβ”€β”€ Home/                              # λ°λ―Έμ•ˆ λ‹΄λ‹Ή (UIKit)
β”‚   β”œβ”€β”€ Scanner/                           # λ°λ―Έμ•ˆ λ‹΄λ‹Ή (UIKit)
β”‚   β”œβ”€β”€ Book/                              # μΊλŸ¬μ…€ λ·° (UIKit)
β”‚   β”œβ”€β”€ BookProfile/                       # 이토 λ‹΄λ‹Ή (SwiftUI)
β”‚   β”œβ”€β”€ Reading/                           # 이토 λ‹΄λ‹Ή (SwiftUI)
β”‚   β”œβ”€β”€ Statistics/                        # 이토 λ‹΄λ‹Ή (SwiftUI)
β”‚   β”œβ”€β”€ DeviceDiscovery/                   # HomeKit κΈ°κΈ° 검색
β”‚   └── My/                               # 마이 νŽ˜μ΄μ§€
β”‚
└── Service/

πŸ”— 데이터 흐름

[μ‚¬μš©μž]
   β”‚
   β”‚ ISBN λ°”μ½”λ“œ μŠ€μΊ”
   β–Ό
[Scanner] ──→ [ISBNLookupService] ──→ Kakao Book API
                     β”‚
                     β–Ό
              [BookRepository] ──→ CoreData (BookEntity)
                     β”‚
                     β–Ό
              [Home / Book μΊλŸ¬μ…€]
                     β”‚
                     β”‚ 읽기 μ‹œμž‘
                     β–Ό
              [Reading μ„Έμ…˜] ──→ [ReadingSessionRepository]
                     β”‚
                     β”œβ”€β”€β†’ [HomeKit] μ‘°λͺ…Β·μ‚¬μš΄λ“œ μ—°μΆœ
                     β”œβ”€β”€β†’ [AudioPlayerService] λ°°κ²½ μŒμ•…
                     └──→ [GeminiService] AI 독후감 λŒ€ν™”
                            β”‚
                            β–Ό
                     [Statistics] 읽기 톡계 μ‹œκ°ν™”

🧭 Git Flow

  • main β†’ 톡합 브랜치
  • feat/ Β· fix/ Β· refactor/ Β· chore/ β†’ κΈ°λŠ₯ λ‹¨μœ„ 브랜치
  • PR κ·œμΉ™: feat/#이슈번호/κΈ°λŠ₯λͺ… + μ½”λ“œ 리뷰 ν•„μˆ˜
  • 컀밋 μ»¨λ²€μ…˜: COMMIT_CONVENTION.md

πŸ“˜ Docs

λ¬Έμ„œ μ„€λͺ…
MASTER_PLAN.md λ¦¬νŒ©ν† λ§ λ‘œλ“œλ§΅ (MVC β†’ MVVM β†’ Combine)
FEATURE_SPEC.md 전체 κΈ°λŠ₯ λͺ…μ„Έμ„œ
PROJECT_STRUCTURE.md ν”„λ‘œμ νŠΈ ꡬ쑰 κ°€μ΄λ“œ
IMPLEMENTATION_COOKBOOK.md κ΅¬ν˜„ νŒ¨ν„΄ λ ˆμ‹œν”Ό
GEMINI_API_KEY_SETUP.md Gemini API ν‚€ μ„€μ •
COMMIT_CONVENTION.md 컀밋 μ»¨λ²€μ…˜

Apple Developer Academy @ POSTECH Β· Team 기꺼이 λΉ„μ£Όλ₯˜ (ProudlyOffbeat) Β· 2025–2026

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages