출시 전 검증표를 처음부터 끝까지 한 번 돌린 날 — 시뮬레이터가 대신 못 해주는 항목

8월 6일, 작업 중인 앱을 안드로이드와 iOS 양쪽에서 실기기와 시뮬레이터로 놓고 검증 항목을 처음부터 끝까지 한 번 돌렸다. 그 자리에서 플레이스토어 문의가 유실되는 버그가 하나 나왔고 같은 날 고쳤다. 7월 27일부터 8월 6일까지 고친 것들이 전부 앱을 켜고 특정 순서로 눌러야 드러나는 종류였다는 게 항목표를 다시 만든 이유다.

2주치 수정 목록이 전부 런타임이었다

7월 27일 증분 크롤이 첫 카테고리만 보고 멈춘 것. 7월 31일 푸시 발송이 중간에 멈추고 통계가 안 맞던 것. 8월 3일 푸시 중복 발송. 8월 4일 레슨 신청에서 411 응답을 4xx 한 덩어리로 처리해 세션이 날아간 것. 같은 날 백그라운드 푸시 딥링크 이동 실패.

다섯 건 다 빌드가 통과했다. 타입 검사도 통과했다. 공통점은 앱이 포그라운드가 아닌 상태를 거치거나, 서버 응답이 정상 범위 밖으로 나올 때만 갈린다는 것이었다. 이런 건 코드를 다시 읽어서 안 잡힌다. 이미 한 번 읽고 커밋한 코드다.

그래서 검증을 "코드 확인"에서 "항목 실행"으로 바꿨다. 항목마다 어디서 돌릴지를 먼저 정했다.

시뮬레이터가 대신해 주지 않는 항목

항목 에뮬레이터·시뮬레이터에서 실기기에서만 확인되는 부분
푸시 수신 안드로이드 에뮬레이터는 Google Play 이미지면 FCM 수신됨. iOS 시뮬레이터는 APNs 페이로드를 파일로 주입해 화면만 확인 iOS 실 디바이스 토큰 발급, 앱 종료 상태 수신, 알림 권한 거부 후 재요청 흐름
백그라운드 딥링크 홈으로 내린 뒤 알림 탭 → 화면 이동까지는 재현됨 앱이 OS에 의해 완전히 종료된 뒤 콜드 스타트로 열릴 때의 라우팅
인앱 결제 응답 스텁으로 화면 흐름만 확인 Play Billing 실 결제 플로우. 라이선스 테스트 계정 등록된 기기 필요
앱오픈 광고 테스트 유닛 ID로 노출·닫기 동작 확인 실 유닛 ID로 릴리스 빌드에서 뜨는지. 테스트 기기 등록 없이 실 유닛을 부르면 노출이 막힘
상세 화면 레이아웃 해상도별 잘림, 폰트 크기 확대 상태 확인 노치·홈 인디케이터 영역 침범, 저사양 기기에서의 스크롤 프레임

표를 만들고 나서 실기기 항목만 따로 뽑았다. 그쪽만 손이 많이 가니까 순서를 앞에 뒀다.

이번 회차에 걸린 것

플레이스토어 문의가 등록 도중 유실되는 버그였다. 8월 4일에 작업한 5건을 master로 합친 직후에 돌린 회차에서 나왔다. 브랜치 단위로는 각각 확인하고 머지했다. 합쳐진 상태로 전체를 다시 눌러본 사람은 없었다.

통합 자체가 원인은 아니었지만, 통합 후 한 번 더 돌리는 절차가 없었으면 스토어에 올라간 뒤에 사용자 문의로 들어왔을 것이다. 문의 유실은 사용자가 알려주지도 않는다. 문의를 남겼는데 답이 없으면 그냥 떠난다.

그래서 master 통합 직후 전 항목 재실행을 절차에 넣었다. 브랜치별 확인은 그것대로 두고, 통합본은 별개로 한 번 더 돌린다.

다음 릴리스 준비할 때 확인할 것

같은 주에 다른 앱은 앱오픈 광고 실 유닛 ID를 적용하고 2.1.9를 올렸다. 그때와 이번 회차에서 반복해서 걸린 지점만 셋으로 줄였다. 전부 빌드 설정이나 콘솔 화면에서 눈으로 확인되는 것들이다.

  1. 광고 유닛 ID가 빌드 타입별로 분기돼 있는지. 디버그는 테스트 유닛, 릴리스는 실 유닛으로 갈라져 있는지 설정 파일에서 문자열 두 개가 실제로 다른지 본다. 하나로 통일돼 있으면 운영에서만 광고가 안 뜬다.
  2. targetSdk 값이 build.gradle에 36으로 적혀 있는지. Android 16 타겟팅은 컴파일만 되면 통과한 것처럼 보인다. compileSdk만 올리고 targetSdk가 그대로인 경우가 있어서 두 줄을 같이 본다.
  3. 결제 라이브러리 버전이 Play Billing 8.0.0을 지원한다고 릴리스 노트에 명시돼 있는지. 의존성 버전만 올려도 설치는 된다. 지원 명시가 없으면 결제 화면까지는 뜨고 구매 완료 콜백에서 갈린다. 8월 31일이 요구사항 마감이라 이건 날짜가 정해진 항목이다.

이 검증표는 한 번 돌려본 결과다. 항목당 실기기 두 대(안드로이드·iOS)를 기준으로 짰기 때문에, 태블릿이나 폴더블을 지원 기기에 넣는다면 레이아웃 행은 다시 짜야 한다. 그건 아직 확인하지 않았다.

출시 전 검증표를 처음부터 끝까지 한 번 돌린 날 — 시뮬레이터가 대신 못 해주는 항목 · peppercode 개발 노트