[H-eat+] iOS 카메라 결제 화면의 P1 크래시 (EXC_BREAKPOINT)

H-eat+ .기업용 사용자가 네트워크가 불안정한 환경에서 QR 을 찍으면 결제 화면이 앱 강제 종료 로 끝나는 버그가 있었다.

진짜 원인은 IUO (Type!) + 옵셔널 체이닝 (?.IUO_Obj.x) 조합

핫픽스로 5개 IUO 프로퍼티를 모두 평범한 옵셔널 (?) 로 바꾸고, 호출부 35곳을 일일이 guard let 으로 풀어 막았다. 덤으로 영수증 페이지가 가끔 오류로 뜨던 별개 버그까지 같이 해결됐다.


1. 발생한 일

운영에서 올라온 Crashlytics 리포트:

EXC_BREAKPOINT (0x00000001023f71bc)
closure #1 in closure #3 in GeneralCameraPaymentVC.codeScanningCameraOutput(codeString:imgYn:)

증상은 단순했다.

사용자가 다시 시도해도 같은 경로라서 결국 결제 자체를 못 한다. 재시작·앱 재설치도 안 통하는, 사용자 차원의 우회가 막힌 P1 차단성 결함.

다행히 트랜잭션이 실제로 시작되기 전 단계라 데이터 손실은 없었다. 그게 P0 가 아니라 P1 인 이유.


2. 개념 정리 (버그 이해하기)

1) IUO 란? (Implicitly Unwrapped Optional)

Swift 에는 세 가지 옵셔널 표기가 있다.

표기 이름 평소 모습
Foo non-optional nil 일 수 없음. 사용 시 그냥 씀
Foo? optional nil 일 수 있음. 사용 전에 풀어야 함 (if let / guard let / ?.)
Foo! IUO nil 일 수 있는데, 컴파일러가 옵셔널인 척 안 함. 매번 자동으로 강제 언래핑

💡 비유하자면 IUO 는 "항상 펴진 채로 들고 다니는 자동 우산" 이다.