없는 로케일 때문에 스토어 이미지 업로드가 취소됐습니다
Gradle Play Publisher가 없는 로케일의 이미지 조회에서 실패하면서 기존 로케일의 변경도 반영되지 않았습니다. 로케일을 먼저 만든 뒤 이미지를 올리고 sha1을 비교했습니다.
들어가며
물타기 계산기의 구글 플레이 등록정보를 올렸는데, 며칠이 지나도 스토어 이미지가 바뀌지 않았습니다. 실행했던 명령은 Gradle Play Publisher(GPP)의 publishReleaseListing이었습니다.
./gradlew publishReleaseListing
다시 로그를 보니 마지막에 FAILED가 있었습니다. 새로 추가한 언어의 이미지 목록을 읽다가 실패한 명령을, 실행했다는 것만 기억하고 있었습니다.
fr-FR의 오류로 ko-KR 변경도 반영되지 않았습니다
당시 사용한 GPP 4.1.1은 등록정보 텍스트와 이미지를 하나의 편집(edit)에 넣었습니다. Play API는 편집을 열고 변경을 넣은 뒤 커밋해야 반영되는 구조입니다.
새 언어를 추가하면서 여러 로케일에 graphics/ 폴더를 만들었습니다. 그중에는 스토어에 아직 등록정보가 없는 로케일도 있었습니다. GPP는 이미지를 올리기 전에 현재 이미지 목록을 GET으로 읽는데, 이 요청이 없는 로케일에서 404로 실패했습니다.
Listing for language 'fr-FR' not found
편집 전체가 커밋되지 않아 이미 있던 ko-KR의 이미지 변경도 반영되지 않았습니다. 오류가 난 fr-FR만 다시 올리면 되는 상황이 아니었습니다.
로케일과 이미지를 나눠 올렸습니다
스토어에 없는 로케일은 두 차례에 나눠 처리했습니다.
- 새 로케일의
graphics/를 잠시 치우고 등록정보를 올려 로케일을 만듭니다. graphics/를 원래 자리로 되돌리고 다시 실행해 이미지를 올립니다.
저장소의 최종 파일 배치는 그대로 두고, 업로드 순서만 나눈 것입니다.
REST 요청으로 로케일만 먼저 만드는 방법도 시도했습니다. 이때는 edits:validate가 200을 반환했지만 edits:commit은 HTML 404를 반환했습니다. 이 시도로는 완료하지 못했고, 커밋은 GPP에 맡겼습니다.
이미지 파일은 API 응답과 대조했습니다
콘솔 화면만으로는 검토 중인 이미지와 반영된 이미지를 구분하기 어려웠습니다. 임시 편집을 열어 이미지 목록을 읽고, 응답의 sha1을 로컬 파일의 해시와 비교했습니다.
shasum fastlane/metadata/android/ko-KR/images/phoneScreenshots/*.png
해시가 같으면 API가 반환한 목록에 로컬과 같은 이미지 파일이 있는지 확인할 수 있습니다. 조회를 마친 임시 편집은 삭제했습니다. 이 편집에는 변경을 넣거나 커밋하지 않았습니다.
마치며
로케일을 먼저 만든 뒤 이미지를 올리는 순서로 처리했습니다. 다시 올린 뒤에는 명령의 종료 결과를 읽고, 이미지 목록의 해시까지 비교했습니다. 원래 준비한 파일이 업로드 목록에 들어갔는지를 그때 확인했습니다.