Skip to content

๐Ÿ› HealthKit ๊ธฐ๋ก ์‹คํŒจ ๋ณต๊ตฌ ์ฒ˜๋ฆฌ#230

Merged
gaeng2y merged 1 commit into
developfrom
feature/#219-failure
May 21, 2026
Merged

๐Ÿ› HealthKit ๊ธฐ๋ก ์‹คํŒจ ๋ณต๊ตฌ ์ฒ˜๋ฆฌ#230
gaeng2y merged 1 commit into
developfrom
feature/#219-failure

Conversation

@gaeng2y

@gaeng2y gaeng2y commented May 20, 2026

Copy link
Copy Markdown
Owner

๐Ÿ“ Summary

HealthKit ์ˆ˜๋ถ„ ๊ธฐ๋ก ์“ฐ๊ธฐ ์‹คํŒจ๊ฐ€ ์•ฑ, AppIntent, Watch์—์„œ ์กฐ์šฉํ•œ ์„ฑ๊ณต์œผ๋กœ ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๋„๋ก ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์‹คํŒจ ์ƒํƒœ๋ฅผ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

๐ŸŽฏ Type of Change

  • โœจ New feature (์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€)
  • ๐Ÿ› Bug fix (๋ฒ„๊ทธ ์ˆ˜์ •)
  • ๐Ÿ”ง Configuration (์„ค์ • ๋ณ€๊ฒฝ)
  • โ™ป๏ธ Refactoring (์ฝ”๋“œ ๋ฆฌํŒฉํ† ๋ง)
  • ๐Ÿ“ Documentation (๋ฌธ์„œ ์ˆ˜์ •)
  • ๐ŸŽจ UI/UX (๋””์ž์ธ ๋ณ€๊ฒฝ)
  • โšก Performance (์„ฑ๋Šฅ ๊ฐœ์„ )
  • ๐Ÿ›ก๏ธ Security (๋ณด์•ˆ ๊ฐ•ํ™”)
  • ๐Ÿงช Test (ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€/์ˆ˜์ •)
  • ๐Ÿ”จ Build (๋นŒ๋“œ ์‹œ์Šคํ…œ ์ˆ˜์ •)

๐Ÿ”— Related Issues

๐Ÿ“‹ Changes Made

Added

  • HydrationWriteResult / HydrationWriteFailureReason๋ฅผ ์ถ”๊ฐ€ํ•ด HealthKit ์“ฐ๊ธฐ ์„ฑ๊ณต/์‹คํŒจ๋ฅผ Domain ๊ฒฝ๊ณ„์—์„œ ํ‘œํ˜„
  • Watch mutation ๊ฒฐ๊ณผ ๋ชจ๋ธ์„ ์ถ”๊ฐ€ํ•ด snapshot๊ณผ ์“ฐ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ํ•จ๊ป˜ ์ „๋‹ฌ
  • ์•ฑ/Watch ์‹คํŒจ ์•ˆ๋‚ด ๋ฌธ๊ตฌ ๋ฐ ViewModel ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

Changed

  • ์•ฑ ๋ฌผ ๊ธฐ๋ก/์ดˆ๊ธฐํ™” ํ๋ฆ„์ด HealthKit ์“ฐ๊ธฐ ์„ฑ๊ณต ํ›„์—๋งŒ refresh, undo, Widget timeline reload, ์„ฑ๊ณต analytics๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ๋ณ€๊ฒฝ
  • AppIntent๊ฐ€ HealthKit ์ €์žฅ ์‹คํŒจ ์‹œ ์„ฑ๊ณต dialog, Widget reload, water_logged analytics๋ฅผ ์‹คํ–‰ํ•˜์ง€ ์•Š๋„๋ก ๋ณ€๊ฒฝ
  • Watch ๊ธฐ๋ก/์ดˆ๊ธฐํ™” ์‹คํŒจ ์‹œ snapshot์„ ์„ฑ๊ณต์ฒ˜๋Ÿผ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ณ  ์‚ฌ์šฉ์ž ์•ˆ๋‚ด ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜๋„๋ก ๋ณ€๊ฒฝ
  • hydration logging, reliability recovery, analytics ๋ฌธ์„œ์— HealthKit ์“ฐ๊ธฐ ์‹คํŒจ ์ฒ˜๋ฆฌ ๊ธฐ์ค€ ๋ฐ˜์˜

Fixed

  • Data layer์—์„œ ๋กœ๊น… ํ›„ ์‚ผ์ผœ์ง€๋˜ HealthKit ์“ฐ๊ธฐ ์‹คํŒจ๊ฐ€ ์•ฑ, AppIntent, Watch ์ง„์ž…์ ๊นŒ์ง€ ์ „๋‹ฌ๋˜์ง€ ์•Š๋˜ ๋ฌธ์ œ ์ˆ˜์ •
  • ๊ถŒํ•œ ์ฒ ํšŒ๋กœ ์ธํ•œ ์“ฐ๊ธฐ ์‹คํŒจ๊ฐ€ ์„ค์ • ์ด๋™ CTA ์—†์ด ์„ฑ๊ณต์ฒ˜๋Ÿผ ๋ณด์ผ ์ˆ˜ ์žˆ๋˜ ๋ฌธ์ œ ์ˆ˜์ •

Removed

  • ์—†์Œ

๐Ÿ” Technical Details

  • DrinkWaterUseCase / DrinkWaterRepository์˜ ์ˆ˜๋ถ„ ์“ฐ๊ธฐ API๋ฅผ HydrationWriteResult ๋ฐ˜ํ™˜ ๋ฐฉ์‹์œผ๋กœ ๋ณ€๊ฒฝํ–ˆ์Šต๋‹ˆ๋‹ค.
  • DrinkWaterHealthKitDataSource์™€ Watch HealthKit data source์—์„œ HealthKitError / HKError๋ฅผ domain-safe failure reason์œผ๋กœ ๋งคํ•‘ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹คํŒจ analytics๋Š” water_log_failed.failure_reason์œผ๋กœ ๊ธฐ๋กํ•˜๋ฉฐ, ์ผ๋ฐ˜ HealthKit ์ €์žฅ ์‹คํŒจ๋Š” healthkit_write_failed๋กœ ๊ตฌ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.
  • HealthKit source of truth ์ •์ฑ…์€ ์œ ์ง€ํ•˜๊ณ , ์‹คํŒจํ•œ ๊ธฐ๋ก์„ ๋กœ์ปฌ pending queue๋‚˜ ๋ณ„๋„ ์›์žฅ์œผ๋กœ ์ €์žฅํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๐Ÿ“ธ Screenshots / Videos

Before

์ฒจ๋ถ€ ์—†์Œ

After

์ฒจ๋ถ€ ์—†์Œ

โœ… Testing

Test Plan

  • ์•ฑ ๋นŒ๋“œ ์„ฑ๊ณต
  • Debug ๋ชจ๋“œ ์ •์ƒ ์ž‘๋™
  • Release ๋ชจ๋“œ ์ •์ƒ ์ž‘๋™
  • ๊ธฐ์กด ๊ธฐ๋Šฅ ์˜ํ–ฅ ์—†์Œ
  • Widget Extension ์ •์ƒ ์ž‘๋™ (ํ•ด๋‹น์‹œ)

Test Environment

  • iOS Version: N/A
  • Device: N/A
  • Xcode Version: ๋กœ์ปฌ Xcode ํ™˜๊ฒฝ์—์„œ CoreSimulator/iOS platform ๋ถˆ์ผ์น˜ ํ™•์ธ

Test Results

  • tuist generate ํ†ต๊ณผ
  • make lint ํ†ต๊ณผ
  • make arch-check ํ†ต๊ณผ
  • git diff --check ํ†ต๊ณผ
  • ๋ณ€๊ฒฝ Domain/Data/WatchData slice swiftc -typecheck ํ†ต๊ณผ
  • xcodebuild test / generic iOS build๋Š” ๋กœ์ปฌ ํ™˜๊ฒฝ์˜ CoreSimulator ๋ฒ„์ „ ๋ถˆ์ผ์น˜ ๋ฐ iOS 26.5 platform ๋ฏธ์„ค์น˜๋กœ destination ํ™•์ธ ๋‹จ๊ณ„์—์„œ ์‹คํŒจ

๐Ÿšจ Breaking Changes

  • Yes (์•„๋ž˜์— ์„ค๋ช…)
  • No

DrinkWaterUseCase, DrinkWaterRepository, Watch hydration mutation API๊ฐ€ ์“ฐ๊ธฐ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ repo ๋‚ด๋ถ€ ํ˜ธ์ถœ๋ถ€์™€ ํ…Œ์ŠคํŠธ mock์€ ํ•จ๊ป˜ ๊ฐฑ์‹ ํ–ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ“Œ Additional Notes

  • ์‹คํŒจํ•œ HealthKit ์“ฐ๊ธฐ๋Š” ์„ฑ๊ณต analytics, undo, Widget timeline reload๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๊ถŒํ•œ ๊ด€๋ จ ์‹คํŒจ๋Š” ์„ค์ • ์ด๋™ CTA๋ฅผ ์ œ๊ณตํ•˜๊ณ , ์ผ๋ฐ˜ ์ €์žฅ ์‹คํŒจ๋Š” ์žฌ์‹œ๋„ ๊ฐ€๋Šฅํ•œ ์˜ค๋ฅ˜๋กœ ์•ˆ๋‚ดํ•ฉ๋‹ˆ๋‹ค.

๐Ÿ‘€ Review Checklist

  • ์ฝ”๋“œ๊ฐ€ ํ”„๋กœ์ ํŠธ์˜ ์ฝ”๋”ฉ ์ปจ๋ฒค์…˜์„ ๋”ฐ๋ฅด๊ณ  ์žˆ๋‚˜์š”?
  • ์ƒˆ๋กœ์šด ์˜์กด์„ฑ์ด ํ•„์š”ํ•œ๊ฐ€์š”?
  • ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•œ๊ฐ€์š”?
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์ด ํ•„์š”ํ•œ๊ฐ€์š”?
  • ํ™˜๊ฒฝ ์„ค์ • ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•œ๊ฐ€์š”?

HealthKit ์“ฐ๊ธฐ ์‹คํŒจ๋ฅผ ์•ฑ, AppIntent, Watch์—์„œ ๋ณต๊ตฌ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋กœ ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
@gaeng2y gaeng2y marked this pull request as ready for review May 21, 2026 12:08
@gaeng2y gaeng2y changed the base branch from main to develop May 21, 2026 12:08
@gaeng2y gaeng2y merged commit fe5de40 into develop May 21, 2026
2 checks passed
@gaeng2y gaeng2y deleted the feature/#219-failure branch May 21, 2026 12:09
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant