Skip to content

feat(ui): complete Figma app-state review and fix iOS backup flow - #596

Closed
jjoonleo wants to merge 17 commits into
mainfrom
codex/ios-ui-quality-figma-parity
Closed

jjoonleo wants to merge 17 commits into
mainfrom
codex/ios-ui-quality-figma-parity

Conversation

@jjoonleo

@jjoonleo jjoonleo commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

문제와 결과

최신 main의 화면 변경을 반영하고, 정본 OnTime Design System의 앱 대응 화면·상태를 다시 비교했습니다. Home/Calendar, 온보딩, 일정 생성·반복 설정, 준비 실행, 내 데이터·복구 화면의 배치와 에셋을 정리하고 실제 사용자 동작을 회귀 테스트로 검증합니다. iOS 기기 파일 선택기로 백업을 저장할 수 없던 문제도 수정하여 시뮬레이터에서 저장→변경→복원→초기화→재실행까지 확인했습니다.

화면과 제품 동작

  • Home/Calendar: 원본 SVG와 카드·달력·하단 내비게이션 간격을 적용했습니다. 월 이동, 실제 날짜 계산, 펼침·스와이프·삭제 확인, 로딩·오류 재시도를 검증합니다.
  • 온보딩·권한: 환영, 선택·추가, 순서, 시간 입력, 여유 시간, 알림 안내를 대조했습니다. 실제 4단계 흐름, 숫자 입력 검증과 합계를 유지합니다. 시뮬레이터에서 드러난 시간 행 중앙 탭의 포커스 문제를 고쳤습니다.
  • 일정 폼·반복 일정: 이름·장소·날짜·시간·준비 편집과 반복 설정 18개 원본 상태를 검토했습니다. 저장/취소, 월별·주별 옵션, 종료 범위, DST와 실제 시간대, 충돌 제외, 개별 회차 변경과 이후 회차 수정, 준비 데이터 소유권을 유지합니다. 수정 경로는 같은 폼 본문을 공유하며, 별도 수정 화면 원본이 있다고 주장하지 않습니다.
  • 준비 실행: 원본 원형 그래프·상태 카드와 복원 시 진행률을 적용했습니다. 현재 단계는 실제 남은 시간을 표시하고, 수동 준비 종료에는 확인을 거칩니다. 계속 준비/최종 저장/지각 재계산 동작을 검증합니다. 마지막 타이머 종료와 수동 종료창의 경합은 공통 guard로 막고, 실제 타이머 회귀 2개로 중복 확인창을 방지합니다.
  • 내 데이터·복구: 원본 상태 아이콘, 오버레이, 개인정보 배치를 반영했습니다. 복원은 파일 검증→미리보기→명시적 확인→원자적 교체를 유지합니다. 초기화 후 닫힌 저장소에는 실제 재시작 안내를 제공합니다.

iOS 백업 수정과 실행 증거

기존 file_selector_ios에는 save-location 구현이 없어 iOS export가 실패했습니다. BackupFilePicker가 iOS의 암호화된 바이트만 on_time_front/backup_files 채널로 보내고, Swift가 임시 파일과 시스템 Files export picker를 관리합니다. 사용자 저장 완료 뒤에만 백업 최신 상태를 기록하며 취소·오류에는 기록하지 않습니다. 동시 export를 거부하고 임시 파일을 정리합니다. 비밀번호는 네이티브에 전달하지 않으며 비 iOS 저장 방식은 유지합니다. import에는 iOS UTI를 지정하고 인증된 컨테이너 검증을 적용합니다.

독립 iPhone 17 / iOS 26.5 시뮬레이터에서 신규 설정과 알림·AlarmKit 실제 권한 거절/나중에 경로를 확인했습니다. 백업 811바이트를 Files에 저장하고 여유 시간을 30→35분으로 바꾼 뒤 같은 파일을 선택해 미리보기·복원을 거쳐 30분으로 돌아온 영속 값을 확인했습니다. 초기화 후 프로세스를 완전히 다시 실행하면 Welcome으로 진입하며 외부 백업 파일은 같은 SHA-256으로 남아 있습니다. 네이티브 증거와 화면에 재현 과정과 한계를 기록했습니다.

검증

  • dart run build_runner build --delete-conflicting-outputs: 통과
  • flutter analyze --no-pub: 오류 없음
  • flutter test --no-pub --coverage --concurrency=1 --reporter expanded: 693개 통과, 실패·건너뜀 0개 (골든 갱신 없이 비교 실행)
  • dart run tool/check_coverage.dart --min=80: 앱 코드 87.45% (11,969/13,686줄), 80% 기준 통과
  • 생성 Dart 정책, 로컬 전용 경계, Figma 매핑 --strict, git diff --check: 통과
  • 최종 flutter build ios --simulator --debug --no-pub: 성공; 설치·실행 후 Welcome/Start 접근성 상태 확인
  • 최신 origin/main 재조회: 미반영 커밋 0개
  • 최종 head e6414752의 Flutter CI #657: 693개 통과, 앱 코드 87.44% (11,967/13,686줄). 생성기·정적 분석·Figma 엄격 검사·전체 테스트·커버리지 게이트 모두 성공했습니다.

생성기 출력은 무시되는 로컬 산출물로 유지하며, 추적 중인 ARB/localization 소스 변경만 포함합니다. CI에 Figma 매핑 --strict 검사를 적용했습니다. 검토한 골든을 생성한 macOS와 Linux 사이의 픽셀 비교 실패 61건을 확인해 전체 CI를 macos-26/Flutter 3.44.4로 고정했습니다. 테스트 제외·허용 오차 증가·CI 골든 자동 갱신은 없으며, 실패 PNG를 아티팩트로 남깁니다. Android internal/closed 배포도 같은 macOS 전체 검증의 성공을 needs로 요구하도록 연결했습니다. 기존 Ubuntu 빌드·서명·업로드는 유지하며, 배포 워크플로를 실행하지 않았습니다. UI 검증은 저장된 Flutter 이미지의 회귀 검사, Figma 원본 수동 대조, 동작·DB 테스트, 실제 네이티브 조작을 각각 구분합니다.

검토 범위와 남은 기기 승인

매핑의 경로 21개 중 16개, 상태 변형 58개 중 57개, 총 73개 앱 매핑 항목을 검토했습니다. 진행 중·미검토 매핑은 0개이며 앱 전용 경로 5개와 OS 권한창 1개는 이유를 기록해 제외했습니다. Figma에만 존재하고 앱 경로가 없는 상세 디자인 11개는 별도 unmapped 목록이며 구현 완료에 포함하지 않습니다.

원본의 잘못된 날짜 격자·고정 합계·데이터와 실제 앱 계산, 시스템 picker/권한 UI, 폰트 렌더링 차이는 문서에 명시한 예외입니다. 픽셀 완전 일치나 Figma 파일의 모든 디자인 구현 완료를 의미하지 않습니다. 실제 iPhone은 연결 불가 상태여서 백그라운드·잠금·종료 상태 알림 전달, VoiceOver 직접 조작, 실기기 렌더링·성능은 기기 승인 항목으로 남아 있습니다. 이에 따라 PR은 Draft로 유지합니다.

최종 검토 보고서에서 영역별 원본·골든·예외 보고서와 후속 기기 확인을 볼 수 있습니다.

@jjoonleo
jjoonleo changed the base branch from feature/figma-offline-screen-sync to main September 24, 2026 03:25
@jjoonleo jjoonleo changed the title feat(ui): align local screens with OnTime Figma design system feat(ui): align local screens with refreshed OnTime Figma Sep 24, 2026
@jjoonleo jjoonleo changed the title feat(ui): align local screens with refreshed OnTime Figma feat(ui): complete Figma app-state review and fix iOS backup flow Sep 25, 2026
@jjoonleo

Copy link
Copy Markdown
Contributor Author

Superseded by #632, which merged the compatible Figma/UI work into the current audited restore, recurrence, scheduling, and notification architecture. The older backup picker and outdated test paths in this PR were intentionally excluded because they conflict with the verified native stream-port implementation now on main.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant