Saltar al contenido
WebViewGold Del vibe coding a la App Store
Español
Consigue WebViewGold

ChatGPT & Codex

Una auditoría de UI móvil con Codex para apps WebViewGold: área segura, áreas táctiles y los detalles en los que se fijan los revisores

Los rechazos por la Directriz 4.0 y las reseñas de una estrella suelen salir de los mismos pocos píxeles: una cabecera bajo el notch, una barra de pestañas detrás del indicador de inicio, un botón de cerrar diminuto, un campo que hace zoom en la página al tocarlo. Codex puede encontrar la mayoría en tu código y demostrar los arreglos en un navegador headless, mientras que unos pocos ajustes de WebViewGold deciden quién se encarga del área segura. Aquí tienes la auditoría como un flujo de trabajo repetible.

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

Qué hace el revisor con tus pantallas

App Review instala la build en hardware actual, a menudo un iPhone con Dynamic Island y también un iPad, porque las apps de WebViewGold se ejecutan en iPad salvo que lo restrinjas (compatibilidad con iPad para apps web empaquetadas). El revisor recorre los flujos principales con el pulgar, no con un ratón. Cualquier cosa escondida bajo la barra de estado, un botón que necesita tres intentos, un formulario que hace zoom y se queda ampliado o una página que se desplaza hacia los lados da la impresión de "esto es una web", y el rechazo suele citar la Directriz 4.0 Design o la 2.1 (el rechazo por la 4.0 explicado). Google clasifica los mismos problemas como funcionalidad rota.

El objetivo de la auditoría es aburrido a propósito: nada se superpone a la interfaz del sistema, cada control se puede tocar con comodidad, ninguna página se desplaza en horizontal a 320 píxeles, los campos no provocan zoom al enfocarlos y la barra de estado combina con tu cabecera en modo claro y oscuro.

Primero decide quién se encarga del área segura

ConfiguraciónAjustes de WebViewGoldTu CSSIdeal para
WebViewGold mantiene el contenido dentro del área segura (por defecto)iOS: autoAdjustSafeAreaInsets sigue en true; colorea las barras con statusBarBackgroundColor y, para la zona del indicador de inicio, bottombar con bottombarBackgroundColor (hay variantes para el modo oscuro). Android: TRANSPARENT_STATUS_BAR en false y el color de la barra desde colorPrimaryDark en style.xmlSin padding de insets; asegúrate de que ningún componente añada su propio espaciador para el notchLa mayoría de las apps, con el menor esfuerzo
Tu app web dibuja de borde a bordeiOS: transparentStatusBar en true y autoAdjustSafeAreaInsets en false. Android: TRANSPARENT_STATUS_BAR en true y blackStatusBarText a juego con tu cabeceraviewport-fit=cover más env(safe-area-inset-top) y env(safe-area-inset-bottom) en cabeceras fijas, barras de pestañas y paneles; prueba Android en un dispositivoCabeceras a sangre, mapas, contenido multimedia
Barra de pestañas nativaiOS: showNavFooter con FooterBar.json. Android: ENABLE_NAVIGATION_FOOTER con res/menu/menu_drawer.xmlOculta tu propia barra de pestañas web cuando isNativeApp() sea true, o los usuarios verán dosApps con entre tres y cinco secciones principales

Pasada 1: una auditoría headless y de solo lectura

codex exec ejecuta Codex sin la interfaz interactiva; --sandbox read-only significa que puede leer todos los archivos pero no cambiar ninguno, y -o guarda su respuesta final en un archivo. Ejecútalo desde la raíz del repositorio. El segundo comando es opcional y le enseña a Codex lo que muestra el dispositivo: -i adjunta capturas de pantalla al prompt.

bash
# Pasada 1: Codex lee, no cambia nada, y la CLI guarda el informe.
codex exec --sandbox read-only -o ui-audit.md "Lee AGENTS.md. Esta app web se ejecuta dentro
de WebViews nativos de iOS y Android (WebViewGold). Audita cada ruta y cada componente
de layout compartido y SOLO HAZ UN INFORME, no edites nada. Para cada hallazgo:
archivo:línea, gravedad (blocker, major, minor), qué se rompe en un móvil y el arreglo
más pequeño posible. Revisa:
- viewport meta: width=device-width, initial-scale=1, viewport-fit=cover
- elementos fijos o sticky en el borde superior o inferior y cómo gestionan el área segura
- elementos interactivos de menos de 44x44 px CSS, o a menos de 8px entre sí
- tamaño de fuente de input, select y textarea por debajo de 16px (zoom al enfocar en iOS)
- menús, tooltips y acciones que solo funcionan con hover
- layouts con 100vh, desbordamiento horizontal por debajo de 360px de ancho, anchos fijos en píxeles
- modales y paneles sin un botón de cerrar visible
Termina con una tabla resumen por gravedad."

# Opcional: adjunta capturas del dispositivo desde TestFlight o las pruebas internas
codex --sandbox workspace-write -i iphone-home.png,ipad-settings.png "Estas capturas
son de la build de TestFlight. Añade todo lo que se ve aquí y que falta en ui-audit.md."

¡Una forma estupenda de convertir tu web app en una app nativa! Entrega rápida y una manera genial de llevar tus apps a las tiendas sin tener que desarrollar una app nativa completa.

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

Pasada 2: una prueba con Playwright que lo mantiene arreglado

Leer el código encuentra la mayoría de los problemas; un navegador demuestra los arreglos. El prompt de arreglo de abajo pide a Codex que añada esta prueba, y merece la pena mantenerla en la CI. Es estricta a propósito: cuenta con algunos falsos positivos, como enlaces de texto en línea o casillas de verificación, y deja que Codex los añada a la lista de excepciones revisadas en lugar de relajar los umbrales.

javascript
// tests/mobile-ui.spec.js (run: npx playwright test tests/mobile-ui.spec.js)
import { test, expect } from "@playwright/test";

const ROUTES = ["/", "/login", "/settings", "/projects/demo"];
const WIDTHS = [320, 375, 430, 768]; // small phone, phone, large phone, iPad portrait
const ALLOW = ["a.inline-link", "input[type=checkbox]"]; // reviewed exceptions

for (const width of WIDTHS) {
  for (const route of ROUTES) {
    test(route + " at " + width + "px", async ({ page }) => {
      await page.setViewportSize({ width, height: 860 });
      await page.goto(route);

      // 1. No sideways scrolling
      const overflow = await page.evaluate(
        () => document.documentElement.scrollWidth - window.innerWidth);
      expect(overflow, "horizontal overflow in px").toBeLessThanOrEqual(0);

      // 2. Tap targets of at least 44 x 44 CSS px
      const small = await page.$$eval("a, button, [role=button], [role=tab], select",
        (els, allow) => els
          .filter((el) => !allow.some((sel) => el.matches(sel)))
          .filter((el) => { const r = el.getBoundingClientRect();
            return r.width > 0 && (r.width < 44 || r.height < 44); })
          .map((el) => (el.getAttribute("aria-label") || el.textContent || el.tagName)
            .trim().slice(0, 40)),
        ALLOW);
      expect(small, "tap targets under 44px").toEqual([]);

      // 3. No iOS focus zoom: form fields at 16px or more
      const tiny = await page.$$eval("input, select, textarea",
        (els) => els.filter((el) => parseFloat(getComputedStyle(el).fontSize) < 16).length);
      expect(tiny, "form fields under 16px").toBe(0);
    });
  }
}

El prompt de arreglo

Inicia una sesión interactiva con codex --sandbox workspace-write --ask-for-approval on-request. Instalar Playwright y su navegador necesita acceso a la red, así que Codex te pedirá aprobación en ese paso; apruébalo o instala tú Playwright antes. Quédate con la opción A o B de la tabla y borra la otra.

Pégalo en Codex después de la auditoría
Lee AGENTS.md y ui-audit.md. Arregla cada hallazgo blocker y major con el cambio más pequeño que funcione. No rediseñes, no renombres componentes ni cambies colores salvo que un hallazgo lo exija.

Área segura (quédate con una opción y borra la otra):
A) WebViewGold mantiene el contenido dentro del área segura (autoAdjustSafeAreaInsets sigue en true en Config.swift). No añadas padding de área segura; en su lugar, elimina cualquier componente espaciador para el notch.
B) Dibujamos de borde a borde (transparentStatusBar = true y autoAdjustSafeAreaInsets = false en Config.swift, TRANSPARENT_STATUS_BAR = true en Config.java). Añade viewport-fit=cover y da a las cabeceras fijas, las barras de pestañas y los paneles inferiores un padding de max(su padding normal, env(safe-area-inset-top)) o env(safe-area-inset-bottom).

Reglas:
- Elementos interactivos de al menos 44x44 px CSS. Amplía el área táctil con padding o con un pseudoelemento ::before; no escales los iconos. Deja 8px entre elementos vecinos.
- input, select y textarea a 16px o más. No añadas nunca maximum-scale ni user-scalable=no.
- Sustituye 100vh por 100dvh y deja una línea con 100vh antes como alternativa.
- Las interacciones que solo funcionan con hover reciben un equivalente táctil.
- Si la app tiene tema claro y oscuro: cuando cambie el tema e isNativeApp() sea true, navega a statusbarcolor://R,G,B con el color de la cabecera para que la barra de estado nativa lo siga.
- Si activamos la barra de pestañas nativa de WebViewGold (showNavFooter en iOS, ENABLE_NAVIGATION_FOOTER en Android), oculta nuestra barra de pestañas web cuando isNativeApp() sea true.

Después añade Playwright (pregunta antes de instalarlo), un playwright.config con baseURL apuntando a npm run dev y tests/mobile-ui.spec.js, que compruebe el desbordamiento horizontal, las áreas táctiles y el tamaño de fuente de los formularios en [enumera tus rutas principales] a 320, 375, 430 y 768 px. Ejecútalo hasta que pase. Por último, actualiza ui-audit.md con tres listas: arreglado, no arreglado a propósito (y por qué) y pendiente de comprobar en dispositivo.

El flujo de la auditoría

  1. Elige quién se encarga del área segura

    Escoge una fila de la tabla y configúrala en los proyectos de WebViewGold (la documentación del área segura en iOS cubre la barra inferior). Decídelo primero, porque todos los arreglos de CSS dependen de ello.

  2. Ejecuta la auditoría de solo lectura

    La pasada 1 genera ui-audit.md con el archivo, la línea, la gravedad y el arreglo propuesto para cada hallazgo. No cambia nada en el repositorio.

  3. Haz tú el triaje

    Borra los hallazgos con los que no estés de acuerdo y marca las decisiones de diseño deliberadas. Diez minutos aquí evitan que Codex "arregle" tu identidad de marca.

  4. Lanza la sesión de arreglos

    Pega el prompt de arreglo y después usa /review y git diff. La prueba de Playwright tiene que estar en verde antes de desplegar.

  5. Míralo en hardware real

    TestFlight en un iPhone con notch y en un iPad; pruebas internas en un Android pequeño con navegación por gestos y una fuente del sistema grande. Haz captura de todo lo raro y devuélvelo con codex -i. La comprobación de preparación para App Store gratuita detecta lo básico a nivel de URL.

  6. Mantén la barrera de protección

    Deja la prueba de Playwright en la CI y añade a AGENTS.md una regla de revisión para nuevas áreas táctiles pequeñas, de modo que la revisión de código de Codex señale las regresiones en futuros pull requests.

Checklist en dispositivo

  • El texto de la barra de estado se lee bien en modo claro y oscuro; cuando el color de la cabecera cambia con el tema, la app llama a statusbarcolor://R,G,B (o a statusbartextcolor://white / black) para que la barra lo siga (API de Dynamic UI).
  • Nada queda bajo la Dynamic Island o el notch, nada detrás del indicador de inicio, y los paneles inferiores dejan libre la zona de gestos.
  • Cada control funciona al primer toque con el pulgar: botones de icono, botones de cerrar, pestañas, filas de listas.
  • Tocar un campo no hace zoom en la página y el campo enfocado sigue visible por encima del teclado (en Android, INPUT_SCROLL_HELPER puede ayudar).
  • Una fuente del sistema grande en Android no rompe los layouts; limita el escalado del texto con MAX_TEXT_ZOOM si un layout no puede estirarse.
  • iPad en las dos orientaciones: nada de un layout de móvil estirado con líneas interminables.
  • El rebote y el pull-to-refresh se comportan como quieres: preventoverscroll en iOS elimina el efecto elástico, pulltorefresh necesita que esté desactivado y Android usa ENABLE_PULL_REFRESH.
  • El gesto atrás de Android vuelve una página y solo sale de la app donde esperas (EXIT_APP_BY_BACK_BUTTON_HOMEPAGE, EXIT_APP_DIALOG).

Arreglos que crean problemas nuevos

  • Padding doble: padding de insets en el CSS mientras WebViewGold también mantiene el WebView dentro del área segura. Un solo responsable.
  • Eliminar el zoom al enfocar con maximum-scale=1 o user-scalable=no. También bloquea el zoom con dos dedos para quien lo necesita; corrige el tamaño de fuente en su lugar. WebViewGold ofrece preventZoom en iOS, pero piénsalo dos veces antes de usarlo.
  • Layouts a pantalla completa con 100vh que acaban siendo más altos que la zona visible. Usa 100dvh con 100vh como alternativa.
  • Escalar los iconos para llegar a 44 píxeles. Amplía el área táctil con padding; el diseño se queda igual.
  • Menús hover "arreglados" con un retraso de hover más largo. En pantallas táctiles no hay hover; necesitan una acción al tocar.
  • Dejar que la auditoría se convierta en un rediseño. El prompt dice el cambio más pequeño; exígeselo a Codex en la revisión.

Preguntas frecuentes

¿Exige Apple áreas táctiles de 44 por 44 puntos?

Las Human Interface Guidelines de Apple recomiendan al menos 44 por 44 puntos, Material Design recomienda 48 por 48 dp y WCAG 2.2 fija 24 por 24 píxeles CSS como mínimo. Los revisores no miden, pero notan los controles que necesitan varios intentos. Apunta a 44 en iOS y a 48 en Android.

¿Puede Codex ver mi app?

Lee tu código y puede mirar las imágenes que le adjuntes: inicia Codex con -i y una captura de TestFlight o de un dispositivo Android, y pídele que compare la captura con el código. Esa combinación encuentra problemas que ninguna de las dos detecta por separado.

¿Necesito env(safe-area-inset-*) para algo?

Solo si tu app web dibuja de borde a borde, con una barra de estado transparente y el ajuste del área segura de WebViewGold desactivado. Con la gestión por defecto, la página ya está dentro del área segura; solo comprueba en un dispositivo con notch que ningún componente añada un segundo espaciador.

¿Por qué mi app hace zoom cuando toco un campo?

iOS hace zoom en los campos de formulario con un tamaño de fuente inferior a 16 píxeles CSS. Pon los input, select y textarea a 16px o más y el zoom desaparece sin desactivar el zoom con dos dedos.

¿La auditoría debería ejecutarse en cada pull request?

La prueba de Playwright sí; es barata. La auditoría de solo lectura con Codex merece la pena repetirla antes de cada envío a las tiendas o después de un rediseño grande, y una regla de revisión en AGENTS.md permite que la revisión de código de Codex señale los problemas nuevos entre medias.

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.

Ver planes en la página principal

Full Service

$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 de WeSetupYourWebViewApp

Precios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.

¿Listo para lanzar tu app?

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.