Razones comunes de rechazo para aplicaciones Expo en 2026 - un libro de recetas para pasar comprobaciones de carga automatizadas y revisión humana del App Store cuando se envían binarios de React Native construidos con EAS, no Expo Go.
Tarjeta de referencia rápida - lista para copiar y pegar.
# Compuerta previa a la envío (ejecutar en cada rama de lanzamiento)npx expo-doctornpm audit --audit-level=higheas build --profile production --platform ios# Instalar compilación equivalente de Release en el dispositivo antes de enviareas build --profile preview --platform ios # internal distribution# Prueba: inicio en frío, iniciar sesión, muro de pago, pulsar notificación, enlace universal, cerrar sesión + eliminar cuenta# Enviar con metadatos del repositorio (no de la memoria)eas submit --platform ios --latest# Control de cordura del manifiesto de privacidad - después de prebuildplutil -p ios/ShopApp/PrivacyInfo.xcprivacy 2>/dev/null || \ grep -r NSPrivacyAccessedAPIType ios/
// app.config.ts - preventores de rechazo agrupados juntosexport default { expo: { ios: { bundleIdentifier: "com.example.shopapp", privacyManifests: { NSPrivacyAccessedAPITypes: [ { NSPrivacyAccessedAPIType: "NSPrivacyAccessedAPICategoryUserDefaults", NSPrivacyAccessedAPITypeReasons: ["CA92.1"], }, ], }, infoPlist: { NSCameraUsageDescription: "ShopApp utiliza la cámara para escanear códigos de barras de productos.", NSPhotoLibraryUsageDescription: "ShopApp te permite elegir fotos para tu perfil.", }, }, plugins: ["expo-apple-authentication", "expo-notifications"], },};
Cuándo usarlo:
Primera envío al App Store para una aplicación Expo.
Responder a un correo de rechazo con un número de directriz (4.2, 5.1.1, 2.1, etc.).
Fallos de carga automatizados con ITMS-91053 o cumplimiento faltante.
El producto pregunta "¿podemos enviar este contenedor de WebView / clon de chat de IA?"
Necesitas una lista de verificación antes de eas submit.
Síntoma: "La aplicación ofrece inicio de sesión con Google pero no Iniciar sesión con Apple."
Solución: Añade expo-apple-authentication cuando ofrezcas creación de cuenta con Google/Facebook/correo electrónico-contraseña. Las aplicaciones de solo inicio de sesión sin autenticación de terceros pueden estar exentas - documenta en notas de revisión.
Síntoma: "Los usuarios pueden crear cuentas pero no pueden eliminarlas en la aplicación."
Solución: Configuración → Eliminar cuenta → confirmar → llamar a la API de eliminación del backend. El enlace a eliminación web no es suficiente si la aplicación admite registro en la aplicación.
// Patrón de pantalla de configuración - debe eliminar realmente la cuenta del servidorasync function deleteAccount() { await api.delete("/me"); await signOut(); router.replace("/welcome");}
Síntoma: "La aplicación es principalmente un contenedor de sitio web" o "duplicado de aplicaciones existentes sin diferenciación."
Solución:
Utiliza navegación nativa, caché sin conexión, push, widgets o APIs de plataforma - no un único WebView en pantalla completa para tu sitio de marketing.
Si es híbrida, muestra flujos nativos principales; WebView para documentos de ayuda está bien como secundaria.
Rellena todos los campos en App Store Connect antes de enviar:
Se requiere inicio de sesión: SíNombre de usuario: review@example.comContraseña: <contraseña de demostración rotativa>Notas: Pulsa "Examinar como invitado" en el inicio de sesión para omitir la autenticación. Las notificaciones push requierendispositivo físico - enlaces universales probados en https://shop.example.com/orders/demo.Eliminación de cuenta: Configuración → Cuenta → Eliminar cuenta.
Rota contraseñas de demostración después de cada ciclo de revisión.
Si el backend está restringido geográficamente, proporciona un punto final accesible desde EE.UU. para los revisores de Apple.
Aplicaciones para niños: sin análisis de terceros ni anuncios sin cumplimiento estricto - la mayoría de SDKs de análisis de Expo descalifican la categoría de niños.
Seguimiento (IDFA): expo-tracking-transparency + NSUserTrackingUsageDescription antes de que se inicialice cualquier SDK de seguimiento.
Enviar un cliente de desarrollo por error - iconos incorrectos, expo-dev-menu visible. Solución: perfil production sin developmentClient: true.
Capturas de pantalla de la clase de dispositivo incorrecta - se requieren capturas de iPad si supportsTablet: true. Solución: capturas de pantalla de iPad de 13" o deshabilita deliberadamente la compatibilidad con tabletas.
OTA rompió el lanzamiento después de la revisión - raro pero posible si OTA envía JS roto post-aprobación. Solución: reversión de canal; implementación por fases.
El enlace universal abre Safari en la revisión - fallo de AASA. Solución: encabezados CDN, appID correcto - no "funciona solo en el simulador."
Cadenas de permisos de marcador de posición - "Permitir $(PRODUCT_NAME) acceder a la cámara" dejada como TODO. Solución: copia específica del producto legible por humanos.
Ocultar funciones detrás de geo/IP - La revisión prueba desde EE.UU. Solución: banderas de función activadas para compilaciones de revisión o acceso global.