5.7 KiB
5.7 KiB
Milestone: iOS 알림 테스트
위치
- Roadmap:
agent-roadmap/ROADMAP.md - Phase:
agent-roadmap/phase/messaging-runtime/PHASE.md
목표
Android 중심으로 정리된 nexo 알림 계약을 iOS/APNs 환경에서 어느 수준까지 동일하게 검증할 수 있는지 확인한다. 현재 iOS native plugin은 scaffold/stub 상태이므로 production-ready로 단정하지 않고, 권한 요청, APNs/FCM token, notification open routing, ACK/dismiss 계약을 구현 gap과 smoke 기준으로 나누어 정리한다.
상태
[진행중]
승격 조건
- 없음
구현 잠금
- 상태: 잠금
- 결정 필요:
- iOS smoke 기준으로 사용할 Apple Developer Team, bundle identifier, provisioning profile 생성/관리 책임을 정한다.
- APNs 인증 방식은 key 기반인지 certificate 기반인지, 그리고 인증 자산 보관 위치와 접근 책임을 정한다.
- Firebase iOS app을 새로 만들지 기존 app을 사용할지,
GoogleService-Info.plist제공/보관 방식을 정한다. - 실제 기기 smoke를 수행할 기기, Apple 계정, 테스트 앱 설치 방식, evidence 제출 방식을 정한다.
- CI/headless에서 수행할 검증 범위와 수동 검증으로 남길 APNs delivery 범위를 정한다.
범위
- iOS plugin scaffold와
apps/flutter-test/ioshost 설정의 현재 지원 상태 확인 - APNs entitlement, Firebase iOS 설정, notification permission, APNs/FCM token 획득과 host handoff 조건 정리
- iOS foreground/background/terminated notification open routing의 Dart event 계약 확인
- iOS에서 ACK, dismiss, inline reply가 가능한 native hook과 아직 없는 구현 gap 분리
- 실제 기기, simulator, headless test runner별 검증 가능/불가 경계와 evidence 위치 정리
기능
Epic: [baseline] iOS 기준선
iOS 알림이 Android와 같은 계약으로 검증되기 전에 필요한 platform baseline을 확인한다.
- [platform-state] 선행 정리 결과를 바탕으로
packages/messaging_flutter/ios와apps/flutter-test/ios의 scaffold, 등록 지점, 남은 no-op gap을 확인한다. - [permission-token] APNs entitlement, Firebase config, notification permission, APNs/FCM token 획득과 host handoff 조건을 정리한다.
- [device-limits] simulator, physical device, CI/headless 환경에서 가능한 검증과 불가능한 검증을 구분한다.
Epic: [contract] iOS 알림 계약
iOS native event가 Dart API와 host routing callback으로 연결되기 위한 계약을 구체화한다.
- [native-bridge] 선행 정리한 bridge 계약 대비 permission, token refresh, notification opened event를 Flutter method/event channel로 넘기는 iOS 구현 gap을 확인한다.
- [payload-map] 선행 fixture 계약을 실제 APNs/FCM payload의
server_url,server_id,channel_id,root_id,ack_id매핑에 대조한다. - [ack-dismiss] iOS에서 ACK, dismiss, inline reply를 처리할 수 있는 native hook과 후속 구현이 필요한 gap을 분리한다.
Epic: [smoke] iOS Smoke
구현 gap을 숨기지 않고 iOS에서 반복 가능한 수동/자동 smoke 기준을 만든다.
- [manual-smoke] 실제 기기 기준 permission, token handoff, foreground/background/open routing smoke checklist와 evidence 경로를 작성한다.
- [automation-boundary] widget/integration test로 자동화할 항목과 실제 APNs delivery가 필요한 수동 항목을 분리한다.
- [follow-up] smoke 결과에 따라 iOS native bridge 구현, host 설정 보강, 문서 보강 중 후속 Milestone 후보를 정리한다.
완료 리뷰
- 상태: 없음
- 요청일: 없음
- 완료 근거: 없음
- 리뷰 필요:
- 사용자가 완료 결과를 확인했다
- archive 이동을 승인했다
- 리뷰 코멘트: 없음
범위 제외
- Android FCM 구현 변경은 이 Milestone에서 다루지 않는다.
- macOS, Windows, Linux desktop 알림 검증은 각 OS별 알림 테스트 Milestone에서 다룬다.
- 멀티앱 channel/tenant/server 분기 모델과 push credential 분리 정책은 멀티앱 채널 모델에서 결정한다.
- iOS native bridge 전체 구현은 gap 확인 후 별도 구현 Milestone으로 분리할 수 있다.
작업 컨텍스트
- 관련 경로:
packages/messaging_flutter/ios/,packages/messaging_flutter/lib/,packages/messaging_flutter/README.md,apps/flutter-test/ios/,apps/flutter-test/README.md - 표준선(선택): iOS scaffold/stub 상태를 먼저 명확히 하고, 가능한 smoke 기준과 후속 구현 gap을 분리한다
- 민감값 기준: Apple/Firebase/APNs credential, team id, profile, token, private host 값은 tracked 문서에 쓰지 않고 책임 경계와 evidence 위치만 기록한다
- 선행 작업: 알림 파이프라인 고도화, iOS 알림 선행 정리
- 후속 작업: 멀티앱 채널 모델
- 확인 필요: 프로비저닝, APNs 인증, Firebase iOS 설정, 실제 기기/CI smoke 환경 결정
- 현재 동기화(2026-06-05):
packages/messaging_flutter/ios/Classes/NexoMessagingPlugin.swift와apps/flutter-test/ios/RunnerTests/RunnerTests.swift기준으로 최소 debug/action bridge, device token 저장/조회, auth/signing no-op bridge는 확인됐고, APNs 등록, Firebase token refresh, notification center delegate, ACK, dismiss, inline reply는 구현 gap으로 남아 있다. - 현재 동기화(2026-06-05):
apps/flutter-test/ios/Runner/Runner.example.entitlements,apps/flutter-test/ios/Runner/GoogleService-Info.example.plist,apps/flutter-test/ios/Fixtures/*.apns,docs/ios-notification-test-guide.md기준으로 placeholder와 민감값 제외/evidence 경계는 확인됐고, 실제 Apple/Firebase/기기 smoke 결정은 아직 잠금 항목으로 남아 있다.