📌 작업 목적
근거리 교환 화면이 "언제 끝나는지" "보냈는지" "실패하면 어떻게 되는지"를 다루지 않는다. 화면을 켠 채 두면 광고·스캔이 무기한 돌고, 내 명함이 상대에게 전달됐다는 신호는 코드가 받아 놓고도 버린다.
1) 전송 성공 이벤트를 버린다
UMCApp/Features/BusinessCard/Presentation/Sources/ViewModels/CardExchangeViewModel.swift:113 — case .advertising, .scanning, .sent: break
.sent 는 "내 명함이 상대에게 갔다"는 유일한 신호인데 .advertising/.scanning 과 함께 무시된다. 사용자는 받기만 확인할 수 있고 보내기는 확인할 수 없다.
2) idle 타임아웃이 없다
3) 전송 재시도가 없다
UMCApp/Core/NearbyExchange/Sources/MPCTransport.swift:277-290 — 전송 실패 시 그대로 끝. 순간적인 연결 흔들림에도 교환이 통째로 실패한다
✅ 완료 조건
🔗 관련 정보
📌 작업 목적
근거리 교환 화면이 "언제 끝나는지" "보냈는지" "실패하면 어떻게 되는지"를 다루지 않는다. 화면을 켠 채 두면 광고·스캔이 무기한 돌고, 내 명함이 상대에게 전달됐다는 신호는 코드가 받아 놓고도 버린다.
1) 전송 성공 이벤트를 버린다
UMCApp/Features/BusinessCard/Presentation/Sources/ViewModels/CardExchangeViewModel.swift:113—case .advertising, .scanning, .sent: break.sent는 "내 명함이 상대에게 갔다"는 유일한 신호인데.advertising/.scanning과 함께 무시된다. 사용자는 받기만 확인할 수 있고 보내기는 확인할 수 없다.2) idle 타임아웃이 없다
3) 전송 재시도가 없다
UMCApp/Core/NearbyExchange/Sources/MPCTransport.swift:277-290— 전송 실패 시 그대로 끝. 순간적인 연결 흔들림에도 교환이 통째로 실패한다✅ 완료 조건
.sent이벤트를 화면 상태로 반영 (「내 명함을 보냈어요」)🔗 관련 정보