앱 4개를 연달아 출시하면서 4번 리젝을 먹었어요. 코드가 잘못된 경우도 있었고 메타데이터 설정 실수도 있었는데요. 한 번 정리해두면 다른 분들은 같은 실수를 안 할 수 있을 것 같아서 공유합니다.

1. IAP 상품을 등록했는데 바이너리에 없다
앱: Renio (구독 관리) 가이드라인: 2.1(b) - App Completeness
App Store Connect에 구독 상품(Monthly, Yearly)을 등록해놓고, 앱 바이너리에는 StoreKit 구현이 안 되어 있었어요. 상품만 만들고 코드를 아직 안 넣은 채로 제출한 거죠.
In-app purchase products associated with the app version submitted for review could not be found in the submitted binary.
해결
두 가지 중 하나를 해야 해요:
- IAP를 아직 안 넣을 거면 → App Store Connect에서 상품 삭제 후 재제출
- IAP를 넣을 거면 → StoreKit 구현 + 샌드박스 테스트 + 화면 녹화 첨부
저는 StoreKit 2를 구현하고, 샌드박스 환경에서 구매 테스트한 화면 녹화를 App Review 노트에 첨부했어요. Apple은 “홈 화면에서 시작 → 앱 실행 → 구매 완료"까지의 전체 플로우를 녹화로 원하더라고요.
교훈: App Store Connect에 IAP 상품을 등록했으면 반드시 바이너리에도 구현되어 있어야 합니다. 아직 준비 안 됐으면 상품을 먼저 삭제하세요.
2. 구독 앱인데 EULA 링크를 안 넣었다
앱: JournalMind (일기 앱) 가이드라인: 3.1.2(c) - Subscriptions
auto-renewable subscription이 있었는데, App Store 메타데이터에 Terms of Use (EULA) 링크를 안 넣었어요.
리젝 메시지는 이랬어요:
The submission did not include all the required information for apps offering auto-renewable subscriptions. A functional link to the Terms of Use (EULA).
구독 앱이 반드시 포함해야 하는 4가지
Apple이 요구하는 건 명확해요:
- 구독 이름
- 구독 기간
- 구독 가격 (단위 가격 포함)
- 개인정보처리방침 + 이용약관(EULA) 링크
앱 안에도 있어야 하고, App Store Connect 메타데이터에도 있어야 해요.
해결
App Store Connect에서 두 곳을 확인하면 됩니다:
- App Information → Privacy Policy URL — 개인정보처리방침 링크
- App Description 또는 EULA 필드 — 이용약관 링크
Apple 기본 EULA를 쓰더라도 App Description에 링크를 명시적으로 넣어야 통과돼요. 저는 앱 설명 하단에 이렇게 추가했어요:
Terms of Use: https://youngwonstudio.com/terms
Privacy Policy: https://youngwonstudio.com/privacy/앱이름
교훈: 구독 앱이면 제출 전에 EULA 링크부터 확인하세요. 가장 흔한 리젝 사유 중 하나예요.
3. IAP 프로모션 이미지를 복붙했다
앱: Clareo (GTD 할 일 관리) 가이드라인: 2.3.2 - Accurate Metadata
In-App Purchase 상품이 여러 개 있었는데, 프로모션 이미지를 전부 같은 이미지로 넣었거든요. “어차피 앱 아이콘이랑 비슷하게 만들면 되지 않나?” 했는데 안 되더라고요.
You submitted duplicate or identical promotional images for different promoted In-App Purchase products and/or win back offers.
해결
각 IAP 상품마다 고유한 프로모션 이미지를 만들어야 해요. 해당 상품이 뭔지 시각적으로 구분이 되어야 합니다.
사실 프로모션을 안 할 거면 이미지를 아예 안 넣어도 돼요. App Store Connect에서 프로모션 이미지를 삭제하면 심사에 걸리지 않거든요.
교훈: IAP 프로모션 이미지는 상품마다 다르게. 프로모션 안 할 거면 차라리 안 넣는 게 낫습니다.
4. Privacy 라벨을 잘못 체크했다
앱: Sudozen (스도쿠 게임) 가이드라인: 5.1.2(i) - Data Use and Sharing
App Store Connect에서 Privacy 라벨을 설정할 때 트래킹 관련 항목(Device ID, Advertising Data, Product Interaction)에 체크를 했어요. 사실 앱에서 트래킹을 하지 않는데, 뭔지 잘 모르고 체크한 거였거든요.
The app privacy information provided in App Store Connect indicates the app collects data in order to track the user. However, the app does not use App Tracking Transparency to request the user’s permission before tracking their activity.
Apple 입장에서는: “트래킹한다고 해놓고 사용자한테 동의 안 받았네?” 인 거죠.
해결
두 가지 중 하나를 해야 해요:
- 실제로 트래킹하면 → ATT(AppTrackingTransparency) 프레임워크로 동의 요청 구현
- 트래킹 안 하면 → App Store Connect에서 Privacy 라벨 수정
저는 트래킹을 안 하고 있었기 때문에 Privacy 라벨을 수정하는 것으로 해결했어요.
교훈: Privacy 라벨은 “잘 모르겠으면 체크"가 아니라 “확실하지 않으면 체크 안 하기"입니다. 과도하게 체크하면 오히려 리젝 사유가 돼요.
정리
4번의 리젝 중 Renio만 코드 수정(StoreKit 구현)이 필요했고, 나머지 3번은 App Store Connect 설정만 고쳐서 해결됐어요.
| 가이드라인 | 실수 | 해결 |
|---|---|---|
| 2.1(b) | IAP 상품만 등록, 코드 미구현 | StoreKit 구현 + 화면 녹화 |
| 3.1.2(c) | 구독 앱 EULA 링크 누락 | App Description에 링크 추가 |
| 2.3.2 | IAP 프로모션 이미지 중복 | 상품별 고유 이미지 |
| 5.1.2(i) | Privacy 라벨 과도 체크 | 라벨 수정 |
앱 제출 전 체크리스트:
- App Store Connect에 등록한 IAP 상품이 바이너리에 구현되어 있는가?
- 구독 앱이면: EULA + Privacy Policy 링크가 App Description과 앱 내부에 있는가?
- IAP 프로모션 이미지가 상품마다 다른가? (또는 불필요하면 삭제)
- Privacy 라벨이 앱의 실제 데이터 수집과 일치하는가?
이 네 가지만 확인해도 제가 겪은 리젝 4번은 전부 피할 수 있었어요.