iOS App Store Review Guidelines for IAP
Copia un prompt de configuración con los pasos de instalación y la guía de markdown completa para este plugin.
Para obtener la aprobación de tu aplicación en el App Store, debes prestar atención cuidadosa a las directrices de Apple, especialmente al implementar compras y suscripciones en la aplicación. Esta guía cubre todo lo que necesitas saber para aprobar la revisión en tu primera presentación.

Antes de Presentar
Título de la sección “Antes de Presentar”Finalizar la configuración de App Store Connect
Configuración de App Store ConnectAsegúrese de que el registro de la aplicación esté completo antes de que Apple revise el flujo de compra.
- Agregue un URL de la política de privacidad en App Store Connect
- Agregue un URL de soporte que conduce a información de contacto real para los usuarios
- Complete el age rating para que la aplicación sea publicable
- Agregue Detalles de contacto de la revisión de la aplicación y notas de revisión claras
- If login es necesario, proporcione un demo cuenta que no expira durante la revisión
Prepáre Escenas de Pantalla Reales
Preparar capturas de pantalla reales- Utiliza capturas de pantalla actuales desde la compilación real en revisión
- Para iPhone,
1290 x 2796(6.7 pulgadas) es el tamaño por defecto más fácil - (6.7 pulgadas) es el tamaño por defecto más fácil de usar
- Tamaños de iPad grandes aceptados actualmente incluyen
2064 x 2752(13 pulgadas) y2048 x 2732(12,9 pulgadas) - No estire pantalla de iPhone para fingir soporte de iPad
Realice un Dry-Run del recorrido del revisor en TestFlight
Sección titulada “Realice un Dry-Run del recorrido del revisor en TestFlight”Ejecute el camino exacto que seguirá Apple en un dispositivo real:
- Instale la última versión desde TestFlight
- Inicie sesión con la cuenta de revisión que planea proporcionar
- Acceda a la paywall sin gestos ocultos ni menús de depuración
- Completa flujos de compra, restauración y gestión de suscripciones
- Verifique que la aplicación siga comportándose correctamente si se deniegan los permisos
Requisitos de Compras en la Aplicación
Sección titulada “Requisitos de Compras en la Aplicación”Transparencia de Precios (Crítico)
Sección titulada “Transparencia de Precios (Crítico)”Apple requiere una transparencia de precios cristalina antes de cualquier compra:
Elementos Obligatorios:
- Mostrar el precio exacto antes del botón de compra
- Mostrar la frecuencia de facturación (por ejemplo, “$9.99/mes”)
- Establecer claramente qué obtienen los usuarios por su dinero
- Indicar cuándo se producirán los cargos
Rechazo Común:
'La tarifa de suscripción debe ser clara y explícita.'
:::advertencia Consistencia de precios Todos los precios deben coincidir en:
- Lista de metadatos de la Tienda de Aplicaciones
- Pantallas de compras en la aplicación
- Pantallas de gestión de suscripciones
Un desacuerdo de $1 entre la lista de tienda ($4.99) y la aplicación ($5.99) desencadenará la rechazo automático.
Presentación del Plan de Suscripción
Sección titulada “Presentación del Plan de Suscripción”Requerimientos de Disclosures:
- Todas las suscripciones disponibles se muestran juntas
- Comparación clara de características por nivel
- No se auto-asigna a niveles premium mediante trucos de interfaz de usuario
- Instrucciones de cancelación fáciles de encontrar

Ejemplo de interfaz de usuario conforme:
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> );}Restaurar compras
Título de sección “Restaurar compras”Implementación requerida:
Cada aplicación con IAP debe ofrecer una forma para que los usuarios restauren sus compras anteriores sin tener que contactar con el soporte.
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>Motivos de rechazo comunes
Título de sección “Motivos de rechazo comunes”1. La aplicación se cae o tiene funcionalidad rota
Sección titulada “1. La aplicación se cae o no funciona correctamente”¿Por qué falla?
- La aplicación se cae al iniciar
- El flujo de compra no se completa
- Features shown in screenshots don’t work
Prevención:
- Prueba en dispositivos reales (no solo simuladores)
- Prueba todos los flujos de suscripción de principio a fin
- Verifica la validación de la factura
- Revisa el manejo de errores de red
2. Incongruencias de metadatos
Sección titulada “2. Incongruencias de metadatos”Por qué falla:
- Screenshots show features not in current build
- La descripción menciona funcionalidades que no existen
- Precios en metadatos difieren de precios en la aplicación

Prevención:
// 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. Explicaciones de permisos faltantes
Sección titulada “3. Explicaciones de permisos faltantes”Por qué falla:
- Solicitar cámara/ubicación/salud sin explicación
- Solicitudes de permisos enterradas en varias pantallas
- Descripciones de permisos vagas o generales
Prevención:
Actualiza Info.plist Copiar al portapapeles
<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. Publicidad Engañosa
“Características ilimitadas” con límites ocultosActualice su
- Descripciones de permisos demasiado vagas para la revisión
- Descripciones de permisos con explicaciones más claras
- Tácticas de urgencia falsas (“Solo quedan 2 plazas!”)


Prevención:
- Sea específico y factual en las descripciones
- Evite superlativos sin evidencia
- No presione a los usuarios con escasez falsa
5. Proceso de cancelación oculto
Título de la sección “5. Proceso de cancelación oculto”Por qué falla:
- No se menciona cómo cancelar
- Botón de cancelación oculto o dificultoso de encontrar
- Proceso de cancelación en varias etapas sin flujo nativo de Apple
Prevención:
// 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();}Privacidad y Uso de Datos (Sección 5.1.1)
Sección titulada “Privacidad y Uso de Datos (Sección 5.1.1)”Apple ha restringido significativamente los requisitos de privacidad en 2025.
Declaraciones Requeridas
Sección titulada “Declaraciones Requeridas”Para Cada Permiso:
- ¿Por qué lo necesita (caso de uso específico)?
- ¿Cuándo se utilizará?
- ¿Cómo se almacena y comparte los datos?
- Ya sea obligatorio o opcional
Ejemplo: Flujo de permisos correcto
Sección titulada "Ejemplo: Flujo de permisos correcto"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';}Etiquetas de nutrición de privacidad
Sección titulada "Etiquetas de nutrición de privacidad"Asegúrese de que las etiquetas de privacidad de App Store reflejen con precisión:
- La recopilación de historial de compras
- Direcciones de correo electrónico (para recibos)
- IDs de dispositivo (para prevención de fraude)
- Datos de uso (para análisis)
Las etiquetas de privacidad inexactas son una razón común de rechazo en 2025. Audite cuidadosamente la recopilación de datos.
Lista de Verificación Pre-Envío
Sección titulada “Lista de Verificación Pre-Envío”
-
Prueba todos los flujos de compra
- Compre cada nivel de suscripción
- Prueba las pruebas gratuitas
- Verifique que las ofertas iniciales se apliquen correctamente
- Prueba la restauración de compras
- Verificar Familiares Compartidos (si habilitado)
- Prueba en múltiples dispositivos
-
Verifique la Consistencia de Precios
- Check App Store metadata matches in-app prices
- Verificar que todas las monedas estén correctas
- Confirm free trial durations match descriptions
- Verifique los términos de la oferta inicial
-
Revisar todos los textos
- Eliminar texto de reemplazo
- Verificar que las afirmaciones sean verificables
- Comprobar la gramática y la ortografía
- Ensure descriptions match current build
- Eliminar menciones a competidores
-
Probar permisos
- Solicitar solo los permisos necesarios
- Mostrar explicaciones claras antes de solicitar permisos
- Test “Deny” flows (app should still work)
- Verifica que las descripciones de Info.plist sean claras
-
Prepara una cuenta de prueba
- Crea una cuenta de revisión que permanezca válida durante la revisión
- Document login credentials in App Review information
- Verifica que el revisor pueda llegar a la pantalla de pago y completar el flujo de compra
- Incluya cuentas adicionales o interruptores de aplicación específicos en el campo Notas si es necesario.
-
Verifica la Metadata
- Pantallas de captura coinciden con la interfaz de usuario actual
- La URL de soporte incluye información de contacto real
- La URL de la política de privacidad está rellena
- Age rating matches the content in the build
- App preview video (if any) shows current version
- La descripción describe con precisión las características
- La política de privacidad está disponible en la aplicación y en la lista de la tienda.
-
Escribe notas de revisión detalladas
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.
Cronograma de revisión
Sección titulada “Cronograma de revisión”
Revisión estándar: 24-48 horas Períodos pico: 3-5 days (App Store holiday releases) Fin de semana: No se han procesado reseñas Revisión acelerada: Disponible para correcciones críticas de errores (solicitar a través de App Store Connect)
Estados comunes que verás en App Store Connect:
Waiting for ReviewIn ReviewPending Developer ReleaseRejected
Enfoque de la presentación de 2026
Sección titulada “Enfoque de la presentación de 2026”Áreas de enfoque actuales
Sección titulada “Áreas de enfoque actuales”1. Claridad de la Suscripción
- Comparaciones de planes lado a lado requeridas
- No se permiten 'patrones oscuros' que ocultan opciones más baratas
- Rutas claras de descenso/ascenso
2. Precisión de los Metadatos
- Screenshots must match the build being reviewed
- Se requieren capturas de pantalla de iPad si se habilita el soporte para iPad
- La URL de soporte y la política de privacidad deben estar ya activas antes de la presentación.
3. Calidad de Detalles de Revisión y Privacidad
- Las declaraciones de privacidad deben coincidir con lo que realmente recopilan sus SDKs
- La información de contacto y notas de la Revisión de Aplicación deben estar completas en la primera presentación
- Las credenciales de demo deben mantenerse válidas durante toda la ventana de revisión
5. Preparación de la Solicitud
- Apple actualiza regularmente los requisitos mínimos de SDK, así que confirme la fecha límite actual antes de subir un paquete de lanzamiento
- TestFlight es el lugar más seguro para verificar el camino exacto del revisor antes de enviar
Mejores Prácticas para el Plugin de Compras Nativas
Sección titulada “Mejores prácticas para el plugin de compras nativas”Implementar Manejo de Errores Propio
Título de la sección “Implementar Manejo de Errores Propio”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.'); } }}Mostrar Estados de Carga
Título de la sección “Mostrar Estados de Carga”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> );}Mostrar Términos de Manera Clara
Mostrar Términos de Manera Clarafunction 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> );}Si tu aplicación es rechazada
Sección titulada “Si tu aplicación es rechazada”Pasos para Resolver
Sección titulada “Pasos para Resolver”-
Lee la rechazación cuidadosamente
- Nota la guía específica citada (por ejemplo, 3.1.1, 5.1.1)
- Entiende exactamente qué Apple marcó
-
Corrige el problema de manera exhaustiva
- No solo parche - corrige la causa raíz
- Prueba la corrección exhaustivamente
- Documente los cambios realizados
-
Responder en el Centro de Resolución
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. -
Reenviar con prontitud
- Las reenviaciones suelen ser revisadas más rápido
- Normalmente dentro de 24 horas
Proceso de Apelación
Sección titulada “Proceso de Apelación”Si cree que la rechazación es incorrecta:

- Haga clic en “Apelar” en App Store Connect
- Proporcionar evidencia clara:
- Capturas de pantalla que muestran la conformidad
- Referencias a pautas específicas
- Explicación de cómo cumple con los requisitos
- Sé profesional y factual
- Incluye una cuenta de prueba si la funcionalidad es difícil de encontrar

Recursos adicionales
Sección titulada “Recursos adicionales”- Apple App Store Review Guidelines
- Directrices de compras en la aplicación
- Mejores prácticas de suscripciones
- Ayuda de App Store Connect
- Sesiones de captura de pantalla
- Información de versión de la plataforma
Si aún tienes problemas:
- Revisa Documentación de compras nativas
- Verifica problemas de depuración comunes
- Contacta con el soporte de Apple Developer para aclaraciones de las directrices
Necesitas ayuda experta?
Sección titulada “Necesitas ayuda experta?”Estás luchando con la revisión de la aplicación o necesitas asistencia personalizada? Reserva una llamada de consultoría con nuestro equipo para obtener soporte dedicado con:
- Revisión y optimización de la implementación de IAP
- Preparación y estrategia de revisión de la tienda App Store
- Revisión del checklist de presentación
- Resolución de rechazos y recursos de apelación
- Pruebas y validación completas
Nuestros expertos han ayudado con éxito a cientos de aplicaciones a superar la revisión!
Continúa desde las directrices de revisión de la App Store de iOS para IAP.
Sigue adelante desde las directrices de revisión de la App Store para IAPSi estás utilizando Directrices de la App Store de iOS para IAP conectarla para planificar la aprobación y distribución en la tienda, conéctala con Usando @capgo/compras-nativas para la capacidad nativa en Usando @capgo/compras-nativas Usando @capgo/capacitor-revisión-en-aplicación para el detalle de implementación en Usando @capgo/capacitor-revisión-en-aplicación Usando @capgo/capacitor-revisión-en-aplicación para la capacidad nativa en Usando @capgo/capacitor-revisión-en-aplicación Usando @capgo/capacitor-mercado-nativo para el detalle de implementación en Usando @capgo/capacitor-mercado-nativo, y Usando @capgo/capacitor-mercado-nativo para la capacidad nativa en Usando @capgo/capacitor-mercado-nativo