← 목록으로TROUBLESHOOTING

리젝의 40%는 가이드라인 2.1입니다 — 앱스토어 심사 리젝 사유별 원문과 제출 전 체크리스트

리젝의 40%는 가이드라인 2.1입니다 — 앱스토어 심사 리젝 사유별 원문과 제출 전 체크리스트

심사에 떨어지면 코드부터 의심하게 됩니다. 크래시가 났나, 메모리가 샜나. 그런데 Apple이 직접 공개한 숫자를 보면 초점이 다른 데 있습니다.

On average, over 40% of unresolved issues are related to guideline 2.1: App Completeness

미해결 이슈의 40% 이상이 가이드라인 2.1, 그러니까 앱 완성도에 몰려 있습니다. 여기서 말하는 완성도는 데모 계정을 안 넣었거나, 링크가 깨졌거나, 플레이스홀더 텍스트가 남아 있는 쪽을 가리킵니다. 제출 버튼을 누르기 전 10분이면 잡히는 것들이 리젝의 절반 가까이를 차지합니다.

사유 코드별로 원문을 보면서 실무에서 뭘 확인해야 하는지 정리했습니다.

2.1 App Completeness — 데모 계정이 절반입니다

include demo account info (and turn on your back-end service!) if your app includes a login

2.1(a)는 두 가지를 요구합니다. 로그인이 있으면 데모 계정을 넣으라는 것, 그리고 괄호 안에 느낌표까지 붙여둔 백엔드를 켜두라는 것. 실무에서 더 자주 터지는 쪽은 뒤입니다. 심사 기간에 백엔드를 꺼두거나, 개발 서버만 켜두고 프로덕션을 안 올려두면 리뷰어 화면에서는 로그인부터 막힙니다.

데모 계정을 못 주는 경우도 규정에 길이 있습니다.

If you are unable to provide a demo account due to legal or security obligations, you may include a built-in demo mode in lieu of a demo account with prior approval by Apple

법적·보안 사유가 있으면 내장 데모 모드로 대체할 수 있습니다. 단 사전 승인이 전제입니다. 그냥 데모 모드만 넣고 제출하면 승인 절차를 건너뛴 게 됩니다.

해외 개발자가 자주 놓치는 지점이 하나 더 있습니다. 리뷰어는 한국 밖에서 접속합니다. 국내 계정 기반 로그인을 데모 계정으로 주면서 해외 IP 로그인을 막아두면 리뷰어가 못 들어옵니다. 소셜 로그인을 데모로 줄 때는 해외 접속 허용 여부부터 확인합니다.

2.1로 걸리는 나머지도 대부분 사소합니다. 깨진 링크, 특히 지원 URL과 개인정보처리방침 URL이 404면 그대로 리젝으로 돌아옵니다. 이미지나 텍스트에 “Lorem ipsum”이나 “TODO”가 남아 있어도 같은 사유로 잡힙니다.

2.3 Accurate Metadata — 로그인 화면으로 채운 스크린샷

2.3.3은 금지 화면 세 개를 이름으로 지목합니다.

Screenshots should show the app in use, and not merely the title art, login page, or splash screen.

로그인 화면과 스플래시로 스크린샷을 채우면 그대로 막힙니다. 앱이 작동 중인 화면이어야 합니다. 디자인이 예쁜 인트로 화면을 앞세우고 싶은 유혹이 있는데 그게 실제 기능을 안 보여주면 걸립니다.

버전 간 불일치도 자주 걸립니다. 2.3 상위 항목은 메타데이터를 “keep them up-to-date with new versions”라고 요구합니다. UI를 갈아엎고 스크린샷을 안 바꾸면 심사는 통과해도 다음 버전에서 문제가 됩니다.

4.8 Login Services — 옛 규정이 된 “Apple 로그인 필수”

국내 자료 대부분이 아직 “타사 로그인을 넣으면 Apple로 로그인을 반드시 같이 넣어야 한다”고 적어둡니다. 현행 4.8은 제목부터 Login Services이고 원문이 요구하는 것도 특정 서비스가 아니라 조건입니다.

must also offer as an equivalent option another login service with the following features:

  • the login service limits data collection to the user’s name and email address;
  • the login service allows users to keep their email address private as part of setting up their account; and
  • the login service does not collect interactions with your app for advertising purposes without consent.

세 조건을 만족하는 로그인 수단을 동등한 선택지로 제공하면 됩니다. Sign in with Apple이 이 조건을 만족하니 여전히 가장 안전한 답입니다.

1인 개발자에게 해당될 만한 면제 조항은 딱 하나 있습니다.

Your app exclusively uses your company’s own account setup and sign-in systems.

자체 계정 시스템만 쓰면 4.8 자체가 적용되지 않습니다. 카카오나 구글 로그인을 붙이는 순간 조건이 생기는 거고요. 소셜 로그인 붙이는 쪽 작업은 구글카카오 연동 글에 따로 정리해뒀습니다.

버튼 문구까지 규정이 따라붙습니다. Apple은 자사 로그인 버튼의 표기를 별도 가이드로 관리합니다. 한국어 표기는 “Apple로 로그인”입니다. “애플 아이디로 로그인” 같은 변형은 지적받을 수 있습니다.

5.1.1 Data Collection and Storage — 계정 삭제가 빠집니다

세 항목이 자주 걸립니다. 먼저 개인정보처리방침에는 링크 외에 내용 요건이 붙습니다.

Explain its data retention/deletion policies and describe how a user can revoke consent and/or request deletion of the user’s data.

보관·삭제 정책과 동의 철회 방법이 실제로 적혀 있어야 합니다. 템플릿을 복사해 회사명만 바꾼 방침이 여기서 걸립니다.

권한 설명 문구에도 같은 요건이 붙습니다.

Ensure your purpose strings clearly and completely describe your use of the data.

NSCameraUsageDescription에 “카메라 접근이 필요합니다”라고만 쓰면 목적이 빠집니다. 무엇에 쓰는지까지 적어야 합니다. “프로필 사진 촬영을 위해 카메라를 사용합니다” 정도로 구체화하면 대부분 통과합니다.

그리고 1인 개발자가 가장 많이 빠뜨리는 한 줄이 5.1.1(v)입니다.

If your app supports account creation, you must also offer account deletion within the app.

회원가입이 있으면 앱 안에서 계정 삭제가 가능해야 합니다. 고객센터 이메일로 요청받는 방식은 요건을 못 채웁니다. 설정 화면에 삭제 메뉴를 만들고 삭제 후 데이터가 어떻게 되는지까지 화면에 적어둡니다.

Apple이 직접 꼽은 나머지 빈번 사유

공식 App Review 페이지는 2.1 외에 아래 항목들을 열거합니다. 자기 앱이 걸릴 만한 게 있는지만 훑어보면 됩니다.

사유 가이드라인 걸리는 지점
개인정보처리방침 문제 5.1 링크 누락, 내용 요건 미달
불명확한 데이터 접근 요청 5.1 권한 설명이 목적을 안 밝힘
부정확한 스크린샷 2.3 실제 화면과 다름
미흡한 UI 4.0 완성도가 스토어 기준에 못 미침
웹 클리핑·링크 모음 4.2 웹뷰를 감싸기만 한 앱
유사 앱 반복 제출 4.3 템플릿만 바꾼 양산
카피캣 4.1 타사 앱 모방
사용자 오도 2.3 설명과 실제 기능 불일치
지속적 가치 부족 4.2 한 번 쓰고 마는 앱
잘못된 주체로 제출 3, 5.1.1 계정 명의와 앱 운영 주체 불일치

마지막 항목이 계정 등록 단계와 이어집니다. 사업자 명의로 운영하는 앱을 개인 계정으로 올리면 여기서 걸립니다. 조직 계정 등록 쪽은 D-U-N-S 번호 발급 과정에 정리해뒀습니다.

제출 직전 체크리스트

터미널에 붙여넣고 하나씩 지우는 용도로 만들었습니다.

[ ] 데모 계정 ID/PW를 App Review Information에 입력했다
[ ] 데모 계정이 해외 IP에서 로그인된다
[ ] 심사 기간 내내 프로덕션 백엔드가 켜져 있다
[ ] 2FA가 걸린 계정이면 우회 방법을 메모란에 적었다
[ ] 특수 설정이 필요하면 절차나 데모 영상을 첨부했다

[ ] 지원 URL이 200을 반환한다
[ ] 개인정보처리방침 URL이 200을 반환한다
[ ] 방침에 보관·삭제 정책과 동의 철회 방법이 적혀 있다
[ ] 앱 안에서도 방침 링크에 접근할 수 있다

[ ] 스크린샷이 로그인·스플래시가 아닌 사용 중 화면이다
[ ] 스크린샷이 현재 빌드의 UI와 일치한다
[ ] 앱 설명과 실제 기능이 일치한다

[ ] 모든 권한 설명(purpose string)에 사용 목적이 들어 있다
[ ] 회원가입이 있으면 앱 내 계정 삭제가 동작한다
[ ] 추적을 한다면 ATT 팝업이 뜬다

[ ] 플레이스홀더 텍스트·이미지를 전부 제거했다
[ ] 앱 내 모든 외부 링크가 열린다
[ ] 타사 로그인이 있으면 4.8 조건을 만족하는 로그인이 함께 있다
[ ] 사용자 생성 콘텐츠가 있으면 신고·차단 기능이 있다
[ ] 계정 명의와 앱 운영 주체가 일치한다

리젝됐을 때 답변 쓰는 법

Resolution Center 답변은 길게 쓸수록 불리합니다. 리뷰어가 확인해야 할 게 늘어나기 때문입니다.

고친 뒤라면 무엇을 어떻게 고쳤는지, 어디서 확인되는지를 적습니다. 화면 경로까지 써주면 재심사가 빨라집니다. “설정 > 계정 > 계정 삭제 경로에 삭제 기능을 추가했습니다” 같은 식으로 씁니다.

반박은 재현 다음입니다. 데모 계정으로 직접 들어가 리뷰어가 밟았을 경로를 그대로 따라가면 대부분 원인이 나옵니다. 정말 오해인 경우에만 근거를 붙여 설명합니다. 이때도 가이드라인 번호를 인용해 어느 조항에 어떻게 부합하는지를 적습니다.

해석 자체가 갈릴 때는 앱 심사 위원회(App Review Board)에 이의를 제기하는 경로가 따로 있습니다. 다만 시간이 걸립니다. 고칠 수 있는 지적이면 고치고 넘어가는 쪽이 대체로 빠릅니다.

같은 지적으로 두 번 걸렸다면 앱을 고치라는 신호입니다.

정리

  • 리젝의 40% 이상이 2.1이고 그 안의 상당수는 데모 계정과 깨진 링크입니다.
  • 스크린샷은 로그인·스플래시가 아닌 작동 중인 화면이어야 합니다.
  • 4.8은 “Apple 로그인 필수”가 아니라 조건을 만족하는 대체 로그인 요구입니다.
  • 회원가입이 있으면 앱 내 계정 삭제가 필요합니다. 5.1.1(v)입니다.
  • 권한 설명에는 목적이 들어가야 합니다.

가이드라인은 개정됩니다. 이 글의 인용도 작성 시점 기준이니 제출 전에 원문을 한 번 열어보는 절차를 체크리스트 맨 위에 둡니다.

참고