App Store 4.3 리젝 대응: 리뷰어가 탭 세 번으로 확인할 수 있는 답변서
성경 족보 1.0 을 8월 27일에 냈고, 그날 리젝됐습니다. Guideline 4.3, 스팸입니다. 다른 개발자가 제출한 앱과 바이너리·메타데이터·컨셉이 유사하고 차이가 미미하다는 문면이었습니다.
오늘 통과했습니다. 재제출은 한 번도 하지 않았고, 스크린샷도 심사 노트도 손대지 않은 그대로입니다. 바뀐 것은 Resolution Center 에 올린 답변 하나뿐입니다.
그런데 이 글에서 제일 중요한 숫자는 그게 아닙니다. 막혀 있던 13일 중 12일은 제가 아무것도 안 보낸 기간이었습니다.
같은 문면이 두 가지 사유에 쓰입니다
4.3 은 두 갈래입니다. (a)는 스팸이고, 한 개발자가 비슷한 앱을 반복해서 내는 경우를 포함합니다. (b)는 이미 스토어에 있는 앱과 개념이 겹치는 경우입니다.
메일에는 "other developers" 라고 적혀 있었습니다. 문자 그대로 읽으면 (b)입니다. 그런데 이 문면은 자기 계정 스팸에도 똑같이 나가는 보일러플레이트입니다. 받은 메일만으로는 어느 쪽인지 확정되지 않습니다.
여기서 잘못 짚으면 대응 전체가 헛돕니다. 계정 패턴이 원인인데 "우리 앱은 기존 계보 앱들과 다릅니다"만 길게 쓰면 아무 데도 닿지 않습니다.
아는 것과 짐작하는 것을 가른 표
그래서 대응 문서를 열고 표를 두 개로 나눴습니다. 확인 방법까지 같이 적었습니다.
물증 쪽입니다. 이 계정이 19일 동안 앱 다섯을 통과시키고 여섯째에서 걸렸습니다. 성경 족보는 성경 지도와 파일을 하나도 공유하지 않습니다. 지도는 Expo 56 에 MapLibre 와 좌표 GeoJSON 이고, 족보는 Expo 57 에 SQLite 와 계보 데이터입니다. 반면 두 앱의 스토어 문구에는 같은 문장이 재사용되고 있었고, 카테고리도 같고, 아이콘 여섯이 한 가족처럼 생겼습니다. 심사 노트와 설명이 전부 한국어라는 것도 물증 쪽입니다.
아이콘이 한 가족인 것은 의도한 것이었습니다. 형제 앱들과 어울리게 만드는 것이 목표였으니까요. 그게 4.3 심사에서는 반대로 읽힐 수 있다는 생각은 못 했습니다.
짐작 쪽은 하나였습니다. 원인이 계정 패턴인지 개념 중복인지. 이건 끝까지 확정하지 못했고, 그래서 답변에서 되묻기로 했습니다.
아무것도 보내지 않은 12일
리젝이 8월 27일, 답변을 올린 것이 9월 9일입니다. 그 사이에 다른 앱 작업은 했지만 이 건에 대해서는 한 글자도 보내지 않았습니다.
변명하기 어렵습니다. 무엇을 써야 할지 정리가 안 된 채로 미뤘고, 미루는 동안 상황은 하나도 안 바뀌었습니다. 답변을 올린 뒤에는 이틀 만에 끝났습니다.
4.3 에서 실제로 잃는 것은 심사 기간이 아니라 이 멈춰 있는 기간입니다. 저는 이 숫자가 아래 나오는 어떤 요령보다 중요하다고 봅니다.
초안에서 뺀 문단, 아직 안 한 일
초안 첫 판에는 「스크린샷을 차별점이 드러나게 바꿨고, 심사 노트를 영문으로 제공했다」는 문장이 있었습니다.
둘 다 계획만 있는 상태였습니다. 문서에 안이 적혀 있었을 뿐 실제로는 하나도 반영하지 않았습니다. Apple 이 제품 페이지를 열어 보면 그 자리에서 드러납니다.
빼고, 대신 답을 들을 때까지 재제출을 보류한다는 사실만 적었습니다. 안 한 일을 했다고 쓰는 것은 원래 리젝보다 훨씬 비싼 문제가 됩니다. 4.3 은 오해지만 이건 신뢰 문제라서요.
리뷰어가 탭 세 번으로 확인할 수 있는 세부
여기가 핵심이라고 생각합니다.
대부분의 이의 제기는 "우리 앱은 독창적입니다, 재고해 주세요"로 끝납니다. 이러면 리뷰어에게 할 일이 없습니다. 그리고 확인할 것이 없으면 원래 판정을 유지하는 쪽이 제일 쌉니다.
그래서 앱을 설명하는 대신 확인 지점 세 개를 줬습니다.
첫째, 지파에서 베냐민을 열고 「한 대 아래로」를 누르면 됩니다. 창세기 46장은 아들 열을 적고, 민수기 26장은 족속 다섯을 적고, 역대상은 서로도 맞지 않는 목록 둘을 더 냅니다. 이 앱은 넷을 하나로 합치지 않고 출처를 붙여 나란히 놓습니다. 둘째, 지파에서 단과 스불론을 열면 후손 목록 없이 끝납니다. 역대상 1장에서 9장에 둘 다 계보가 없기 때문이고, 그럴듯한 이름으로 채우는 대신 「기록 거의 없음」으로 둡니다. 셋째, 인물 탭의 「이름이 엉키는 자리」에는 같은 이름 다른 사람(헤롯이 여섯입니다)과 한 사람 여러 이름(마태와 레위)이 각각 다른 목록으로 들어 있습니다.
셋 다 탭 몇 번이면 확인됩니다. "우리 앱은 다릅니다"가 아니라 "여기를 눌러 보세요"입니다.
쓰지 않은 것이 쓴 것만큼 중요했습니다
되묻는 문단을 마지막에 넣었습니다. 유사하다고 판단한 앱이 특정되어 있다면 알려 달라, 스토어를 찾아봤지만 출처 불일치를 이렇게 보여 주는 앱을 못 찾았다, 그래서 추측 대신 구체적인 지적에 답하고 싶다. 그리고 답을 들을 때까지 재제출을 보류하겠다고 적었습니다.
같은 빌드를 그냥 다시 올리면 같은 플래그가 다시 걸립니다. 반복할수록 기록만 나빠집니다.
빼기로 한 것도 둘 있었습니다. 계정 출시 속도 이야기를 자진해서 꺼내지 않았습니다. 우리 패턴이 원인일 수 있다는 추정을 먼저 제출하면 심사를 그쪽으로 끌고 가게 됩니다. 물어 오면 사실대로 답할 생각이었습니다. 다른 앱을 지목하지도 않았습니다. "저 앱들보다 우리가 낫다"는 논지는 4.3 에서 역효과입니다.
재제출 없이 끝난 이틀
9월 11일 아침에 회신이 왔습니다.
Thank you for providing this information. We will continue the review, and we will notify you if there are any further issues.
그리고 같은 날 오전에 승인됐습니다. 자동 출시 설정이라 그대로 스토어에 올라갔습니다.
되물은 질문에는 끝내 답이 없었습니다. 어느 앱과 유사한지는 말해 주지 않았습니다. 다른 개발자의 앱 이름을 심사 커뮤니케이션에 적는 것은 원래 잘 하지 않는 일이라, 저는 이 침묵을 "지목할 앱이 없었다"의 증거로는 쓰지 않습니다. 정황까지입니다.
한 가지 더 눈에 띈 것이 있습니다. Apple 은 자기 판단이 틀렸다고 말하지 않았습니다. 회신에는 판정을 번복한다는 말이 없고 심사를 계속하겠다는 말만 있습니다. 저는 이게 우연이 아니라고 봅니다. 누구도 틀렸다고 말하지 않아도 풀리도록 써야 풀립니다. "당신들이 잘못 봤다"로 시작하는 답변은 상대에게 방어할 거리를 만들어 줍니다.
리젝이 풀려도 지우지 않은 것
리젝이 풀렸다고 대응 문서의 나머지를 지우지는 않았습니다.
심사 노트 영문화는 이번 건과 무관하게 합니다. 리뷰어가 읽는 유일한 설명문인데 그게 한국어였습니다. 비용이 0 이고 효과가 가장 확실한 항목이 이번에 반영조차 안 된 상태였다는 게 사실 좀 부끄럽습니다. 스크린샷도 1번이 장 목록이라 검색 결과 썸네일에서 어느 성경 앱과도 구별되지 않습니다. 이건 리젝과 별개로 고칠 일입니다.
그리고 제일 중요한 것. 다음에 4.3 이 오면 그날 답을 보내겠습니다. 12일을 다시 쓰지 않는 것이 위의 어떤 문장보다 값이 큽니다.
함께 읽기
- Expo config plugin이 반영되지 않는 이유: prebuild와 mod 순서생명시계 앱에 Face ID 잠금을 붙였습니다. expo-local-authentication 을 설치하고 app.json 에 플러그인과 권한 문구를 적었습니다.
- App Store Connect 업로드: Xcode 로그인 없이 API 키로아카이브는 만들어졌습니다. 이제 IPA 로 뽑아 올리기만 하면 되는데, 여기서 Xcode 에 애플 계정을 붙이라는 요구가 세 번 나옵니다. 세 번 다 피할 수 있습니다.
- WWDR 중간 인증서: 코드 서명 신원이 0개로 나오는 이유$ security import dist-cert.p12 -k /Library/Keychains/login.keychain-db
- Play 스토어 등록정보 자동화: EAS가 덮지 않는 한 칸앱에 언어 셋을 더하고 스토어에 올리려던 참이었습니다. iOS 쪽은 명령 하나로 끝났습니다.
- Expo SDK 56 iOS 빌드 오류와 Swift weak let 호환성저는 견적킷을 iPhone에서 실행하려다 xcodebuild 코드 65를 만났습니다. 빌드 화면에는 Reanimated와 Worklets 컴파일 로그가 길게 지나갔고, 마지막에는 오류 15개가 있다는 메시지만 남았습니다.