Skip to content

LockRun/LockRun_iOS

Repository files navigation

iOS 18.0 Swift 6.0 Xcode 16.4

๐Ÿš€ ๋ฝ๋Ÿฐ(LockRun)

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2025-11-13 แ„‹แ…ฉแ„’แ…ฎ 1 48 32

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ

๋ฝ๋Ÿฐ(LockRun) ์€ โ€œ๋‹ฌ๋ฆฌ๋ฉด ์ž ๊ธˆ ํ•ด์ œ๋˜๋Š” ์Šค๋งˆํŠธํฐ ์ž๊ธฐ ํ†ต์ œ ์•ฑโ€์œผ๋กœ, ๋Ÿฌ๋‹ ๋ชฉํ‘œ(๊ฑฐ๋ฆฌยท์‹œ๊ฐ„)๋ฅผ ๋‹ฌ์„ฑํ•ด์•ผ๋งŒ ํŠน์ • ์•ฑ์˜ ์‚ฌ์šฉ์ด ์ž ๊ธˆ ํ•ด์ œ๋˜๋Š” Screen Time API ๊ธฐ๋ฐ˜ ๋””์ง€ํ„ธ ๋””ํ†ก์Šค ์•ฑ์ž…๋‹ˆ๋‹ค. ์šด๋™ ์Šต๊ด€ ํ˜•์„ฑ๊ณผ ์Šค๋งˆํŠธํฐ ์˜์กด๋„ ๊ฐ์†Œ๋ฅผ ๋™์‹œ์— ์ด๋Œ์–ด๋‚ด๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • ์ธ์› : iOS 1๋ช…, Android 1๋ช…
  • ์ง„ํ–‰ ๊ธฐ๊ฐ„
    • ๊ธฐํš : 2025.10.04 ~ 2025.10.10
    • ๊ฐœ๋ฐœ : 2025.10.11 ~ 2025.11.09
  • Deployment Target : iOS 18.0
  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ : Swift 6.0, Xcode 16.4

๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

iOS

SwiftUI ยท TCA ยท SwiftData ยท Dependencies ยท ScreenTime API(DeviceActivityMonitor ยท DeviceActivityReport ยท ShieldActionDelegate ยท ManagedSettingsStore) App Group ยท CoreLocation ยท MapKit ยท WeatherKit ยท HealthKit ยท WatchKit ยท WCSession ยท CoreMotion Charts ยท Lottie ยท ActivityKit(Live Activities) ยท Testing(๋‹จ์œ„ ํ…Œ์ŠคํŠธ)


๐Ÿ“ฑ ์ฃผ์š” ํ™”๋ฉด

๋ฉ”์ธ ํ™”๋ฉด ๋Ÿฌ๋‹ ์ค‘ ํ™”๋ฉด ๋Ÿฌ๋‹ ๊ฒฐ๊ณผ ํ™”๋ฉด ์Šคํฌ๋ฆฐํƒ€์ž„ ์ฐจํŠธ

๐Ÿ”‘ ์ฃผ์š” ๊ธฐ๋Šฅ ๋ฐ ์ƒ์„ธ ์„ค๋ช…

1) Screen Time API ๊ธฐ๋ฐ˜ ์•ฑ ์ž ๊ธˆ/ํ•ด์ œ(Extension, AppGroup)

  • FamilyControls๋ฅผ ์‚ฌ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฐจ๋‹จํ•  ์•ฑ์„ ์„ ํƒ โ†’ ์„ ํƒํ•œ ์•ฑ๋“ค์˜ ์•„์ด์ฝ˜์„ UI์— ํ•จ๊ป˜ ํ‘œ์‹œ
  • DeviceActivityMonitor๋ฅผ ํ™œ์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์ •ํ•œ ์‹œ๊ฐ„๋Œ€์— ์ž๋™์œผ๋กœ ์ž ๊ธˆ ์Šค์ผ€์ค„์„ ๋“ฑ๋ก
  • ManagedSettingsStore๋ฅผ ํ†ตํ•ด ์„ ํƒ๋œ ์•ฑ์— ์ฐจ๋‹จ(Shield)์„ ์ ์šฉ
  • ๋Ÿฌ๋‹ ๋ชฉํ‘œ๋ฅผ ๋‹ฌ์„ฑํ•˜๋ฉด ์ž ๊ธˆ์ด ์ž๋™์œผ๋กœ ํ•ด์ œ๋˜๋Š” ๊ตฌ์กฐ(๋งค์ผ ๋ฐ˜๋ณต)
  • ShieldActionDelegate๋ฅผ ์ ์šฉํ•œ ์ฐจ๋‹จ ํ™”๋ฉด UI ์ปค์Šคํ…€
  • DeviceActivityReport๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์•ฑ ์‚ฌ์šฉ๋Ÿ‰์„ ๋ถ„์„ํ•˜์—ฌ, ๋Ÿฌ๋‹ ์‹œ๊ฐ„๋Œ€์— ํŠนํžˆ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์„ ๊ธฐ์ค€์œผ๋กœ โ€œ์ฐจ๋‹จ ์ถ”์ฒœ ์•ฑโ€์„ ์ œ๊ณต

โ†’ App Group + UserDefaults ๊ธฐ๋ฐ˜์œผ๋กœ Main App โ†” Extension ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ •์ ์œผ๋กœ ๊ณต์œ ํ•˜๋„๋ก ์„ค๊ณ„


2) ๋Ÿฌ๋‹ ๋ชฉํ‘œ ์„ค์ • ๋ฐ ์ž๋™ ์ž ๊ธˆ ํ•ด์ œ

  • ์‹œ๊ฐ„/๊ฑฐ๋ฆฌ ๊ธฐ๋ฐ˜ ๋ชฉํ‘œ ์„ค์ •
  • CoreLocation ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์œ„์น˜ ์ถ”์ 
  • ์„ค์ •ํ•œ ๋ชฉํ‘œ ๋„๋‹ฌ ์‹œ ์ž๋™ ์ž ๊ธˆ ํ•ด์ œ
  • AsyncStream ๊ธฐ๋ฐ˜ ์‹ค์‹œ๊ฐ„ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ์ฒ˜๋ฆฌ
    • ์œ„์น˜ ์—…๋ฐ์ดํŠธ ์ŠคํŠธ๋ฆผ
    • ๋Ÿฌ๋‹ ํƒ€์ด๋จธ ์ŠคํŠธ๋ฆผ
    • ์‹ฌ๋ฐ•์ˆ˜ ์ŠคํŠธ๋ฆผ
    • ๋ชฉํ‘œ ๋‹ฌ์„ฑ ๊ฐ์ง€ ์ŠคํŠธ๋ฆผ

3) ๋Ÿฌ๋‹ ์ง„ํ–‰ ์ƒํƒœ ์‹œ๊ฐํ™” (Live Activities)

  • ActivityKit ๊ธฐ๋ฐ˜ ๋Ÿฌ๋‹ ์ •๋ณด ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œ
  • Dynamic Island & Lock Screen์— ํŽ˜์ด์Šค/๊ฑฐ๋ฆฌ/์‹œ๊ฐ„/์‹ฌ๋ฐ•์ˆ˜ ํ‘œ์‹œ

4) ์ง€๋„ ๊ธฐ๋ฐ˜ ๋Ÿฌ๋‹ ๊ฒฝ๋กœ ํ‘œ์‹œ

  • MapKit + _MapKit_SwiftUI
  • MKPolyline์œผ๋กœ ์ด๋™ ๊ฒฝ๋กœ ์‹œ๊ฐํ™”
  • ๋Ÿฌ๋‹ ์‹œ์ž‘ ์‹œ Lottie ์นด์šดํŠธ๋‹ค์šด ์• ๋‹ˆ๋ฉ”์ด์…˜ ์ ์šฉ
  • (CoreMotion ์‚ฌ์šฉ) CMPedometer ๊ธฐ๋ฐ˜ ํŽ˜์ด์Šค/๊ฑฐ๋ฆฌ/์ผ€์ด๋˜์Šค ๊ณ„์‚ฐ

5) HealthKit + watchOS ์—ฐ๋™

  • HKWorkoutSession ๊ธฐ๋ฐ˜ ์‹ฌ๋ฐ•์ˆ˜ ์ธก์ •
  • WCSession์œผ๋กœ iPhone โ†” Watch ์‹ค์‹œ๊ฐ„ ์‹ฌ์žฅ๋ฐ•๋™์ˆ˜ ์ „์†ก

6) WeatherKit ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์ •๋ณด ํ‘œ์‹œ

  • ํ˜„์žฌ ๊ธฐ์˜จ, ๊ฐ•์ˆ˜ ํ™•๋ฅ , ๋‚ ์”จ ์•„์ด์ฝ˜ ํ‘œ์‹œ
  • GPS ๊ธฐ๋ฐ˜ ๋‚ ์”จ ์—…๋ฐ์ดํŠธ

7) SwiftData ๊ธฐ๋ฐ˜ ๋Ÿฌ๋‹ ๊ธฐ๋ก ์ €์žฅ

  • ์ด ๊ฑฐ๋ฆฌ, ์‹œ๊ฐ„, ๋‚ ์งœ ์ €์žฅ
  • SwiftData Model์„ ํ†ตํ•œ ๋Ÿฌ๋‹ ํžˆ์Šคํ† ๋ฆฌ ๊ด€๋ฆฌ

8) ์Šคํฌ๋ฆฐํƒ€์ž„ ์•ฑ ์‚ฌ์šฉ๋Ÿ‰ ์ฐจํŠธ

  • DeviceActivityReportExtension ํ™œ์šฉ
  • ์‹œ๊ฐ„๋Œ€๋ณ„ ์•ฑ ์‚ฌ์šฉ๋Ÿ‰ ๊ทธ๋ž˜ํ”„ ์ถœ๋ ฅ(Charts)
  • ๋Ÿฌ๋‹ ์‹œ๊ฐ„๋Œ€์— ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ์•ฑ์„ ๋ถ„์„ํ•˜์—ฌ ์•ฑ ์ฐจ๋‹จ ์ถ”์ฒœ

9) ํ”„๋กœํ•„ & ์บ˜๋ฆฐ๋”

  • ์ปค์Šคํ…€ ๋‹ฌ๋ ฅ์œผ๋กœ ์›”๋ณ„ ๋Ÿฌ๋‹ ๊ธฐ๋ก ์‹œ๊ฐํ™”
  • ํ”„๋กœํ•„ ํŽธ์ง‘ ๊ฐ€๋Šฅ

๐Ÿ—๏ธ ์•„ํ‚คํ…์ฒ˜

TCA ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ฒ˜

๋ฝ๋Ÿฐ์€ ์‹ค์‹œ๊ฐ„ ์ŠคํŠธ๋ฆผ ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ๊ณ  ๊ธฐ๋Šฅ ๊ฐ„ ์ƒํƒœ ์˜์กด๋„๊ฐ€ ๋†’์•„ TCA๋ฅผ ์ฑ„ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

  • Reducer ๋‹จ์œ„๋ณ„๋กœ ๋ถ„๋ฆฌ
  • ๋ช…ํ™•ํ•œ Action โ†’ Reducer โ†’ State ๊ตฌ์กฐ
  • Dependencies๋กœ Side Effect ๋ถ„๋ฆฌ
  • ํ…Œ์ŠคํŠธ ๊ฐ€๋Šฅํ•œ ๊ตฌ์กฐ
  • ์Šค์ฝ”ํ”„ ํ™•์žฅ์œผ๋กœ ํ™”๋ฉด ๊ฐ„ ์•ก์…˜ ์ฒด๊ณ„์  ๊ด€๋ฆฌ

๐Ÿž ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

1. ScreenTime Extension(๋ชจ๋‹ˆํ„ฐ๋ง) ๋กœ๊ทธ ํ™•์ธ ๋ถˆ๊ฐ€ ๋ฌธ์ œ

๋ฌธ์ œ

ScreenTime ๊ด€๋ จ ๊ธฐ๋Šฅ(DeviceActivityMonitorExtension)์€ ๋ฉ”์ธ ์•ฑ๊ณผ ์™„์ „ํžˆ ๋…๋ฆฝ๋œ Extension์œผ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค๊ธฐ๊ธฐ ์—ฐ๊ฒฐ ํ›„ print, log ๋ฅผ ์ถœ๋ ฅํ•ด๋„ Xcode ์ฝ˜์†”์—์„œ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.

์ฆ‰, ๊ฐ’์ด ์ œ๋Œ€๋กœ ๋“ค์–ด์˜ค๋Š”์ง€ ๋ชจ๋‹ˆํ„ฐ๋ง ๋กœ์ง์ด ์ •์ƒ ์‹คํ–‰๋˜๋Š”์ง€ Shield/Monitor ์Šค์ผ€์ค„์ด ์‹ค์ œ๋กœ ์ ์šฉ๋˜๋Š”์ง€ ์ „ํ˜€ ํŒŒ์•…ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ์˜€๋‹ค.

์›์ธ

๋ฉ”์ธ ์•ฑ(Target: App)์„ ์„ ํƒํ•˜๋ฉด ๋ฉ”์ธ ์•ฑ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ๋งŒ ์ถœ๋ ฅ๋˜๋ฉฐ, ๋ชจ๋‹ˆํ„ฐ๋ง Extension(Target: DeviceActivityMonitorExtension)์€ ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๋™์ž‘ํ•œ๋‹ค.

์ฆ‰, ๋ฉ”์ธ ํƒ€๊นƒ์œผ๋กœ ์‹คํ–‰ โ†’ ๋ชจ๋‹ˆํ„ฐ๋ง Extension ๋กœ๊ทธ ํ™•์ธ ๋ถˆ๊ฐ€ Extension ํƒ€๊นƒ์œผ๋กœ ์‹คํ–‰ โ†’ ๋ฉ”์ธ ์•ฑ ๋กœ๊ทธ ํ™•์ธ ๋ถˆ๊ฐ€ ์„œ๋กœ ๋…๋ฆฝ๋œ ๋‘ ์•ฑ์ด๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ์ฝ˜์†”์—์„œ ๋ชจ๋‘ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์›๋ž˜ ์—†์Œ.

ํ•ด๊ฒฐ ๊ณผ์ •

โœ” 1) ํƒ€๊นƒ์„ Extension์œผ๋กœ ์ „ํ™˜ํ•˜์—ฌ Extension ๋‚ด๋ถ€ ๋กœ๊ทธ ํ™•์ธ

Xcode ์‹คํ–‰ ํƒ€๊นƒ์„ DeviceActivityMonitorExtension โ†’ My iPhone์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๋ชจ๋‹ˆํ„ฐ๋ง Extension์˜ ์‹คํ–‰ ๋กœ๊ทธ๋Š” ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด ๊ฒฝ์šฐ, ๋ฉ”์ธ ์•ฑ์ด ์‹คํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์ธ ๋กœ์ง ์•ฑ ๋กœ๊ณ ๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒˆ๋กœ ์ƒ๊น€.

โœ” 2) App Group ๊ธฐ๋ฐ˜ โ€œ์‹ค์‹œ๊ฐ„ ์ƒํƒœ ์ถœ๋ ฅโ€ ๋ทฐ ์ œ์ž‘

Extension๊ณผ App ๊ฐ„ ํ†ต์‹ ์€ App Group UserDefaults๋ฅผ ํ†ตํ•ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ์ ์„ ํ™œ์šฉํ•ด, Extension์—์„œ ํŠน์ • ๊ฐ’์ด๋‚˜ ํ”Œ๋ž˜๊ทธ๋ฅผ UserDefaults(suiteName:)์— ๊ธฐ๋กํ•˜๋„๋ก ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฉ”์ธ ์•ฑ์—์„œ๋Š” ์ด ๊ฐ’์„ ํ…์ŠคํŠธ๋กœ ์‹ค์‹œ๊ฐ„ ํ‘œ์‹œํ•˜๋Š” ๊ฐ„๋‹จํ•œ Debug View๋ฅผ ๊ตฌ์„ฑํ–ˆ๋‹ค.

์˜ˆ์‹œ ํ๋ฆ„:

  1. Extension์—์„œ ์ด๋ฒคํŠธ ๋ฐœ์ƒ โ†’ App Group์— write
  2. ๋ฉ”์ธ ์•ฑ์˜ Debug View์—์„œ read โ†’ ์ฆ‰์‹œ UI ์—…๋ฐ์ดํŠธ
  3. ์ฝ˜์†” ๋กœ๊ทธ๊ฐ€ ์—†์–ด๋„ Extension ๋™์ž‘์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธ ๊ฐ€๋Šฅ

๊ฒฐ๊ณผ

๊ธฐ์กด์ฒ˜๋Ÿผ ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ์˜์กดํ•˜์ง€ ์•Š๊ณ ๋„ ๋ชจ๋‹ˆํ„ฐ๋ง Extension์ด ์‹ค์ œ๋กœ ์–ด๋–ค ์ด๋ฒคํŠธ๋ฅผ ๋ฐ›์•˜๋Š”์ง€, ์Šค์ผ€์ค„์ด ์‹คํ–‰ ์ค‘์ธ์ง€, ํ† ํฐ์ด ์ •์ƒ์œผ๋กœ ์ฝํžˆ๋Š”์ง€ ๋ฉ”์ธ ์•ฑ ํ™”๋ฉด์—์„œ ๋ฐ”๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋‘ ํ”„๋กœ์„ธ์Šค์˜ ๋กœ๊ทธ๋ฅผ ๋ชจ๋‘ ์ถ”์ ํ•˜๊ธฐ ์–ด๋ ค์šด Extension ๊ตฌ์กฐ์˜ ํ•œ๊ณ„๋ฅผ App Group + Debug View ๋ฐฉ์‹์œผ๋กœ ํ•ด๊ฒฐํ•จ.


๐Ÿ’ฌ ํšŒ๊ณ 

๋ฝ๋Ÿฐ์€ ์ผ๋ฐ˜์ ์ธ ๋Ÿฌ๋‹ ์•ฑ์„ ๋„˜์–ด
โ€œํƒ€๊ฒŸ ๊ฑฐ๋ฆฌ ๋„๋‹ฌ โ†’ ์•ฑ ์ž ๊ธˆ ํ•ด์ œโ€๋ผ๋Š” ๋…ํŠนํ•œ UX๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์—
ScreenTime API ยท HealthKit ยท watchOS ยท ActivityKit ยท TCA ๋“ฑ์ด ๋ชจ๋‘ ๊ฒฐํ•ฉ๋œ ๋ณต์žกํ•œ ๊ตฌ์กฐ์˜€์Šต๋‹ˆ๋‹ค. ํŠนํžˆ Extension ๊ฐ„ ํ†ต์‹ , Live Activity ์œ ์ง€, ์‹ค์‹œ๊ฐ„ ์œ„์น˜/์‹ฌ๋ฐ•์ˆ˜ ์ŠคํŠธ๋ฆผ ๋“ฑ ๋‹ค์–‘ํ•œ ๋ณตํ•ฉ ๊ธฐ์ˆ ์ด ๋™์‹œ์— ์ž‘๋™ํ•ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ Reducer๋ฅผ ๋ช…ํ™•ํžˆ ๋ถ„๋ฆฌํ•˜๊ณ , App Group ๊ธฐ๋ฐ˜ ํ†ต์‹  ๊ตฌ์กฐ๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ์•ˆ์ •์„ฑ๊ณผ ํ™•์žฅ์„ฑ ๋ชจ๋‘ ํ™•๋ณดํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ํ–ฅํ›„์—๋Š” UI/UX ๋””์ž์ธ์„ ๋”์šฑ ์ •๊ตํ•˜๊ฒŒ ๋‹ค๋“ฌ๊ณ , ๋Ÿฌ๋‹ ์ค‘ ์‚ฌ์šฉ์ž ๋™๊ธฐ๋ถ€์—ฌ๋ฅผ ์ค„ ์ˆ˜ ์žˆ๋Š” ์ถ”๊ฐ€ ๊ธฐ๋Šฅ(์นญ์ฐฌ ์‹œ์Šคํ…œ, ๋ฐฐ์ง€, ํžˆ์Šคํ† ๋ฆฌ ํ†ต๊ณ„ ๊ฐ•ํ™” ๋“ฑ)์„ ํ™•์žฅํ•ด ๋‚˜๊ฐˆ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

About

LockRun_iOS

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages