Control de versión y actualización forzada para tu app de Claude Code
Tu app web de Claude Code se actualiza con cada publicación, pero la carcasa nativa que la rodea solo cambia cuando los usuarios instalan una nueva versión desde la tienda. Cuando una función nueva depende de una carcasa más reciente, o cuando los builds antiguos apuntan a una URL que vas a retirar, necesitas saber quién se ha quedado atrás. WebViewGold le pasa a tu app web la versión instalada; unas pocas líneas de código lo convierten en un banner discreto o en una pantalla de actualización obligatoria.
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
CClaude Code
Actualización forzada y control de versiónYa en tu bolsillo
App Store · Google Play Aprobada
Cuándo una versión antigua de la app causa problemas de verdad
Los despliegues web llegan a todas las versiones instaladas en la siguiente carga de página. Solo los cambios en la carcasa nativa dejan atrás a los usuarios, y estos son los tres que importan:
Una función web necesita una carcasa más reciente
Activas las compras in-app, el inicio de sesión biométrico o un nuevo proveedor de push en la versión 1.3. Los usuarios de la 1.2 ven el botón, pero el esquema de URL que hay detrás no hace nada en su build. Oculta o sustituye la función en las versiones antiguas.
El build antiguo carga una URL que vas a retirar
La URL de inicio está compilada dentro de la app. Pasar de un subdominio de la herramienta a tu propio dominio, o a un nuevo hosting, deja las instalaciones antiguas en la dirección vieja. Mantén una redirección y usa el control de versión para llevar a la gente al nuevo build.
Un cambio incompatible en el backend o el inicio de sesión
Cambias de proveedor de autenticación, de dominios de redirección de OAuth o de gestión de enlaces, y solo el nuevo build tiene los ajustes nativos correspondientes (Social Login Helper, Universal Links, listas de URLs). Una pantalla de actualización es más amable que un inicio de sesión que falla sin decir nada.
Prompt para Claude Code
Pega esto en Claude Code para implementar la parte de la web app. Revisa el resultado, publica y luego prueba dentro de la app WebViewGold.
Prompt para Claude Code
Lee https://www.webviewgold.com/llms-full.txt (secciones App Version Check API). La app web funciona dentro de WebViewGold; su user agent contiene "WebViewGold-iOS" o "WebViewGold-Android", y versionNumber contiene la versión instalada. Los proyectos nativos están en ./ios-app y ./android-app.
1. Pon autoInjectVariable = true en Config.swift y AUTO_INJECT_VARIABLES = true en Config.java.
2. Añade un control de versión a la app web: espera hasta 3 segundos a versionNumber, obtén minimum, latest y storeUrl por plataforma de un endpoint del backend, compara numéricamente, muestra una página de actualización a pantalla completa por debajo de la mínima y un banner por debajo de la última, y deja pasar al usuario ante cualquier error.
3. Añade tests de Playwright que inyecten valores de versionNumber por debajo, entre y por encima de los umbrales, más una ejecución sin la variable.
4. Sube la versión y el número de build de iOS y versionName y versionCode de Android para el próximo lanzamiento.
5. Añade a CLAUDE.md una checklist de lanzamiento: sube la mínima solo cuando ambas versiones estén publicadas en las tiendas y cualquier lanzamiento por fases esté al 100 por ciento.
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
Cómo funciona el control de versión de WebViewGold
El lado nativo solo informa de la versión; la regla vive en tu backend.
Expón la versión a tu app web
Pon autoInjectVariable en true en Config.swift y AUTO_INJECT_VARIABLES en true en Config.java. WebViewGold proporciona entonces versionNumber (la versión que ven los usuarios, como 1.4.0) y bundleNumber (el número de build) como variables de JavaScript. Sin la inyección automática, navega una vez a getappversion:// y lee las mismas variables.
Publica una regla de versión desde tu backend
Guarda en tu backend la versión mínima admitida y la última versión por plataforma: una tabla pequeña, un archivo JSON o una entrada de configuración remota. Así, cambiar la regla no requiere una publicación en la tienda, y lo ideal es que ni siquiera requiera un despliegue.
Compara numéricamente, no como texto
Como cadenas de texto, "1.10.0" queda antes que "1.9.0". Divide por los puntos y compara cada parte como número, o compara números de build si los mantienes como enteros simples y crecientes.
Sugiere o bloquea
Por debajo de la última versión: un banner que se puede cerrar. Por debajo de la mínima: una página a pantalla completa de "Actualización necesaria" con un único botón a la ficha de la tienda. En un navegador normal, o cuando la versión es desconocida, no muestres nada.
Abre la app de la tienda, no una página web de la tienda
Enlaza a https://apps.apple.com/app/idYOUR_APPLE_ID y https://play.google.com/store/apps/details?id=your.package.name, y añade apps.apple.com y play.google.com a los hosts que siempre salen de la app (safariwhitelist en iOS, BROWSER_WHITELIST en Android), para que el sistema abra la App Store o Play Store en lugar de una página web dentro del WebView.
El control de versión en JavaScript
Llámalo una vez tras el primer renderizado en tu app de Claude Code. Espera brevemente a la variable inyectada, deja pasar al usuario ante cualquier error (fail open) y solo bloquea cuando tu backend lo indica. Usa tokens de user agent distintos por plataforma, por ejemplo "WebViewGold-iOS" en useragent_iphone / useragent_ipad y "WebViewGold-Android" en USER_AGENT:
javascript
const ua = navigator.userAgent;
const inApp = ua.includes("WebViewGold");
const platform = ua.includes("WebViewGold-Android") ? "android" : "ios";
function compareVersions(a, b) {
const pa = String(a).split(".").map(Number);
const pb = String(b).split(".").map(Number);
for (let i = 0; i < Math.max(pa.length, pb.length); i++) {
const d = (pa[i] || 0) - (pb[i] || 0);
if (d !== 0) return d < 0 ? -1 : 1;
}
return 0;
}
// autoInjectVariable / AUTO_INJECT_VARIABLES = true proporciona versionNumber;
// si no, asigna window.location.href = "getappversion://" una vez antes de consultar
function waitForVersion(ms = 3000) {
return new Promise((resolve) => {
const start = Date.now();
(function poll() {
if (typeof versionNumber !== "undefined") return resolve(String(versionNumber));
if (Date.now() - start > ms) return resolve(null);
setTimeout(poll, 100);
})();
});
}
async function checkAppVersion() {
if (!inApp) return; // navegador: nada que hacer
const installed = await waitForVersion();
if (!installed) return; // desconocida: dejar pasar
const rule = await fetch("/api/app-version?platform=" + platform)
.then((r) => (r.ok ? r.json() : null)).catch(() => null);
if (!rule) return; // backend inaccesible: dejar pasar
if (compareVersions(installed, rule.minimum) < 0) showUpdateRequired(rule.storeUrl);
else if (compareVersions(installed, rule.latest) < 0) showUpdateBanner(rule.storeUrl);
}
Regla de ejemplo: mínima 1.3.0, última 1.4.0
Instalada
Resultado
Lo que ve el usuario
1.4.0 o posterior
Al día
Nada
De 1.3.0 a 1.3.x
Por debajo de la última
Un banner que se puede cerrar: "Hay una nueva versión disponible"
1.2.x o anterior
Por debajo de la mínima
Una página a pantalla completa que explica el motivo, con un botón a la tienda y un contacto de soporte
Navegador, vista previa o versión desconocida
Sin datos
Nada: se deja pasar (fail open)
Errores que dejan a los usuarios fuera
Subir la versión mínima demasiado pronto. Espera a que el nuevo build esté publicado en ambas tiendas. Durante un lanzamiento por fases en Google Play, los usuarios que quedan fuera del porcentaje todavía no pueden obtener la actualización; la publicación por fases de Apple solo escalona las actualizaciones automáticas, así que los usuarios de iPhone pueden actualizar manualmente desde el primer momento.
Bloquear el build que está en revisión. App Review instala tu build más reciente, así que una comparación correcta nunca lo bloquea. Una con errores (comparación de cadenas, detección de plataforma incorrecta) le muestra al revisor un callejón sin salida y provoca un rechazo por la directriz 2.1.
Bloquear ante errores. Si falta la variable, la petición agota el tiempo de espera o el teléfono está sin conexión, deja entrar al usuario. Un muro de actualización que aparece por error es peor que una versión antigua.
Usarlo para cambios web. Los despliegues web ya llegan a todos. Solo los cambios nativos justifican una actualización; consulta qué requiere una actualización en la tienda.
Sin explicación. Una frase sobre por qué importa la actualización y un contacto de soporte funcionan mejor que un simple "Actualizar ahora", y la pantalla no debe esconderse detrás de un inicio de sesión.
Preguntas frecuentes
¿WebViewGold fuerza las actualizaciones por sí solo?
No. WebViewGold le indica a tu app web qué versión está instalada (getappversion:// o las variables inyectadas automáticamente versionNumber y bundleNumber). La decisión y la pantalla de actualización viven en tu app web, así que puedes cambiar la regla en cualquier momento sin publicar en la tienda.
¿Necesito actualizaciones forzadas si mi app web se actualiza al instante?
Normalmente no. La mayoría de los cambios llegan a todos los usuarios en la siguiente carga de página. El control de versión importa para los cambios nativos: nuevas funciones nativas, una nueva URL de inicio o un nuevo dominio, cambios en la gestión de enlaces o en los ajustes de inicio de sesión. A muchas apps les basta siempre con el banner discreto.
¿Apple y Google permiten una pantalla de actualización?
Ninguna de las dos tiendas prohíbe pedir a los usuarios que actualicen, y muchas apps grandes lo hacen. Asegúrate de que el build en revisión nunca quede bloqueado, explica con honestidad por qué hace falta la actualización y enlaza solo a tu propia ficha en la tienda.
¿Puedo usar el diálogo de actualización in-app de Google Play?
Google ofrece una API nativa de actualizaciones in-app para apps de Android, pero no forma parte del puente JavaScript documentado de WebViewGold. El control de versión más un enlace a Play Store funciona igual en ambas plataformas y mantiene un único camino de código.
¿Cómo pruebo la pantalla de actualización?
Sube temporalmente en tu backend la versión mínima por encima de tu build de TestFlight o de prueba interna, abre la app, revisa la pantalla y el botón de la tienda, y vuelve a dejarla como estaba. Abre también el sitio en un navegador normal: ahí no debe aparecer nunca esa pantalla.
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.