Obtener la aprobación de su aplicación en App Store requiere prestar especial atención a las pautas de Apple, especialmente al implementar suscripciones y compras dentro de la aplicación. Esta guía cubre todo lo que necesita saber para pasar la revisión en su primer envío.

Requisitos de compra dentro de la aplicación
Section titled “Requisitos de compra dentro de la aplicación”Transparencia de precios (crítica)
Section titled “Transparencia de precios (crítica)”Apple requiere una divulgación clara de los precios antes de cualquier compra:
Elementos imprescindibles:
- Mostrar el precio exacto antes del botón de compra.
- Mostrar frecuencia de facturación (por ejemplo, “$9,99/mes”)
- Indique claramente lo que los usuarios obtienen por su dinero.
- Indique cuándo se producirán los cargos.
Rechazo común:
“El precio de la suscripción debe ser claro y directo”.
:::precaución Consistencia de precios Todos los precios deben coincidir en:
- App Store listado de metadatos
- Pantallas de compra dentro de la aplicación
- Pantallas de gestión de suscripciones.
Even a $1 discrepancy between store listing ($4.99) and app ($5.99) will trigger automatic rejection. :::
Presentación del plan de suscripción
Section titled “Presentación del plan de suscripción”Divulgaciones requeridas:
- All available subscription tiers displayed together
- Comparación clara de funciones por nivel
- No se puede acceder automáticamente a niveles premium mediante trucos de interfaz de usuario
- Instrucciones de cancelación fáciles de localizar

Ejemplo de interfaz de usuario compatible:
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
Section titled “Restaurar compras”Implementación requerida:
Every app with IAP must provide a way for users to restore previous purchases without contacting support.
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>Razones comunes de rechazo
Section titled “Razones comunes de rechazo”1. La aplicación falla o funciona mal
Section titled “1. La aplicación falla o funciona mal”Por qué falla:
- La aplicación falla al iniciarse
- El flujo de compra no se completa
- Las funciones que se muestran en las capturas de pantalla no funcionan
Prevención:
- Prueba en dispositivos reales (no solo simuladores)
- Pruebe todos los flujos de suscripción de un extremo a otro
- Verificar los trabajos de validación de recibos.
- Verificar el manejo de errores de red
2. Discrepancias de metadatos
Section titled “2. Discrepancias de metadatos”Por qué falla:
- Las capturas de pantalla muestran funciones que no están en la versión actual.
- Description mentions functionality that doesn’t exist
- Pricing in metadata differs from in-app pricing

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
Section titled “3. Explicaciones de permisos faltantes”Por qué falla:
- Requesting camera/location/health without explanation
- Permission requests buried multiple screens deep
- Descripciones de permisos vagas o genéricas
Prevención:
Update your Info.plist with clear explanations:
<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. Marketing engañoso
Section titled “4. Marketing engañoso”Por qué falla:
- Afirmaciones como “aplicación número uno del mundo” sin pruebas
- Funciones “ilimitadas” que tienen límites ocultos
- Tácticas de urgencia falsas (“¡Solo quedan 2 lugares!”)


Prevención:
- Sea específico y objetivo en las descripciones.
- Evite los superlativos sin evidencia
- No presiones a los usuarios con una escasez falsa.
5. Proceso de cancelación oculto
Section titled “5. Proceso de cancelación oculto”Por qué falla:
- No se menciona cómo cancelar
- Botón de cancelación oculto u oscurecido
- Multi-step cancellation process without Apple’s native flow
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)
Apple ha endurecido significativamente los requisitos de privacidad en 2025.
### Divulgaciones requeridas
**Para cada permiso:**1. Por qué lo necesitas (caso de uso específico)2. Cuándo se utilizará3. Cómo se almacenan/comparten los datos4. Si es opcional o obligatorio
### Ejemplo: flujo de permisos adecuado
```typescriptasync 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 nutricionales de privacidad
Section titled “Etiquetas nutricionales de privacidad”Asegúrese de que sus App Store etiquetas de privacidad reflejen con precisión:
- Colección de historial de compras.
- Direcciones de correo electrónico (para recibos)
- ID de dispositivos (para prevención de fraude)
- Datos de uso (para análisis)
Las etiquetas de privacidad inexactas serán un motivo de rechazo común en 2025. Audite cuidadosamente su recopilación de datos.
Lista de verificación previa al envío
Section titled “Lista de verificación previa al envío”
-
Pruebe todos los flujos de compra
- Compre cada nivel de suscripción
- Pruebe pruebas gratuitas
- Verificar que las ofertas de lanzamiento se apliquen correctamente
- Prueba de compras de restauración
- Verificar Compartir en familia (si está habilitado)
- Prueba en múltiples dispositivos
-
Verificar la coherencia de los precios
- Verifique que App Store metadatos coincidan con los precios en la aplicación
- Verifique que todas las monedas sean correctas
- Confirmar las duraciones de las pruebas gratuitas que coincidan con las descripciones
- Verifique que los términos de la oferta introductoria sean precisos
-
Revisar todas las copias
- Eliminar texto de marcador de posición
- Verificar que las afirmaciones sean comprobables
- Revisar gramática y ortografía.
- Asegúrese de que las descripciones coincidan con la versión actual.
- Eliminar menciones de la competencia.
-
Permisos de prueba
- Solicitar sólo los permisos necesarios
- Mostrar explicaciones claras antes de realizar la solicitud.
- Pruebe los flujos “Denegar” (la aplicación aún debería funcionar)
- Verifique que las descripciones de Info.plist sean claras
-
Preparar cuenta de prueba
- Crear cuenta de prueba de zona de pruebas
- Documentar las credenciales de inicio de sesión en las notas de revisión de la aplicación.
- Verificar que la cuenta de prueba tenga una suscripción activa
- Pruebe que el revisor pueda completar el flujo de compra.
-
Verificar metadatos
- Las capturas de pantalla coinciden con la interfaz de usuario actual
- El video de vista previa de la aplicación (si corresponde) muestra la versión actual
- La descripción describe con precisión las características
- La clasificación por edades coincide con el contenido.
- Se puede acceder a la política de privacidad desde la aplicación
-
Escriba notas de revisión detalladas
Test Account:Email: reviewer@test.comPassword: TestPass123!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.
Revisar el cronograma
Section titled “Revisar el cronograma”
Revisión estándar: 24-48 horas Períodos pico: 3-5 días (App Store lanzamientos de días festivos) Fines de semana: No se procesan reseñas Revisión acelerada: Disponible para correcciones de errores críticos (solicitud a través de App Store Connect)
Actualizaciones de las directrices de 2025
Section titled “Actualizaciones de las directrices de 2025”Nuevos requisitos
Section titled “Nuevos requisitos”1. Divulgación de funcionalidad de IA Si su aplicación utiliza IA para alguna función, debe:
- Etiquetar claramente el contenido generado por IA
- Explicar cómo se utiliza la IA.
- Medidas de seguridad del contenido del documento.
2. Claridad de suscripción mejorada
- Se requieren comparaciones de planes en paralelo
- No hay “patrones oscuros” que oculten opciones más baratas
- Borrar rutas de degradación/actualización
3. Intensificación de la privacidad
- Se aumentó la aplicación de la Sección 5.1.1.
- Más escrutinio sobre la justificación de la recopilación de datos.
- Requisitos más estrictos para las aplicaciones infantiles.
Qué cambió desde 2024- Ahora se permiten envíos modulares (actualice las páginas de productos de forma independiente)
Section titled “Qué cambió desde 2024- Ahora se permiten envíos modulares (actualice las páginas de productos de forma independiente)”- Los eventos dentro de la aplicación se pueden enviar por separado
- Aplicación más estricta de las IU de suscripción engañosas
- Nueva orientación sobre aplicaciones de criptomonedas/NFT
Mejores prácticas para el complemento de compras nativas
Section titled “Mejores prácticas para el complemento de compras nativas”Implementar un manejo adecuado de errores
Section titled “Implementar un manejo adecuado de errores”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
Section titled “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 los términos claramente
Section titled “Mostrar los términos claramente”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> );}Si tu aplicación es rechazada
Section titled “Si tu aplicación es rechazada”Pasos para resolver
Section titled “Pasos para resolver”-
Lea atentamente el rechazo
- Tenga en cuenta la directriz específica citada (p. ej., 3.1.1, 5.1.1)
- Comprenda exactamente lo que marcó Apple
-
Solucione el problema a fondo
- No se limite a parchear: solucione la causa raíz
- Pruebe la solución exhaustivamente
- Documenta lo que cambiaste
-
Responder en el Centro de resoluciones
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. -
Vuelva a enviarlo de inmediato
- Los nuevos envíos suelen revisarse más rápido
- Generalmente dentro de las 24 horas
Proceso de apelación
Section titled “Proceso de apelación”Si cree que el rechazo es incorrecto:

- Haga clic en “Apelar” en App Store Connect
- Proporcionar pruebas claras:
- Capturas de pantalla que muestran el cumplimiento
- Referencias a directrices específicas
- Explicación de cómo cumples los requisitos.
- Sea profesional y objetivo
- Incluya una cuenta de prueba si es difícil encontrar la funcionalidad

Recursos adicionales
Section titled “Recursos adicionales”- Apple App Store Pautas de revisión
- Pautas de compra dentro de la aplicación
- Prácticas recomendadas de suscripciones
- App Store Connect Ayuda
Soporte
Section titled “Soporte”Si todavía tienes problemas:
- Revisar la documentación de Compras Nativas
- Verifique problemas comunes de solución de problemas
- Comuníquese con Apple Soporte para desarrolladores para obtener aclaraciones sobre las pautas
¿Necesita ayuda de un experto?
Section titled “¿Necesita ayuda de un experto?”¿Tiene problemas con la revisión de la aplicación o necesita asistencia personalizada? Reserve una llamada de consulta con nuestro equipo para obtener asistencia dedicada con:
- Revisión y optimización de la implementación de IAP.
- App Store revisión de preparación y estrategia
- Revisión de la lista de verificación de envío
- Resolución de rechazo y recursos
- Pruebas y validación completas.
¡Nuestros expertos han ayudado con éxito a cientos de aplicaciones a pasar la revisión!