You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#93이 develop에 머지되면서, 그동안 다른 브랜치 의존으로 미뤄뒀던 항목들을 처리할 수 있게 됐습니다. 개별 이슈로 쪼갤 만큼 크지 않아 하나로 묶습니다.
1. 자동 잠금과 reveal 인증 창 연결
AppLifecycleEvent.didLock과 RevealAuthPolicy.invalidatesOnLock은 정의되어 있지만 이벤트를 발신하는 곳이 없습니다. 잠금 기능이 별도 브랜치에 있어 연결하지 못했습니다. 잠금 시 이 이벤트를 발신하면 인증 창과 열린 필드가 함께 닫혀 정책이 완성됩니다.
현재 AppLifecycleClient는 NSApplication.didResignActiveNotification만 관찰합니다.
2. 읽기 전용 체크박스 접근성
DetailSSLRequiredFieldView의 DVCheckBox(readOnly:)는 비인터랙티브 도형만 그리므로 VoiceOver가 "SSL Required" 레이블만 읽고 현재 상태를 알려주지 않습니다. 행을 하나의 접근성 요소로 묶고 Required / Not Required 값을 제공해야 합니다. 접근성 인프라가 머지됐으므로 그 관례를 따릅니다.
DVMultilineTextContainer는 사용처가 0입니다. DVTextContainer가 줄바꿈으로 전환되며 역할이 사라졌으므로 제거를 검토합니다.
인증 시트 문구가 리터럴입니다. UserAuthenticationService가 String을 받고 DVDomain에 문자열 카탈로그가 없어, 잠금·온보딩 문구까지 함께 정리해야 합니다.
✅ 작업 목록
잠금 시 AppLifecycleEvent.didLock 발신 연결 — ⚠️전제 재확인 필요 (아래 참고)
잠금 → 인증 창·열린 필드 무효화 동작 확인 (테스트 포함)
DetailSSLRequiredFieldView 접근성 값 제공 — 행을 하나로 묶고 Required / Not Required를 값으로 제공 (d4eb2ff)
didTapRetryReveal — 제거로 처리 (d4eb2ff). alert에 붙여도 continuation을 잃어 값만 받아오므로, 인증을 통과하고도 모든 필드가 마스킹된 채 남아 아무 일도 안 일어난 것처럼 보인다. 재시도는 눈 버튼이 이미 맡는다 — .failed에서 다시 누르면 그 필드를 continuation에 실은 채 복호화를 새로 걸어 실제로 열린다
DVMultilineTextContainer 제거 (d4eb2ff) — 사용처 0 확인 후 삭제(292줄). 메모를 여러 줄 입력으로 바꿀 때도 조회 화면은 DVTextContainer가 개행을 그대로 그려 손댈 필요가 없었다
위 본문은 "잠금 시 이 이벤트를 발신하면 인증 창과 열린 필드가 함께 닫혀 정책이 완성된다"고 적었는데, AppFeature가 이미 그보다 강하게 처리하고 있습니다.
case .main(.delegate(.lockRequested)):
state.main =nil // ← MainFeature 전체 파괴
state.locked =.init()
state.main = nil이면 SecretDetailFeature.State가 통째로 사라지므로 revealAuthorizedAt·revealedFields뿐 아니라 편집 중인 editFields까지 함께 없어집니다. .didLock을 발신해도 받을 State가 이미 없습니다.
따라서 AppLifecycleEvent.didLock과 RevealAuthPolicy.invalidatesOnLock을 지울지, 자동 잠금(아직 없음) 대비로 남길지 정하는 것이 선행 작업입니다.
Note
6번 범위가 늘었습니다.feature/#76이 수정 진입 인증 문구(AuthenticationReason.editSecret)를 추가해 리터럴이 1개 → 2개가 됐습니다.
📝 기능 설명
#93이 develop에 머지되면서, 그동안 다른 브랜치 의존으로 미뤄뒀던 항목들을 처리할 수 있게 됐습니다. 개별 이슈로 쪼갤 만큼 크지 않아 하나로 묶습니다.
1. 자동 잠금과 reveal 인증 창 연결
AppLifecycleEvent.didLock과RevealAuthPolicy.invalidatesOnLock은 정의되어 있지만 이벤트를 발신하는 곳이 없습니다. 잠금 기능이 별도 브랜치에 있어 연결하지 못했습니다. 잠금 시 이 이벤트를 발신하면 인증 창과 열린 필드가 함께 닫혀 정책이 완성됩니다.현재
AppLifecycleClient는NSApplication.didResignActiveNotification만 관찰합니다.2. 읽기 전용 체크박스 접근성
DetailSSLRequiredFieldView의DVCheckBox(readOnly:)는 비인터랙티브 도형만 그리므로 VoiceOver가"SSL Required"레이블만 읽고 현재 상태를 알려주지 않습니다. 행을 하나의 접근성 요소로 묶고Required/Not Required값을 제공해야 합니다. 접근성 인프라가 머지됐으므로 그 관례를 따릅니다.3. 잔여 정리
SecretDetailFeature.didTapRetryReveal은 프로덕션 도달 경로가 없습니다(테스트만 참조). alert에 재시도 버튼을 붙이거나 제거해야 합니다.DVMultilineTextContainer는 사용처가 0입니다.DVTextContainer가 줄바꿈으로 전환되며 역할이 사라졌으므로 제거를 검토합니다.UserAuthenticationService가String을 받고 DVDomain에 문자열 카탈로그가 없어, 잠금·온보딩 문구까지 함께 정리해야 합니다.✅ 작업 목록
AppLifecycleEvent.didLock발신 연결 —DetailSSLRequiredFieldView접근성 값 제공 — 행을 하나로 묶고Required/Not Required를 값으로 제공 (d4eb2ff)didTapRetryReveal— 제거로 처리 (d4eb2ff). alert에 붙여도 continuation을 잃어 값만 받아오므로, 인증을 통과하고도 모든 필드가 마스킹된 채 남아 아무 일도 안 일어난 것처럼 보인다. 재시도는 눈 버튼이 이미 맡는다 —.failed에서 다시 누르면 그 필드를 continuation에 실은 채 복호화를 새로 걸어 실제로 열린다DVMultilineTextContainer제거 (d4eb2ff) — 사용처 0 확인 후 삭제(292줄). 메모를 여러 줄 입력으로 바꿀 때도 조회 화면은DVTextContainer가 개행을 그대로 그려 손댈 필요가 없었다🔗 참고 링크
Projects/DVPresentation/Sources/Features/SecretDetail/Model/RevealAuthPolicy.swiftProjects/Devault/Sources/Composition/Dependencies/AppLifecycleClient+Live.swiftWarning
1·2번은 전제가 달라졌습니다 — "연결"이 아니라 "존치 여부 결정"이 먼저입니다.
위 본문은 "잠금 시 이 이벤트를 발신하면 인증 창과 열린 필드가 함께 닫혀 정책이 완성된다"고 적었는데,
AppFeature가 이미 그보다 강하게 처리하고 있습니다.state.main = nil이면SecretDetailFeature.State가 통째로 사라지므로revealAuthorizedAt·revealedFields뿐 아니라 편집 중인editFields까지 함께 없어집니다..didLock을 발신해도 받을 State가 이미 없습니다.따라서
AppLifecycleEvent.didLock과RevealAuthPolicy.invalidatesOnLock을 지울지, 자동 잠금(아직 없음) 대비로 남길지 정하는 것이 선행 작업입니다.Note
6번 범위가 늘었습니다.
feature/#76이 수정 진입 인증 문구(AuthenticationReason.editSecret)를 추가해 리터럴이 1개 → 2개가 됐습니다.