iOS 앱 스토어 리뷰 지침에서 IAP
이 플러그인의 설치 단계와 전체 마크다운 가이드와 함께 설정 프롬프트를 복사합니다.
애플의 지침을 준수하는 데 주의가 필요하며, 인앱 구매 및 구독을 implement하는 경우 App Store에 앱을 승인받는 것은 매우 중요합니다. 이 가이드는 첫 번째 제출을 통과하기 위해 필요한 모든 것을 다룹니다.

제출하기 전에
제목이 "제출하기 전에"인 섹션__CAPGO_KEEP_0__
__CAPGO_KEEP_1____CAPGO_KEEP_2__
- __CAPGO_KEEP_3__ __CAPGO_KEEP_4__ URL을 App Store Connect에 추가하세요. __CAPGO_KEEP_5__ URL을 App Store Connect에 추가하세요.
- __CAPGO_KEEP_6__을 완료하여 앱이 출시되도록 하세요. __CAPGO_KEEP_7__ __CAPGO_KEEP_8__
- __CAPGO_KEEP_9__을 완료하여 앱이 출시되도록 하세요. __CAPGO_KEEP_10__ __CAPGO_KEEP_11__
- Add 앱 리뷰 연락처 정보 및 리뷰어 노트를 명확하게 하세요
- 로그인이 필요할 경우, 리뷰 기간 동안 만료되지 않는 데모 계정을 제공하세요 Note
Prepare Real Screenshots
Prepare Real Screenshots를 준비하세요- Prepare Real Screenshots를 준비하세요
- 아이폰용
1290 x 27966.7인치가 가장 쉬운 기본 크기입니다. - 아이패드용 앱이면 아이패드 스크린샷도 업로드하세요.
- 현재 지원하는 큰 아이패드 크기는
2064 x 275213인치2048 x 273212.9인치 - 아이폰 스크린샷을 늘려서 아이패드 지원을 위장하지 마세요.
테스트 플라이트에서 리뷰어의 여정을 시뮬레이션하세요.
제목: 테스트 플라이트에서 리뷰어의 여정을 시뮬레이션하세요.실제 기기에서 애플이 따르는 정확한 경로를 실행하세요:
- 테스트 플라이트에서 최신 빌드를 설치하세요.
- 리뷰를 제공할 계정으로 로그인하세요.
- __CAPGO_KEEP_0__을 숨겨진 동작이나 디버그 메뉴 없이 paywall에 접근하세요
- __CAPGO_KEEP_0__ 구매, 복원 및 구독 관리 흐름을 완료하세요
- __CAPGO_KEEP_0__ 앱이 권한이 거부되더라도 올바르게 동작하는지 확인하세요
In-App Purchase Requirements
__CAPGO_KEEP_1__Pricing Transparency (Critical)
__CAPGO_KEEP_1__Apple은 구매 전에 명확한 가격 공개가 필요합니다.
Must-Have Elements:
- 구매 버튼 앞에 정확한 가격을 표시하세요
- billing frequency (예: “$9.99/month”)를 표시하세요
- 돈을 주고 받는 데 대한 사용자에게 명확하게 설명하세요
- 요금이 발생할 때 알려주세요
일반 거부:
“구독 가격은 명확하고 사전 알림이 있어야 합니다.”
:::caution 가격 일관성 모든 가격은 다음에 일치해야 합니다:
- 앱 스토어 메타데이터 목록
- 인앱 구매 화면
- 구독 관리 화면
스토어 목록 ($4.99)과 앱 ($5.99) 사이에 $1의 불일치만으로도 자동 거부가 트리거됩니다. :::
구독 플랜 제시
제목이 ‘구독 플랜 제시’인 섹션필수 공개 정보:
- 모든 구독 계층이 함께 표시됩니다
- 기능별 등급 비교
- UI를 통해 등급을 자동으로 기본 등급으로 설정하지 않습니다.
- 취소 지침을 찾기 쉬운 방법

규정 준수 UI 예시:
import { NativePurchases } from '@capgo/native-purchases';
function SubscriptionScreen() { return ( <div> <h2>Choose Your Plan</h2>
{/* Show all tiers equally */} <PlanCard title="Basic" price="$4.99/month" features={['Feature A', 'Feature B']} /> <PlanCard title="Premium" price="$9.99/month" features={['All Basic', 'Feature C', 'Feature D']} highlighted={false} // Don't force premium />
{/* Clear cancellation info */} <Text> Cancel anytime in Settings > Subscriptions. No refunds for partial periods. </Text> </div> );}구매 복원
구매 복원 섹션구현 요구 사항:
IAP를 사용하는 모든 앱은 사용자가 이전 구매를 복원할 수 있는 방법을 제공해야 합니다. 지원에 연락하지 않고.
import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function restorePurchases() { try { await NativePurchases.restorePurchases();
const { purchases } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.SUBS, });
const activeSub = purchases.find( (purchase) => purchase.isActive && purchase.expirationDate, );
if (activeSub) { unlockPremiumFeatures(); showMessage('Purchases restored successfully!'); return; }
const { purchases: iaps } = await NativePurchases.getPurchases({ productType: PURCHASE_TYPE.INAPP, }); const hasIap = iaps.some((purchase) => purchase.productIdentifier === 'premium_unlock');
showMessage( hasIap ? 'Premium purchase restored!' : 'No previous purchases found.', ); } catch (error) { showError('Failed to restore purchases. Please try again.'); }}
// Add a visible "Restore Purchases" button<Button onClick={restorePurchases}> Restore Purchases</Button>일반적인 거절 사유
일반적인 거절 사유 섹션1. 앱이 충돌하거나 기능이 깨진다
1. 앱이 충돌하거나 기능이 깨진다 섹션왜 실패하는가:
- 앱이 실행 시에 충돌한다
- 구매 흐름이 완료되지 않는다
- 스크린샷에 표시된 기능이 작동하지 않는다
예방책:
- 실제 기기에서 테스트하라 (시뮬레이터만 테스트하지 말라)
- 모든 구독 흐름을 종단에서 종단으로 테스트하라
- 수령증 검증이 작동하는지 확인하라
- 네트워크 오류 처리를 확인하세요
2. 메타데이터 불일치
2. 메타데이터 불일치 섹션 제목왜 실패하는가:
- 스크린샷은 현재 빌드에 없는 기능을 보여줍니다
- 설명은 존재하지 않는 기능을 언급합니다
- 메타데이터에 표시된 가격과 앱 내 가격이 다릅니다

예방책:
// Document exactly what's in each tierconst SUBSCRIPTION_FEATURES = { basic: ['Ad-free', 'Cloud sync', 'Basic themes'], premium: ['Ad-free', 'Cloud sync', 'All themes', 'Priority support']};
// Use these in both your app AND App Store description3. 권한 설명 누락
3. 권한 설명 누락 섹션 제목Why It Fails:
- 카메라/위치/건강 정보 요청을 설명하지 않고 요청하는 경우
- 권한 요청이 여러 화면 깊숙이 묻혀 있는 경우
- 권한 설명이 모호하거나 일반적인 경우
예방:
업데이트하여 Info.plist 명확한 설명과 함께:
<key>NSCameraUsageDescription</key><string>Camera access is needed to scan product barcodes for quick subscription upgrades.</string>
<key>NSLocationWhenInUseUsageDescription</key><string>Location helps us show relevant local content in your Premium subscription.</string>4. 유도적인 마케팅
제목이 '4. 유도적인 마케팅'인 섹션Why It Fails:
- 세 가지 이유로 실패하는 경우
- 증명이 없는 “세계 1위 앱” 같은 주장
- ‘무제한’ 기능이 숨겨진 제한이 있는 경우


추가 설명 지침
- 예방 조치:
- 설명에서 사실적이고 구체적이어야 합니다.
- 증명이 없는 초월적인 표현을 피하십시오.
사용자에게 위기감을 조성하는 속임수를 피하십시오.
5. 숨겨진 취소 절차왜 실패하는가:
- 취소 방법을 언급하지 않음
- 취소 버튼이 숨겨져 있거나 가려져 있음
- Apple의 네이티브 흐름 없이 다단계 취소 프로세스
예방:
// Always inform users about cancellationfunction SubscriptionInfo() { return ( <div> <h3>How to Cancel</h3> <ol> <li>Open iPhone Settings</li> <li>Tap your name at the top</li> <li>Tap Subscriptions</li> <li>Select this app and tap Cancel</li> </ol>
<p>Or manage directly in the App Store app.</p>
<Button onClick={openSubscriptionManagement}> Manage Subscription in Settings </Button> </div> );}
async function openSubscriptionManagement() { // Direct link to iOS subscription management await NativePurchases.showManageSubscriptions();}개인정보 및 데이터 사용 (5.1.1 장)
개인정보 및 데이터 사용 (5.1.1 장)라는 제목의 장2025년 Apple은 개인정보 요구 사항을 크게 강화했습니다.
필수 공개
필수 공개라는 제목의 장모든 권한에 대해:
- Why you need it (specific use case)
- When it will be used
- How data is stored/shared
- Whether it’s optional or required
Example: Proper Permission Flow
Example: Proper 권한 흐름async function requestCameraPermission() { // Show explanation BEFORE requesting await showDialog({ title: 'Camera Access', message: 'We need camera access to let you scan barcodes for quick product lookup. Your photos are never uploaded or stored.', buttons: ['Not Now', 'Allow'] });
// Then request permission const result = await Camera.requestPermissions(); return result.camera === 'granted';}개인 정보 영양 표
Section titled “개인 정보 영양 표”앱 스토어 개인 정보 영양 표가 정확히 반영되도록 하세요:
- 구매 이력 수집
- 이메일 주소 (영수증을 위해)
- __CAPGO_KEEP_0__ (위조 방지)
- __CAPGO_KEEP_0__ (분석을 위한 사용 데이터)
2025년 1차 승인 거부 사유 중 가장 흔한 것은 개인 정보 보호 레이블이 정확하지 않다는 것입니다. 데이터 수집을 신중히 검토하세요.
__CAPGO_KEEP_1__
__CAPGO_KEEP_2__
-
모든 구입 흐름을 테스트하세요
- 각 구독 등급을 구매하여 테스트하세요
- 무료 시범 기간을 테스트하세요
- 소개 요약이 올바르게 적용되는지 확인하세요
- 구매를 복원하세요
- 가족 공유 기능이 활성화된 경우 가족 공유를 확인하세요
- 다양한 기기에서 테스트
-
가격 일관성을 확인
- 앱 스토어 메타데이터가 인앱 가격과 일치하는지 확인
- 모든 통화가 정확한지 확인
- 무료 시범 기간이 설명과 일치하는지 확인
- 소개 제안 조건이 정확한지 확인
-
모든 복사본을 검토
- 장치 텍스트를 제거
- 주장들이 테스트 가능한지 확인
- 문법과 철자가 올바른지 확인
- 설명이 현재 빌드와 일치하는지 확인
- 경쟁사 언급을 제거
-
권한 테스트
- 필요한 권한만 요청하십시오
- 권한 요청하기 전에 명확한 설명을 제공하십시오
- ‘거부’ 흐름을 테스트하세요 (앱은 여전히 작동해야 합니다)
- Info.plist 설명이 명확한지 확인하십시오
-
테스트 계정 준비
- 리뷰 중에 유효한 리뷰 계정을 생성하십시오
- 앱 리뷰 정보에 로그인 자격 증명 문서화하십시오
- 리뷰어는 결제 흐름을 완료할 수 있는지 확인하십시오
- 필요한 경우 Notes 필드에 추가 계정이나 앱 전용 Switch 포함하십시오
-
메타데이터 확인
- 스크린샷은 현재 UI와 일치하는지 확인하십시오
- __CAPGO_KEEP_0__ URL에는 실제 연락처 정보가 포함되어 있습니다.
- __CAPGO_KEEP_0__ 정책 URL이 채워져 있습니다.
- __CAPGO_KEEP_0__의 콘텐츠와 일치하는 연령 등급이 있습니다.
- 빌드에 포함된 콘텐츠와 일치하는 현재 버전의 앱 프리뷰 비디오가 표시됩니다.
- 설명은 기능을 정확하게 설명합니다.
- 스토어 목록에서 앱으로부터 액세스할 수 있는 개인 정보 보호 정책이 있습니다.
-
상세 리뷰 노트를 작성하십시오.
Contact:Name: Jane DeveloperEmail: review@yourapp.comPhone: +1 555-0100Test Account:Email: reviewer@test.comPassword: TestPass123!This account does not expire during review.Testing Instructions:1. Log in with test account above2. Tap "Upgrade to Premium" button3. Select "Monthly Premium" subscription4. Complete purchase (no charge in sandbox)5. Verify premium features unlockNote: Subscription pricing is clearly shown before purchase.Cancellation instructions are in Settings > Account.

__CAPGO_KEEP_2__: __CAPGO_KEEP_0__ 주말 및 공휴일 __CAPGO_KEEP_1__ 주말 리뷰가 처리되지 않음 급여 처리 중요한 버그 수정에만 사용 가능 (App Store Connect에서 요청)
App Store Connect에서 볼 수 있는 일반적인 상태
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
__CAPGO_KEEP_2__
2026 제출 초점현재 초점 영역
현재 초점 영역1. 구독 명확성
- 비교 가능한 구독 플랜
- 비용이 저렴한 옵션을 숨기지 않는 '암흑 패턴'
- 다운그레이드/업그레이드 경로가 명확해야 함
2. 메타데이터 정확성
- 스크린샷은 검토 중인 빌드와 일치해야 함
- 아이패드 지원이 활성화된 경우 아이패드 스크린샷이 필요함
- 제출 전에 지원 URL 및 개인 정보 정책이 이미 활성화되어야 함
3. 개인 정보 및 검토 세부 정보 품질
- SDKs에서 실제로 수집하는 것과 일치하는 개인 정보 공개 내용이 있어야 합니다.
- 앱 리뷰 연락처 정보 및 메모는 첫 제출 시 완전해야 합니다.
- 데모 자격증명은 리뷰 기간 동안 유효해야 합니다.
4. 제출 준비
- 애플은 최소 SDK 요구 사항을 정기적으로 업데이트하므로, 현재 마감일을 확인하기 전에 릴리즈 빌드를 업로드하기 전에 확인하십시오.
- 테스트 플라이트는 리뷰어 경로를 정확하게 검증하기 전에 제출하기에 가장 안전한 곳입니다.
자연스러운 구매 플러그인最佳 관행
제목: “자연스러운 구매 플러그인最佳 관행”적절한 오류 처리를 구현하십시오.
제목: “적절한 오류 처리를 구현하십시오.”import { NativePurchases, PURCHASE_TYPE } from '@capgo/native-purchases';
async function handlePurchase(productId: string) { try { const transaction = await NativePurchases.purchaseProduct({ productIdentifier: productId, productType: PURCHASE_TYPE.SUBS, });
// Success await validateReceiptOnServer(transaction.receipt); showSuccess('Subscription activated!'); unlockFeatures();
} catch (error: any) { // Handle specific error cases if (error.code === 'USER_CANCELLED') { // User cancelled - don't show error console.log('Purchase cancelled by user'); } else if (error.code === 'PAYMENT_PENDING') { showInfo('Payment is pending. Please check back later.'); } else if (error.code === 'PRODUCT_ALREADY_PURCHASED') { // Restore instead await NativePurchases.restorePurchases(); } else { // Show user-friendly error showError('Unable to complete purchase. Please try again.'); } }}로딩 상태를 표시하십시오.
Display Loading States를 표시하는 방법function PurchaseButton({ productId }: { productId: string }) { const [loading, setLoading] = useState(false);
const handlePurchase = async () => { setLoading(true); try { await NativePurchases.purchaseProduct({ productIdentifier: productId }); } finally { setLoading(false); } };
return ( <button onClick={handlePurchase} disabled={loading}> {loading ? 'Processing...' : 'Subscribe Now'} </button> );}약관을 명확하게 표시
약관을 명확하게 표시하는 방법function SubscriptionTerms() { return ( <div className="terms"> <p> Subscription automatically renews unless cancelled at least 24 hours before the end of the current period. </p> <p> Your account will be charged for renewal within 24 hours prior to the end of the current period. </p> <p> Subscriptions may be managed by the user and auto-renewal may be turned off in Account Settings after purchase. </p> <p> <a href="/terms">Terms of Service</a> | <a href="/privacy/">Privacy Policy</a> </p> </div> );}애플에서 앱을 거부한 경우
애플에서 앱을 거부한 경우거부를 해결하는 방법
거부를 해결하는 방법-
거부를 읽어보세요
- 특정 지침을 확인하세요 (예: 3.1.1, 5.1.1)
- 정확하게 이해하세요
-
__CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
-
__CAPGO_KEEP_0__
Thank you for your feedback. I have addressed the issue:Issue: Subscription pricing not clear upfrontFix: Added explicit pricing display on subscription selectionscreen showing "$9.99/month" before purchase button. Also addedcancellation instructions on the same screen.The changes are in this submission and can be tested using theprovided test account. -
__CAPGO_KEEP_0__
- __CAPGO_KEEP_0__
- 보통 24시간 이내
__CAPGO_KEEP_0__
청구 절차청구 절차

- App Store Connect에서 'Appeal'을 클릭하세요.
- 증명이 명확해야 합니다.
- 준수하는 화면 캡처
- 특정 지침에 대한 참조
- 요구 사항을 충족하는 방법에 대한 설명
- 업무적인 사실에 기반한 표현
- 기능이 찾기 어려울 때 테스트 계정 포함

추가 자료
추가 자료란지원
제목 ‘지원’문제가 해결되지 않는 경우:
- 리뷰를 네이티브 구매 문서
- 확인 일반적인 문제 해결 방법
- __CAPGO_KEEP_0__의 개발자 지원팀으로 연락하세요. (Apple Developer Support)
전문적인 도움을 필요로 합니까?
전문적인 도움을 필요로 합니까?앱 리뷰에 어려움을 겪고 있거나 개인화된 지원이 필요하신가요? 팀과 함께 상담 전화 예약하세요. 다음과 같은 전용 지원과 함께:
- IAP 구현 검토 및 최적화
- 앱 스토어 리뷰 준비 및 전략
- 제출 확인 목록 검토
- 반려 해결 및 항소
- 완전한 테스트 및 유효성 검사
우리의 전문가들은 수백 개의 앱이 리뷰를 통과하는 데 성공했습니다!
iOS App Store Review Guidelines를 따라서 계속하세요.
Section titled “iOS App Store Review Guidelines를 따라서 계속하세요.”iOS App Store Review Guidelines를 따라서 계속하세요를 사용하는 경우 iOS App Store Review Guidelines를 따라서 계속하세요 iOS App Store Review Guidelines를 따라서 계속하세요를 계획하고 스토어 승인 및 배포를 위해 연결하세요. @capgo/native-purchases를 사용하여 native capability을 사용하세요. @capgo/native-purchases에서 @capgo/__CAPGO_KEEP_1__-in-app-review를 사용하여 native capability을 사용하세요. @capgo/capacitor-in-app-review를 사용하여 native capability을 사용하세요. @capgo/capacitor-in-app-review에서 @capgo/capacitor-native-market을 사용하세요. @capgo/capacitor-native-market을 사용하여 native capability을 사용하세요. @capgo/capacitor-native-market에서 @capgo/capacitor-in-app-review을 사용하여 native capability을 사용하세요. @capgo/capacitor-native-market에서 @capgo/capacitor-in-app-review을 사용하여 native capability을 사용하세요. implementation 세부 사항은 @capgo/capacitor-native-market 에서 찾을 수 있습니다. Using @capgo/capacitor-native-market native 기능은 Using @capgo/capacitor-native-market 에서 사용할 수 있습니다.