Un auth guard alrededor de todo
Los proyectos base de Lovable, Bolt y v0 suelen envolver todo el router en una ruta protegida, así que la primera pantalla de la app es un formulario de inicio de sesión.
Rechazo en App Store
Si tu app obliga a crear una cuenta antes de poder usar funciones que no tienen nada que ver con una cuenta, Apple la rechaza por la 5.1.1(v). Los creadores de apps con IA ponen por defecto toda la app detrás de un login, así que es algo habitual. La solución: abre las partes que no necesitan cuenta, mantén el login para las que sí la necesitan y deja claro en las notas de revisión qué es cada cosa.
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
La parte de la Directriz 5.1.1 sobre el inicio de sesión con cuenta dice que una app sin funciones significativas basadas en una cuenta debe permitir que se use sin iniciar sesión. Las apps no pueden exigir información personal para funcionar salvo que sea directamente relevante para la funcionalidad principal o lo exija la ley. Las apps que permiten crear una cuenta deben ofrecer la eliminación de la cuenta dentro de la app. Y si la función principal no está ligada a una red social concreta, la gente debe poder usar la app sin iniciar sesión en una; obtener datos del perfil, compartir e invitar a amigos no cuentan como funciones principales.
Las demás partes de la 5.1.1 (política de privacidad, textos de propósito, minimización de datos) se tratan en la guía de privacidad de la 5.1.1. Esta página trata del muro de login.
La nota suele decir que la app exige a los usuarios registrarse o iniciar sesión antes de poder acceder a funciones que no se basan en una cuenta, y sugiere permitir el uso libre de esas funciones y exigir el registro solo para las específicas de la cuenta. Una variante frecuente dice que la app exige información personal, como un número de teléfono, la fecha de nacimiento o el género, que su función principal no necesita. Otra variante tiene que ver con las compras: la app obliga a registrarse antes de comprar In-App Purchases que no se basan en una cuenta.
| Función | ¿Basada en una cuenta? | ¿Detrás de un login? |
|---|---|---|
| Explorar un catálogo, leer artículos, ver recetas | No | No, hazlo público |
| Calculadoras, conversores, generadores, una demo de IA gratuita y limitada | No | No, o con una sesión de invitado |
| Favoritos, historial, sincronización entre dispositivos | Sí | Sí; pídelo cuando el usuario guarde algo |
| Publicar, chatear, seguir a otros usuarios | Sí | Sí |
| Pedidos, reservas, facturas, espacios de trabajo de equipo | Sí | Sí |
| Una app para miembros, empleados o clientes actuales de un servicio | Sí, la cuenta es lo esencial | Sí; explícalo en las notas de revisión y facilita una cuenta demo |
| Una suscripción que también funciona en la web | Sí, multiplataforma | Sí; indícalo en las notas de revisión |

Mi WebView de iOS finalmente está aprobada. ¡Gracias!
Los proyectos base de Lovable, Bolt y v0 suelen envolver todo el router en una ruta protegida, así que la primera pantalla de la app es un formulario de inicio de sesión.
La página de marketing es la parte pública de tu sitio web, así que mucha gente pone en webviewurl el área de la app, que redirige directamente al login.
Los campos de teléfono, fecha de nacimiento, género y empresa generados "por si acaso" son información personal que la función principal no necesita.
Ofrecer únicamente "Continuar con Google" significa que nadie entra sin una cuenta social. Añade login por correo o Sign in with Apple, y plantéate una vía para invitados.
Repasa cada pantalla. Normalmente, descubrir y leer es público; guardar, publicar, las compras ligadas a la cuenta y los datos personales son solo para cuentas.
Pon en webviewurl de Config.swift una página que funcione sin login, como yourdomain.com/app o /explore, no /login. Cambiarlo requiere una compilación nueva.
Las rutas públicas se muestran a todo el mundo; solo las rutas de la cuenta redirigen al login (código más abajo). Pon "Iniciar sesión" en la cabecera o en el primer guardado, no delante del contenido.
Si los invitados deben poder guardar su progreso, usa los inicios de sesión anónimos de Supabase, la autenticación anónima de Firebase o el almacenamiento local, y convierte al invitado en una cuenta completa al registrarse para que no se pierda nada. Protege los registros anónimos con un captcha y con row-level security; la lista de comprobación de Supabase recoge los ajustes.
Correo y contraseña (o Sign in with Apple), más un nombre si de verdad lo necesitas. Pide todo lo demás más adelante, cuando una función lo necesite, y marca los campos opcionales como opcionales.
Crear cuentas sigue exigiendo la eliminación dentro de la app (guía de eliminación de cuenta), y las funciones con cuenta siguen necesitando una cuenta demo para la revisión (guía de la cuenta demo). Mantén deletecache en false para que los usuarios con sesión iniciada sigan conectados.
Ejemplo con React Router, tal como lo generan la mayoría de los creadores con IA, más una sesión de invitado de Supabase para guardar.
// Antes (proyecto base típico de IA): todas las rutas detrás de <RequireAuth />
// <Route element={<RequireAuth />}> ...todas las rutas... </Route>
// Después: descubrimiento público, funciones de la cuenta detrás del guard
<Routes>
<Route path="/" element={<Explore />} /> {/* no necesita cuenta */}
<Route path="/recipes/:id" element={<Recipe />} /> {/* no necesita cuenta */}
<Route path="/login" element={<Login />} />
<Route element={<RequireAuth />}>
<Route path="/favorites" element={<Favorites />} /> {/* basada en la cuenta */}
<Route path="/settings/account" element={<Account />} />
</Route>
</Routes>
// Un invitado toca "Guardar": inicia una sesión anónima y conviértela más tarde
async function saveAsGuest(recipeId) {
const { data } = await supabase.auth.getSession();
if (!data.session) await supabase.auth.signInAnonymously();
await supabase.from("favorites").insert({ recipe_id: recipeId }); // user_id toma por defecto auth.uid()
showBanner("Guardado. Crea una cuenta gratuita para tener tus favoritos en todos tus dispositivos.");
}
// Conversión posterior: supabase.auth.updateUser({ email }) convierte al usuario anónimo en uno permanenteDeja que la IA haga la reestructuración, pero revisa su lista de rutas públicas y solo para cuentas antes de que cambie el código.
Reestructura la autenticación para la Directriz 5.1.1(v) del App Store. 1) Enumera todas las rutas y clasifícalas como públicas (funcionan sin cuenta) o solo para cuentas (guardar, publicar, compras ligadas a la cuenta, datos personales). Enséñame la lista antes de cambiar el código. 2) Quita el auth guard global y aplícalo solo a las rutas solo para cuentas. 3) Convierte / en una página de inicio pública que muestre el contenido principal sin login. 4) Cuando un invitado intente una acción solo para cuentas, muestra una hoja amable: "Crea una cuenta gratuita para guardar esto", con Sign in with Apple, registro por correo y una opción "Ahora no". 5) Usa el inicio de sesión anónimo de Supabase para los invitados que necesiten guardar estado, y conviértelos en una cuenta permanente al registrarse sin perder datos. Mantén row-level security en todas las tablas. 6) Reduce el formulario de registro a correo, contraseña y un nombre opcional. Quita teléfono, fecha de nacimiento y género salvo que una función los necesite. 7) Mantén el flujo actual de Eliminar cuenta en los ajustes.
La opción A si abriste la app; la opción B si el login es realmente imprescindible. En ambos casos, sé concreto. La plantilla se queda en inglés porque App Review lee en inglés.
Hello App Review team, Thank you for reviewing [App name] [version] ([build]). [Option A: guest access added] Users can now [browse / read / use the calculator] without an account. The app opens on [Explore], and an account is requested only when a user wants to [save favorites / post / sync across devices], which are account-based features. Sign-up now asks only for email and password, or Sign in with Apple. [New build: [number].] [Option B: login is essential] [App name] is a [client portal / team workspace] for [existing customers of X / members of Y]. Every feature works on the user's own account data: [list the main features]. There is no content that could be shown without an account. Accounts are created [at sign-up in the app / by the customer's organization]. A demo account is provided in App Review Information. Account deletion is available in [Settings > Account > Delete account]. Best regards, [Name], [email]
webviewurl apunta a una página pública, no a la pantalla de login.No, si cada función trabaja con los datos de la propia cuenta del cliente. Explícalo en las notas de revisión y facilita una cuenta demo. Una página pública que muestre qué hace la app para quienes todavía no son clientes es un buen extra.
No hay una ubicación fija. Lo que importa es que un usuario nuevo llegue a las funciones que no requieren cuenta sin registrarse. Una página de inicio pública con un botón de "Iniciar sesión" en la cabecera suele ser la solución más limpia.
Cuando la compra está ligada a la cuenta, por ejemplo una suscripción que también desbloquea la versión web, sí; indícalo en las notas de revisión. Para las compras que solo funcionan en el dispositivo, los revisores esperan que el registro sea opcional.
Puede serlo: si tu función principal no tiene nada que ver con Google, la gente debe poder usar la app sin iniciar sesión con Google. El acceso como invitado o el login por correo lo resuelven, y la Directriz 4.8 pide además Sign in with Apple o una opción similar junto a Google.
La obligación de eliminar cuentas se aplica a las cuentas que crean los usuarios. Para las sesiones anónimas, una opción de "Borrar mis datos" en los ajustes es una buena práctica, y en cuanto un invitado pasa a tener una cuenta completa, se aplica el flujo normal de Eliminar cuenta.
El mismo resultado, con distinta cantidad de trabajo por tu parte. Las tres incluyen la garantía de aprobación y soporte humano 24/7.
$109 por plataforma, pago único
La licencia de WebViewGold: un proyecto de Xcode o Android Studio listo para usar. Pega tu URL, define nombre e icono, activa funciones, compila y envía. Actualizaciones gratuitas para siempre.
Ver planes en la página principal$349 por licencia, complemento de pago único
Sin Mac, sin Xcode, sin Android Studio: configura en el navegador, compilamos ambas apps en la nube y las entregamos a App Store Connect y a Play Console.
Cómo funciona el Cloud Builder Prueba la demo gratuita$698 por plataforma $798
Envíanos tu URL y tu icono. Nuestro equipo configura, compila y entrega tu app en 72 horas, en marca blanca y con los proyectos fuente. Ambas plataformas por $1,158.
Detalles del Full Service Con tecnología dePrecios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.
Garantía de aprobación en App Store & Google Play – o te devolvemos el dinero en 14 días
¿Prefieres delegarlo? Full Service: configuramos, compilamos y entregamos en 72 horas, desde $698 por plataforma. ¿Preguntas? Chatea con nosotros 24/7.
Los reembolsos se conceden bajo las condiciones indicadas en nuestras FAQ: un rechazo por motivos ajenos al contenido por parte de Apple y/o Google, reclamado dentro de los 14 días posteriores a la compra.