Bplogger

Pulse Log 하네스 엔지니어링 설계

1. 목적

Pulse Log의 기능을 안전하게 유지하고 확장하기 위한 테스트 가능한 경계를 정의한다. 현재 Android 앱은 배포 중이므로 Android 하네스는 기존 동작 보호에 집중하고, iOS 하네스는 Android 소스와 독립된 신규 구현의 품질 기준으로 둔다.

2. 핵심 원칙

3. 현재 Android 하네스 상태

Android 앱에는 다음 경계가 이미 있다.

현재 Android 체크는 repository root에서 실행한다.

.\scripts\check.ps1

또는:

bash ./scripts/check.sh

Android 하네스의 우선순위는 배포 중인 앱의 회귀 방지다. iOS 구현을 위해 Android 구조를 재편하지 않는다.

4. Android 하네스 유지 규칙

5. iOS 하네스 목표 구조

iOS 앱은 Android와 같은 shared Kotlin Multiplatform 경계를 사용한다.

shared
  commonMain
    model
    domain
    repository
    usecase
    presentation
  commonTest

ios
  PulseLog
    App
    Features
      Entry
      Calendar
      Graph
      Settings
      Export
    SharedBridge
    Data
      LocalHealthRepository
    Notifications
      NotificationScheduling
      LocalNotificationScheduler
    DesignSystem
  PulseLogTests
  PulseLogUITests

6. iOS 경계 설계

공통 경계는 가능한 한 shared/commonMain에 둔다. iOS 프로젝트에는 SwiftUI 상태 wrapper, 저장소 구현, 알림 구현, 공유 시트 구현만 남긴다.

6.1 ClockProviding

목적:

권장 shared API:

protocol ClockProviding {
    fun today(): LocalDate
    fun nowEpochMs(): Long
    fun zoneId(): TimeZoneId
}

6.2 HealthRepository

목적:

필수 동작:

6.3 NotificationScheduling

목적:

필수 동작:

6.4 순수 정책

다음 정책은 플랫폼 API 없이 테스트 가능해야 한다.

상세 shared 모듈 구조는 Android/iOS 공통 코드 설계를 따른다.

7. iOS 테스트 계획

7.1 Unit Test

위치:

ios/PulseLogTests

우선 테스트:

7.2 Repository Test

검증:

7.3 UI Test

위치:

ios/PulseLogUITests

권장 accessibility identifier:

main.tab.entry
main.tab.calendar
main.tab.graph
main.header.settings
main.header.export
entry.morning.systolic
entry.morning.diastolic
entry.morning.save
entry.morning.delete
entry.evening.systolic
entry.evening.diastolic
entry.evening.save
entry.weight.value
entry.weight.save
calendar.month.previous
calendar.month.next
calendar.day.<yyyy-mm-dd>
graph.range.7
graph.range.30
settings.morning.enabled
settings.morning.time
settings.evening.enabled
settings.evening.time
settings.save
export.csv.30
export.csv.all

8. iOS 완료 기준

첫 TestFlight 전:

App Store 제출 전:

9. 작업 순서

Android 유지:

  1. 로컬 Gradle checks 실행 가능 상태 유지
  2. 정책 단위 테스트 유지
  3. Room migration 테스트 유지
  4. 알림 수동 검증 유지

iOS 신규:

  1. iOS 프로젝트 생성
  2. 순수 정책과 fake clock 작성
  3. 로컬 repository와 fake repository 작성
  4. 입력 화면과 저장 흐름 구현
  5. 캘린더와 그래프 구현
  6. 알림 scheduler 구현
  7. 내보내기 구현
  8. XCUITest와 TestFlight 준비