Biblioteca de prompts para Codex: de app web a lista para el App Store en ocho tareas
Cada prompt de abajo es una tarea de Codex acotada con una definición de terminado clara, en el orden que más les importa a las tiendas. Ejecútalos de uno en uno en el repositorio: revisa el diff, despliega y pasa al siguiente. Juntos cubren las reglas que hay detrás de casi todos los rechazos de una app basada en web en su primer envío.
Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.
Garantía de aprobación – o te devolvemos el dinero en 14 días
Sin programar
Pago único, actualizaciones gratuitas
Soporte humano 24/7
Hecho en Alemania desde 2014 · ISO 27001
9:41
Tu app
Tu appYa en tu bolsillo
App Store · Google Play Aprobada
Cómo ejecutarlos
Un prompt por sesión o por tarea en la nube. Codex trabaja mejor con un alcance acotado y una forma de comprobarse a sí mismo, y por eso cada prompt termina con un informe o una prueba. Si tienes un AGENTS.md con el contexto WebView, los prompts se acortan; sin él, llevan su propio contexto. Dos prompts dan por hecho que la app nativa se identifica con un marcador de user agent (MYAPPNATIVE en los ejemplos): defínelo una vez en WebViewGold mediante useragent_iphone / useragent_ipad en Config.swift y USER_AGENT en Config.java, añadido al final de la cadena de user agent por defecto.
Los prompts 7 y 8 también necesitan un ajuste nativo: la clave de API y el ID de proyecto de RevenueCat en la configuración de WebViewGold, y la solicitud de push del primer arranque desactivada (askforpushpermissionatfirstrun en iOS, requirePush en Android) para que tu app web pueda preguntar en un momento mejor.
1. Auditoría del diseño móvil
Apple cita la Directriz 4.0 (diseño) y la 2.1 (completitud) cuando el diseño se rompe en los teléfonos; Google lo llama funcionalidad defectuosa.
Prompt 1: auditoría móvil
Audita esta app web para usarla dentro de un WebView nativo de iOS y Android y corrige lo que encuentres. Lista de comprobación: meta viewport con width=device-width y viewport-fit=cover; sin desbordamiento horizontal entre 320px y 1024px; áreas de toque de al menos 44x44px; cabeceras, pies y bottom sheets fijos con relleno env(safe-area-inset-top) y env(safe-area-inset-bottom); campos de entrada con un font-size de 16px o más; sin controles que solo funcionen con hover; imágenes con dimensiones explícitas para evitar saltos de diseño; contraste legible. No rediseñes; haz los cambios mínimos que cumplan la lista. Termina con una tabla de las páginas que revisaste y de lo que cambiaste en cada una.
2. Páginas de política de privacidad y términos
Ambas tiendas exigen una URL de política de privacidad accesible; una ruta dentro de la app también se abre dentro del WebView. Consulta qué debe incluir la política.
Prompt 2: privacidad y términos
Añade dos rutas reales, /privacy y /terms, que se muestren como páginas legibles (no modales), enlazadas desde el pie de página y desde la pantalla de ajustes. Genera la política de privacidad a partir de lo que este código hace realmente: revisa package.json, las rutas de la API y los nombres de las variables de entorno, y enumera cada servicio de terceros que recibe datos de usuarios (base de datos, autenticación, email, analítica, proveedores de IA, pagos, notificaciones push). Usa los huecos [EMPRESA], [DIRECCIÓN] y [EMAIL] para los datos legales. Incluye secciones sobre los datos recopilados, la finalidad, la conservación, la eliminación de la cuenta, los menores, el contacto y la fecha de última actualización. Usa un lenguaje sencillo. No te inventes tratamientos que el código no hace.
Con una buena versión optimizada de su aplicación web, puedes tener una impresionante aplicación móvil en un par de minutos. ¡Además del servicio al cliente es muy agradable y muy útil! ¡Puedo recomendar WebViewgold :-)
Julian Koch · Cofundador de Dueldonkey · CodeCanyon
3. Eliminación de cuenta
La exigen la 5.1.1 de Apple y Google Play en toda app con registro. La eliminación debe hacerse en el servidor con permisos de administrador.
Prompt 3: eliminación de cuenta
Implementa la eliminación de cuenta tal como la exigen el App Store (Directriz 5.1.1) y Google Play. 1) Pantalla de ajustes: un botón Eliminar cuenta con un diálogo de confirmación que explique que la eliminación es permanente. 2) Una función en el servidor que, dado el usuario autenticado, borre todas las filas que le pertenecen y después el usuario de autenticación, usando credenciales de administrador solo en el servidor. 3) Tras el éxito: cierra la sesión y muestra una pantalla de confirmación. 4) Una página pública /delete-account que explique los pasos dentro de la app y ofrezca un contacto por email para quienes ya no tengan la app. 5) Una frase sobre la eliminación en /privacy. Escribe una prueba para la función del servidor si el proyecto tiene pruebas configuradas.
4. Estados de error, vacíos y sin conexión
WebViewGold muestra una pantalla sin conexión nativa cuando el dispositivo no tiene conexión al abrir la app; las peticiones que fallan a mitad de sesión son cosa de tu app web.
Prompt 4: estados de error
Haz que cada pantalla que carga datos resista los fallos. Para cada fetch o consulta: un estado de carga, un estado vacío con un mensaje útil, un estado de error con un botón Reintentar y un tiempo de espera máximo para que la interfaz nunca se quede colgada. Añade un error boundary global con una acción Recargar en lugar de una pantalla en blanco. Vigila navigator.onLine y muestra un banner de sin conexión que desaparezca cuando vuelva la conexión. No te tragues los errores en silencio; regístralos con el logger existente. Enumera cada pantalla que tocaste.
5. Interfaz exclusiva de la app mediante el marcador de user agent
Los revisores notan los restos del sitio web: banners de "Descarga nuestra app", muros de cookies, cabeceras de escritorio. Ocúltalos solo en la app.
Prompt 5: interfaz de la app
Crea src/lib/platform.ts y exporta isNativeApp(), que devuelve true cuando navigator.userAgent contiene el marcador MYAPPNATIVE (la app nativa define este user agent). Después, cuando isNativeApp() sea true: oculta el banner de cookies si no es legalmente obligatorio, oculta los banners de Descarga nuestra app y Abrir en la app, oculta la cabecera de escritorio y la navegación del pie de página en favor de la navegación inferior de la app, y sustituye los enlaces externos al sitio de marketing por rutas de la app. Deja todo igual en los navegadores normales. No ocultes solo con CSS nada que afecte a la carga de datos.
6. Sign in with Apple
Directriz 4.8: si ofreces inicio de sesión con Google o Facebook, ofrece una opción equivalente centrada en la privacidad. WebViewGold gestiona el flujo de Apple automáticamente y el de Google mediante el Social Login Helper.
Prompt 6: Sign in with Apple
Nuestra app ofrece inicio de sesión con Google. La Directriz 4.8 de Apple exige una opción equivalente centrada en la privacidad, así que añade Sign in with Apple a través de nuestro proveedor de autenticación (comprueba cuál usa el código: Supabase, Firebase, Auth.js o Clerk). Añade el botón siguiendo las reglas de nombre y colocación de Apple, con el mismo tamaño y protagonismo que el botón de Google. Gestiona el caso del primer inicio de sesión, en el que Apple devuelve el nombre una sola vez, vincula la identidad de Apple con una cuenta existente con el mismo email cuando el proveedor lo permita, y escribe en SETUP.md la configuración que debo hacer en el proveedor (Service ID, clave, URL de redirección). Mantén funcionando el inicio de sesión con email y contraseña.
7. Compras dentro de la app mediante revenuecat://
Apple 3.1.1: los bienes digitales dentro de la app pasan por la compra dentro de la app. WebViewGold activa RevenueCat con una sola URL; tu servidor concede el entitlement a partir del webhook de RevenueCat. Consulta la configuración de RevenueCat.
Prompt 7: compras dentro de la app
Dentro de la app nativa, los productos digitales deben venderse mediante compras dentro de la app. Encuentra cada lugar donde se vende una suscripción, créditos o una función premium. Cuando isNativeApp() sea true, sustituye el checkout de Stripe por una navegación a revenuecat://purchase?external_id=USER_ID&product=PRODUCT_ID, donde USER_ID es nuestro id de usuario y PRODUCT_ID sale de un mapa de configuración con los identificadores de producto de RevenueCat. Añade a la pantalla de ajustes los enlaces Restaurar compras (restoreinapppurchases://) y Gestionar suscripción (cancelinapppurchase://), solo en la app nativa. Los entitlements debe concederlos nuestro servidor a partir del webhook de RevenueCat, nunca el cliente. Mantén Stripe para los usuarios del navegador. Nunca muestres precios con enlaces de pago externos dentro de la app nativa.
8. Solicitud de push en el momento adecuado mediante registerpush://
Una solicitud de permiso en el primer arranque se rechaza la mayoría de las veces. Pregunta cuando el usuario ya haya visto el valor de la app, con registerpush:// de WebViewGold.
Prompt 8: solicitud de push
Añade una solicitud de notificaciones push que pregunte en el momento adecuado. La app nativa no pregunta en el primer arranque; en su lugar, después de que el usuario complete [primera acción significativa, p. ej. crear su primer proyecto], muestra una breve explicación dentro de la app sobre qué notificaciones recibirá, con un botón Activar que navegue a registerpush:// cuando isNativeApp() sea true, y una opción Ahora no que recordemos. En la pantalla de ajustes, navega a checkNativePushPermissions:// y lee la variable inyectada nativePushEnabled (sondéala unos instantes, porque se define de forma asíncrona) para mostrar el estado actual. En los navegadores, oculta la función por completo. No añadas un service worker de web push.
Prueba las rutas exclusivas de la app nativa en una compilación en un dispositivo real (TestFlight, prueba interna): menú de compartir, solicitud de push, compra, Face ID.
Escribe las notas para la revisión con la cuenta demo y la lista de funciones nativas.
Guarda los prompts: cada nueva petición de función puede terminar con "y respeta las reglas de las tiendas de AGENTS.md".
Preguntas frecuentes
¿Tengo que ejecutar los ocho?
Ejecuta del 1 al 5 en todas las apps. El 6 solo si tienes inicio de sesión de terceros, el 7 solo si vendes bienes digitales y el 8 solo si activas las notificaciones push en WebViewGold.
¿Puedo pegarlos en ChatGPT en lugar de en Codex?
Sí, pero ChatGPT no ve tu repositorio a menos que pegues los archivos. Codex (CLI, extensión del IDE o nube) trabaja sobre el código real, ejecuta las pruebas y te da un diff, que es lo que quieres para estas tareas.
¿Por qué un marcador de user agent en lugar de detectar el WebView?
La detección genérica de WebView no es fiable y falla entre versiones del sistema operativo. Un marcador que defines tú mismo en WebViewGold es determinista y no puede dispararse por error en Safari o Chrome.
¿Y si Codex dice que el proveedor de autenticación no admite Sign in with Apple?
Supabase, Firebase, Auth.js y Clerk lo admiten; normalmente el agente quiere decir que falta la configuración en el proveedor. Sigue las notas que escribió en SETUP.md y vuelve a ejecutar el prompt.
Tres formas de llevar tu app a las tiendas
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.
Hazlo tú mismo
$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.
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.
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.
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.