Skip to content

YAPP-Github/TnT-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

TnT

# ํŠธ๋ ˆ์ด๋„ˆ์™€ ํŠธ๋ ˆ์ด๋‹ˆ๋ฅผ ์—ฐ๊ฒฐํ•˜๋‹ค

PT ํšจ๊ณผ๊ฐ€ ๋ฏธ๋ฏธํ•˜๊ฑฐ๋‚˜, ๊พธ์ค€ํžˆ PT๋ฅผ ์ง€์†ํ•˜๊ธฐ ์–ด๋ ค์› ๋‚˜์š”? ํŠธ๋ ˆ์ด๋„ˆ์™€ ํŠธ๋ ˆ์ด๋‹ˆ ์‚ฌ์ด์˜ ์ฒด๊ณ„์ ์ธ ์†Œํ†ต๊ณผ ํšจ์œ ์ ์ธ PT ์šด์˜์„ ์ง์ ‘ ๊ฒฝํ—˜ํ•˜์„ธ์š” :)

๐Ÿ’ช๐Ÿป ํŠธ๋ ˆ์ด๋„ˆ๋Š” ์ฒด๊ณ„์ ์ธ ํšŒ์› ๊ด€๋ฆฌ๋ฅผ, ํŠธ๋ ˆ์ด๋‹ˆ๋Š” ํšจ์œจ์ ์ธ ๊ธฐ๋ก์„!
๐Ÿ‹ TnT์™€ ํ•จ๊ป˜ ํŠธ๋ ˆ์ด๋„ˆ์™€ ํŠธ๋ ˆ์ด๋‹ˆ์˜ ์ผ€๋ฏธ๋ฅผ ํ„ฐํŠธ๋ ค๋ณด์„ธ์š”!


Develpoment Environment

Minimum Deployments: iOS 17.0
Xocde Version: 16.0.1
Tuist Version: 4.37.0

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

kakao-ios-sdk
KingFisher
FirebaseMessaging
ComposableArchitecture
FSCalendar

Skill Stack

  • Development: SwiftUI + Tuist + Modular Architecture
  • Modular Architecture : Clean Architecture ๊ธฐ์ค€ ๋ ˆ์ด์–ด๋ณ„ ๋ชจ๋“ˆํ™”
  • Architecture : Clean Architecture + TCA

Architecture (Clean Architecture + TCA)


Layer ๊ตฌํ˜„ ๋‚ด์šฉ

Application Layer

  • AppDelegate, SceneDelegate ์œ„์น˜
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง„์ž…์ ์œผ๋กœ์จ ์‹คํ–‰๊ณผ ๊ด€๋ จ๋œ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•จ

Data Layer

  • ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€์˜ ์ƒํ˜ธ์ž‘์šฉ์„ ๋‹ด๋‹นํ•˜๋Š” ๋ ˆ์ด์–ด
  • Network / Local(KeyChain) ๋กœ ๋‚˜๋ˆ„์–ด ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•จ
  • DTO๋กœ ๋ฐ›์•„์˜ค๋ฉฐ Mapper๋ฅผ ํ†ตํ•ด ์•ฑ ๋‚ด๋ถ€์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์‚ฌ์šฉ
  • Moya์˜ ๋กœ์ง์„ URLSession์— ์ ๋ชฉํ•˜์—ฌ Interceptor์™€ Logger๋ฅผ ๊ตฌํ˜„ํ•จ

Domain Layer

  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๋ ˆ์ด์–ด๋กœ, ์•ฑ์˜ ๋„๋ฉ”์ธ ๊ทœ์น™์„ ์ •์˜ํ•จ
  • Entity: ๋น„์ฆˆ๋‹ˆ์Šค ๋„๋ฉ”์ธ์˜ ํ•ต์‹ฌ ๋ชจ๋ธ์ด๋ฉฐ, UI๋‚˜ ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ ์†Œ์Šค์™€ ๋…๋ฆฝ์ 
  • UseCase: ํŠน์ • ๋น„์ฆˆ๋‹ˆ์Šค ๊ทœ์น™์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋กœ, Repository๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๊ฐ€๊ณตํ•˜์—ฌ Presentation Layer์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•จ
  • Repository Protocol: ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๋ฐฉ์‹(Network, Local Storage ๋“ฑ)์„ ์ถ”์ƒํ™”ํ•˜์—ฌ, Data Layer์˜ ๊ตฌํ˜„๊ณผ ๋ถ„๋ฆฌ๋œ ํ˜•ํƒœ๋กœ ์œ ์ง€์‹œํ‚ด

Presentation Layer

  • UI์™€ ๊ด€๋ จ๋œ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋ ˆ์ด์–ด๋กœ, SwiftUI + TCA ์œผ๋กœ ๊ตฌ์„ฑ๋จ
  • View (SwiftUI): Store์—์„œ ์ œ๊ณตํ•˜๋Š” ์ƒํƒœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ UI๋ฅผ ๋ Œ๋”๋งํ•˜๋ฉฐ, ์œ ์ € ์ธํ„ฐ๋ž™์…˜์„ Action์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Store์— ์ „๋‹ฌํ•จ
  • Feature (Reducer + State + Action): ๊ฐ ํ™”๋ฉด์„ ํ•˜๋‚˜์˜ Feature๋กœ ๊ตฌ์„ฑํ•˜๊ณ , Reducer์—์„œ State์™€ Action์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ UseCase์— ์œ„์ž„ํ•จ
  • Navigation: TCA์˜ Reducer ๊ธฐ๋ฐ˜ ๋„ค๋น„๊ฒŒ์ด์…˜์„ ํ™œ์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „ํ™˜์„ ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋„ค๋น„๊ฒŒ์ด์…˜ ์ƒํƒœ(Path, Stack)๋ฅผ State๋กœ ์œ ์ง€ํ•จ

DIContainer

  • DIContainer๋Š” ์•ฑ ์ „๋ฐ˜์—์„œ ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์˜์กด์„ฑ ์ฃผ์ž…์„ ๊ด€๋ฆฌํ•จ
  • ๊ฐ ๋ ˆ์ด์–ด์˜ ๊ฐ์ฒด๋“ค์ด ์ง์ ‘ ์ธ์Šคํ„ด์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Œ€์‹ , DIContainer๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ์˜์กด์„ฑ์„ ์ฃผ์ž…๋ฐ›๋„๋ก ์„ค๊ณ„ํ•˜์—ฌ ํด๋ฆฐ ์•„ํ‚คํ…์ฒ˜์˜ ์›์น™(์˜์กด์„ฑ ์—ญ์ „ ์›์น™, DIP) ์„ ๋”ฐ๋ฅผ ์ˆ˜ ์žˆ๋„๋กํ•จ
  • Repository, UseCase, Reducer(Store) ๋“ฑ๊ณผ ๊ฐ™์€ ํ•ต์‹ฌ ๊ฐ์ฒด๋“ค์„ DIContainer์—์„œ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, Environment ๋˜๋Š” Resolver๋ฅผ ํ†ตํ•ด ํ•„์š”ํ•œ ๊ฐ์ฒด๋ฅผ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉ

Design System

  • ๋””์ž์ธ๊ณผ ๊ด€๋ จ๋œ ํŒŒ์ผ, ์†Œ์Šค๋“ค์ด ๋ชจ์—ฌ์žˆ๋Š” ๋ชจ๋“ˆ
  • ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง๊ณผ ์—ฐ๊ด€ ์—†์ด ๋””์ž์ธ๋งŒ ์ •์˜๋˜์–ด ์žˆ๋Š” ๋ชจ๋“ˆ

Main Features

  • ๋กœ๊ทธ์ธ
    • ์†Œ์…œ๋กœ๊ทธ์ธ ์ง€์› (์นดํ†ก / ์• ํ”Œ)
  • ํŠธ๋ ˆ์ด๋„ˆ
    • ํ™ˆ
      • ์ˆ˜์—… ์ถ”๊ฐ€ ๋ฐ ์ผ์ • ํ™•์ธ
      • ์ˆ˜์—… ๊ด€๋ฆฌ
    • ํ”ผ๋“œ๋ฐฑ
      • ํŠธ๋ ˆ์ด๋‹ˆ๊ฐ€ ๋ณด๋‚ธ ํ”ผ๋“œ๋ฐฑ์„ ํ™•์ธํ•˜๊ณ  ํ”ผ๋“œ๋ฐฑ ์ „์†ก
    • ํšŒ์› ๋ชฉ๋ก
      • ํšŒ์›์„ ์—ฐ๊ฒฐ ๋ฐ ํ•ด์ œ
      • ํšŒ์› ์ดˆ๋Œ€
    • ๋‚ด์ •๋ณด
      • ๋กœ๊ทธ์•„์›ƒ ๋ฐ ํƒˆํ‡ด
      • ๋‚ด์ •๋ณด ํ™•์ธ
  • ํŠธ๋ ˆ์ด๋‹ˆ
    • ํ™ˆ
      • ์ˆ˜์—… ๊ด€๋ฆฌ ๋ฐ ์šด๋™ ๊ธฐ๋ก
      • ์‹๋‹จ ๊ธฐ๋ก
    • ๋‚ด์ •๋ณด
      • ๋กœ๊ทธ์•„์›ƒ ๋ฐ ํƒˆํ‡ด
      • ๋‚ด์ •๋ณด ํ™•์ธ

App Images

ํŠธ๋ ˆ์ด๋‹ˆ ํ™ˆ ํŠธ๋ ˆ์ด๋„ˆ ํ™ˆ ๋‚ด์ •๋ณด ํŠธ๋ ˆ์ด๋‹ˆ ์‹๋‹จ๊ธฐ๋ก



About

๐Ÿงจ Trainer & Trainee [25th App-2 Team]

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •  

Languages