Skip to content

Latest commit

ย 

History

122 Commits

Folders and files

NameName
Last commit message
Last commit date
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐ŸŽง ์˜ค๋Š˜์˜ ์†Œ๋ฆฌ ยท iOS

์‹œ๊ฐ์žฅ์• ์ธ์„ ์œ„ํ•œ ๋งž์ถคํ˜• ์ •๋ณด ๊ตฌ๋… ์•Œ๋ฆผ ์„œ๋น„์Šค์˜ iOS ์•ฑ์ž…๋‹ˆ๋‹ค. ๊ตฌ๋…ํ•œ ์›นํŽ˜์ด์ง€์˜ ์ƒˆ ๊ธ€ ์š”์•ฝ์„ ๋ฐ›์•„ ์Œ์„ฑ์œผ๋กœ ๋“ค๋ ค์ค๋‹ˆ๋‹ค.

App Store ์ „์ฒด ๋ฌธ์„œ

Swift SwiftUI SwiftLint SwiftFormat


๐Ÿ“‚ ๋””๋ ‰ํ„ฐ๋ฆฌ ๊ตฌ์กฐ

today-s-sound/
โ”œโ”€ .github/
โ”‚  โ””โ”€ workflows/ci.yml
โ”œโ”€ today-s-sound.xcodeproj/      # Xcode ํ”„๋กœ์ ํŠธ
โ”œโ”€ today-s-sound/                # ์•ฑ ์†Œ์Šค ๋ฃจํŠธ
โ”‚  โ”œโ”€ App/
โ”‚  โ”‚  โ””โ”€ TodaySSoundApp.swift    # ์•ฑ ์ง„์ž…์ 
โ”‚  โ”œโ”€ Core/                      # ์•ฑ ์ „์—ญ ์ธํ”„๋ผ ๊ณ„์ธต
โ”‚  โ”‚  โ”œโ”€ Network/                # APITargetType, Provider, Service, Targets
โ”‚  โ”‚  โ”œโ”€ Auth/                   # UserSession, UserCredentialsProvider
โ”‚  โ”‚  โ”œโ”€ Security/               # Keychain
โ”‚  โ”‚  โ”œโ”€ AppState/               # SessionStore, AppThemeManager(๊ณ ๋Œ€๋น„)
โ”‚  โ”‚  โ”œโ”€ Pagination/
โ”‚  โ”‚  โ””โ”€ Error/
โ”‚  โ”œโ”€ Data/
โ”‚  โ”‚  โ””โ”€ Models/                 # User, Subscription, Feed, Alarm, Keyword โ€ฆ
โ”‚  โ”œโ”€ Presentation/
โ”‚  โ”‚  โ”œโ”€ Base/Component/         # ๊ณตํ†ต ์ปดํฌ๋„ŒํŠธ
โ”‚  โ”‚  โ””โ”€ Features/               # Main, Feed, NotificationList,
โ”‚  โ”‚                             # SubscriptionList, AddSubscription,
โ”‚  โ”‚                             # OnBoarding, Settings
โ”‚  โ”œโ”€ Services/
โ”‚  โ”‚  โ””โ”€ SpeechService.swift     # ์Œ์„ฑ(TTS) ์žฌ์ƒ
โ”‚  โ”œโ”€ Resources/
โ”‚  โ”‚  โ”œโ”€ Fonts.swift / Colors.swift
โ”‚  โ”‚  โ””โ”€ KoddiUDOnGothic-*.otf
โ”‚  โ”œโ”€ Assets.xcassets/
โ”‚  โ””โ”€ Info.plist
โ”œโ”€ .gitignore
โ”œโ”€ .swiftformat
โ”œโ”€ .swiftlint.yml
โ”œโ”€ Makefile
โ””โ”€ README.md

ํ™”๋ฉด(Presentation/Features)์€ View / ViewModel / Model๋กœ ๋‚˜๋ˆ„๊ณ , ๋„คํŠธ์›Œํฌยท์ธ์ฆยท์ €์žฅ ๊ฐ™์€ ๊ณตํ†ต ๊ด€์‹ฌ์‚ฌ๋Š” Core์— ๋‘ก๋‹ˆ๋‹ค.


โ™ฟ๏ธ ์ ‘๊ทผ์„ฑ ๊ตฌํ˜„

์ด ์•ฑ์˜ ์ฃผ ์‚ฌ์šฉ์ž๋Š” ์Šคํฌ๋ฆฐ๋ฆฌ๋” ์‚ฌ์šฉ์ž์ž…๋‹ˆ๋‹ค. ํ™”๋ฉด์„ ๋งŒ๋“ค ๋•Œ ๋‹ค์Œ์„ ๊ธฐ๋ณธ์œผ๋กœ ์ง€ํ‚ต๋‹ˆ๋‹ค.

  • VoiceOver ๋Œ€์‘ โ€” ๋ชจ๋“  ์ธํ„ฐ๋ž™์…˜ ์š”์†Œ์— accessibilityLabel(71๊ณณ)๊ณผ accessibilityHint(42๊ณณ)๋ฅผ ๋ถ€์—ฌํ•˜๊ณ , ์žฅ์‹์šฉ ์š”์†Œ๋Š” accessibilityHidden์œผ๋กœ ๊ฐ์ถฅ๋‹ˆ๋‹ค. ์นด๋“œ์ฒ˜๋Ÿผ ๋ฌถ์–ด ์ฝ์–ด์•ผ ํ•˜๋Š” ์˜์—ญ์€ accessibilityElement(children:)๋กœ ํ•˜๋‚˜์˜ ์š”์†Œ๋กœ ํ•ฉ์นฉ๋‹ˆ๋‹ค.
  • ์Œ์„ฑ ์žฌ์ƒ โ€” Services/SpeechService.swift์—์„œ ์š”์•ฝ๋ฌธ์„ TTS๋กœ ์ฝ์–ด ์ค๋‹ˆ๋‹ค. ํ™ˆ์˜ ํฐ ์žฌ์ƒ ๋ฒ„ํŠผ ํ•˜๋‚˜๋กœ ์˜ค๋Š˜ ๋„์ฐฉํ•œ ์š”์•ฝ์„ ์ด์–ด์„œ ๋“ฃ์Šต๋‹ˆ๋‹ค.
  • ๊ณ ๋Œ€๋น„ ๋ชจ๋“œ โ€” Core/AppState/AppThemeManager.swift์™€ Resources/Colors.swift๋กœ ์ƒ‰์ƒ ์„ธํŠธ๋ฅผ ์ „ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์—์„œ ์ผœ๊ณ  ๋•๋‹ˆ๋‹ค.
  • ์„œ์ฒด โ€” ํ•œ๊ตญ์žฅ์• ์ธ๊ฐœ๋ฐœ์› KoddiUD ์˜จ๊ณ ๋”•(Regular / Bold / ExtraBold)์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ํ„ฐ์น˜ ์˜์—ญ โ€” ์ฃผ์š” ๋ฒ„ํŠผ์€ ํฌ๊ฒŒ, ํ™”๋ฉด๋‹น ์กฐ์ž‘ ์ˆ˜๋Š” ์ ๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ํ™”๋ฉด์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” VoiceOver๋ฅผ ์ผ  ์ƒํƒœ์—์„œ ํ•œ ๋ฒˆ ํ›‘์–ด ๋ณด๊ณ  PR์„ ์˜ฌ๋ ค ์ฃผ์„ธ์š”.


๐ŸŒฑ ๋ธŒ๋žœ์น˜ ์ „๋žต

  • ๊ธฐ๋ณธ ๋ธŒ๋žœ์น˜: main, ์ž‘์—… ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ: dev

  • ์ž‘์—… ํ๋ฆ„

    1. dev์—์„œ ์ƒˆ ๋ธŒ๋žœ์น˜ ์ƒ์„ฑ

      • ๋ธŒ๋žœ์น˜๋ช…: ํ† ํ”ฝ/#์ด์Šˆ๋ฒˆํ˜ธ (์˜ˆ: feature/#123)
    2. ์ž‘์—… ํ›„ PR ๋Œ€์ƒ์€ ํ•ญ์ƒ dev

    3. ์ฝ”๋“œ๋ฆฌ๋ทฐ/CI ํ†ต๊ณผ ํ›„ dev์— ๋จธ์ง€ โ†’ ์ดํ›„ ์šด์˜ ์ „๋žต์— ๋”ฐ๋ผ main ๋ฐ˜์˜


โœ๏ธ ์ปค๋ฐ‹ & PR ์ปจ๋ฒค์…˜

  • ์ด์Šˆ ์ œ๋ชฉ / PR ์ œ๋ชฉ / ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€(Title) ํ†ต์ผ

    • ํฌ๋งท: ํ…œํ”Œ๋ฆฟ์— ๋งž์ถฐ ์ด์Šˆ ์ƒ์„ฑ ํ›„, ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์ œ๋ชฉ ๋ฐ PR ์ œ๋ชฉ์€ **[ํ† ํ”ฝ/#์ด์Šˆ๋ฒˆํ˜ธ] ์ œ๋ชฉ**์œผ๋กœ ์ž‘์„ฑ
    • ์˜ˆ: [Feature/#123] ํ™ˆ ํ™”๋ฉด ๋…น์Œ ๋ฒ„ํŠผ ์ถ”๊ฐ€
  • ๋ณธ๋ฌธ(Description): ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ์ค„๋ฐ”๊ฟˆ ๋ฆฌ์ŠคํŠธ๋กœ ๊ฐ„๋‹จํžˆ

    • ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€ ์˜ˆ:

      [Feature/#123] ํ™ˆ ํ™”๋ฉด ๋…น์Œ ๋ฒ„ํŠผ ์ถ”๊ฐ€

      • ๋…น์Œ ์‹œ์ž‘/์ •์ง€ ํ† ๊ธ€ ์ถ”๊ฐ€
      • ์ ‘๊ทผ์„ฑ ๋ผ๋ฒจ ๋ณด๊ฐ•
      • ๋ฆฌ์†Œ์Šค ๊ฒฝ๋กœ ์ •๋ฆฌ
  • ํ† ํ”ฝ(ํƒ€์ž…) ๋ชฉ๋ก (๋‚ด์šฉ์€ ๋ผ๋ฒจ์„ ์ฐธ๊ณ )

    Feature, Fix, Refactor, Chore, Setting, Deploy


๐Ÿงช ๋กœ์ปฌ ๊ฒ€์‚ฌ ๋ช…๋ น์–ด

์ปค๋ฐ‹/ํ‘ธ์‹œ ์ „์— ์•„๋ž˜ ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•ด ์ฃผ์„ธ์š”.

# 1) ์ž๋™ ํฌ๋งท + ๋ฆฐํŠธ(๋А์Šจ)
make fix

# 2) ์ˆ˜์ • ์—†์ด ๊ฒ€์‚ฌ(์—„๊ฒฉ)
make check

# 3) ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋นŒ๋“œ
make build

# 4) CI์™€ ์œ ์‚ฌํ•˜๊ฒŒ ํ•œ ๋ฒˆ์—(์ฒดํฌ + ๋นŒ๋“œ)
make ci

ํ˜„์žฌ ํ…Œ์ŠคํŠธ ํƒ€๊นƒ ๋ฏธ๊ตฌ์„ฑ โ†’ make test๋Š” build๋ฅผ ๋Œ€ํ–‰ํ•˜๋„๋ก ์„ค์ •๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.


๐Ÿšฆ PR์—์„œ ์ž๋™ ๊ฒ€์‚ฌ(CI)

  • ์›Œํฌํ”Œ๋กœ: .github/workflows/ci.yml
  • ํŠธ๋ฆฌ๊ฑฐ: pull_request (๋ชจ๋“  PR์—์„œ ์ž๋™ ์‹คํ–‰)
  • ์ˆ˜ํ–‰: SwiftFormat ์ฒดํฌ โ†’ SwiftLint ์—„๊ฒฉ ๋ชจ๋“œ โ†’ iOS ์‹œ๋ฎฌ๋ ˆ์ดํ„ฐ ๋นŒ๋“œ

๐Ÿ”— ๊ด€๋ จ ์ €์žฅ์†Œ

์ €์žฅ์†Œ ์„ค๋ช…
server ๋ฐฑ์—”๋“œ API ยท ๋ฐฐํฌ/ํฌ๋กค๋ง ๋ฌธ์„œ
crawler ๊ตฌ๋… ์‚ฌ์ดํŠธ ํฌ๋กค๋Ÿฌ (Python)
terraform-infra AWS ์ธํ”„๋ผ IaC (Terraform)

About

๐Ÿ“ข ๋“ค๋ ค์ฃผ๋Š” ์›น์˜ ์†Œ๋ฆฌ, ์˜ค๋Š˜์˜ ์†Œ๋ฆฌ

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages