Saltar al contenido principal
Guía

Creating Mobile Apps with live updates, Quasar and Capacitor.

How to create a mobile app with Quasar, Capacitor and implement live updates.

Créditos del artículo

Martin Donadieu

Escritor

Valeria

Revisor

Jordan

Editor

Creating Mobile Apps with live updates, Quasar and Capacitor.

In este tutorial, crearemos una nueva aplicación web utilizando QuasarDespués de eso, aprenderemos a convertirlo en una aplicación móvil utilizando Capacitor. Si deseas que tu aplicación se vea mejor en móvil.

Con Capacitor, puedes cambiar tu aplicación web de Quasar en una aplicación móvil sin necesitar hacer muchas cosas difíciles o aprender un nuevo método de hacer aplicaciones como lo harías con algo llamado React Native.

Este tutorial te guiará a través del proceso, comenzando con una nueva aplicación de Quasar y luego incorporando Capacitor para moverte al reino de aplicaciones móviles nativas. Además, utilizarás Capgo para enviar actualizaciones en vivo a tu aplicación en segundos.

Sobre Capacitor

CapacitorJS es verdaderamente un cambio de juego! Puedes incorporarlo fácilmente en cualquier proyecto web, y lo envolverá en una vista web nativa, generando el proyecto de Xcode y Android Studio nativo para ti. Además, sus plugins te dan acceso a características de dispositivos nativos como la cámara a través de un puente de JS.

Con Capacitor, obtienes una fantástica aplicación móvil nativa sin ningún setup complicado o curva de aprendizaje empinada. Su API y funcionalidad simplificada lo hacen un placer integrarlo en tu proyecto. Confía en mí, te sorprenderá lo fácil que es lograr una aplicación móvil nativa funcional con Capacitor!

Preparando tu aplicación Quasar

Para crear una nueva aplicación de Quasar, ejecuta el siguiente comando:

npm init quasar

Configuración del Proyecto Quasar

Seleccione la opción "Aplicación con Quasar CLI" luego "Quasar v2".

Para crear una aplicación móvil nativa, necesitamos un exportación de nuestro proyecto. Por lo tanto, incluyamos un script directo en nuestro package.json que se puede utilizar para construir y copiar el proyecto Quasar:

{
  "scripts": {
    // ...
    "build": "quasar build"
  }
}

Después de ejecutar el comando generatedeberías poder ver un nuevo dist carpeta en la raíz de tu proyecto.

Esta carpeta se utilizará por Capacitor más adelante, pero por ahora debemos configurarla correctamente.

Agregar Capacitor a tu Aplicación Quasar

To empaquetar cualquier aplicación web en un contenedor móvil nativo, debemos seguir unos pocos pasos inicialmente, pero luego es tan simple como ejecutar un solo sync comando.

Primero, podemos instalar el Capacitor CLI como una dependencia de desarrollo, y luego configurarlo dentro de nuestro proyecto. Durante la configuración, puede pulsar “enter” para aceptar los valores predeterminados para el nombre y el ID de paquete.

En segundo lugar, debemos instalar el paquete principal y los paquetes relevantes para las plataformas iOS y Android.

Finalmente, podemos agregar las plataformas, y Capacitor creará carpetas para cada plataforma en la raíz de nuestro proyecto:

# Install the Capacitor CLI locally
npm install -D @capacitor/cli

# Initialize Capacitor in your Quasar project
npx cap init

# Install the required packages
npm install @capacitor/core @capacitor/ios @capacitor/android

# Add the native platforms
npx cap add ios
npx cap add android

Inicializar Capacitor

Hasta este punto, deberías poder observar nuevas ios y context: Página/área: Sitio web de marketing de Capgo. Rol: Etiqueta de IU corta o elemento de navegación. Visto en: página trust.astro. Clave de mensaje `y` (Y). carpetas en su proyecto de Quasar.

¡Son proyectos nativos reales!

Para acceder al proyecto de Android más tarde, debe instalar Android Studio. Para iOS, necesita un Mac y debe instalar Xcode.

Además, debe encontrar un archivo capacitor.config.ts en su proyecto, que contiene algunas configuraciones fundamentales Capacitor utilizadas durante la sincronización. La única cosa a la que debe prestar atención es el webDirque debe apuntar al resultado de su comando de compilación. Actualmente, es inexacto.

Para corregir esto, abra el capacitor.config.json archivo y actualice carpeta web:

{
  "appId": "com.example.app",
  "appName": "my-app",
  "webDir": "dist"
}

Puedes probarlo ejecutando los siguientes comandos:

npm run generate
npx cap sync

El primer comando npm run generate solo construirá tu proyecto Quasar y copiará la construcción estática, mientras que el segundo comando npx cap sync sincronizará todos los web code en los lugares adecuados de las plataformas nativas para que puedan ser mostrados en una aplicación.

Además, el comando de sincronización puede actualizar las plataformas nativas e instalar plugins, por lo que cuando instales un nuevo Capacitor plugins es hora de ejecutar npx cap sync de nuevo.

Sin darte cuenta, ya has terminado, así que veamos la aplicación en un dispositivo!

Desarrolla y distribuye aplicaciones nativas

Para desarrollar aplicaciones iOS, necesitas tener Xcode instalado, y para aplicaciones Android, necesitas tener Android Studio instalado. Además, si planeas distribuir tu aplicación en la tienda de aplicaciones, necesitas inscribirte en el Apple Developer Program para iOS y en el Google Play Console para Android.

Si eres nuevo en el desarrollo de aplicaciones móviles nativas, puedes utilizar el Capacitor CLI para abrir fácilmente ambos proyectos nativos:

npx cap open ios
npx cap open android

Una vez que hayas configurado tus proyectos nativos, desplegar tu aplicación a un dispositivo conectado es fácil. En Android Studio, solo necesitas esperar a que todo esté listo, y puedes desplegar tu aplicación a un dispositivo conectado sin cambiar ninguna configuración. Aquí tienes un ejemplo:

android-studio-run

En Xcode, necesitas configurar tu cuenta de firma para desplegar tu aplicación a un dispositivo real en lugar del simulador. Si no lo has hecho antes, Xcode te guía a través del proceso (pero nuevamente, necesitas estar inscrito en el Programa de Desarrolladores). Después de eso, solo necesitas pulsar play para ejecutar la aplicación en tu dispositivo conectado, que puedes seleccionar en la parte superior. Aquí tienes un ejemplo:

xcode-run

¡Felicidades! Has desplegado con éxito tu aplicación web Quasar a un dispositivo móvil. Aquí tienes un ejemplo:

quasar-app-móvil

Pero espera, hay una forma más rápida de hacer esto durante el desarrollo…

Capgo Actualización en vivo

Capgo Actualización en vivo es un servicio que permite a los desarrolladores desplegar actualizaciones a sus aplicaciones móviles sin pasar por el proceso tradicional de subida a la Tienda de Aplicaciones. Esto puede ser una forma conveniente de corregir rápidamente errores o hacer pequeñas actualizaciones a una aplicación sin tener que esperar al proceso de revisión de la Tienda de Aplicaciones.

Integrar Capgo en tu aplicación Quasar es un proceso sencillo que te permite aprovechar el poder de las actualizaciones en vivo en tiempo real. Este guía paso a paso te guiará a través de la integración e implementación de Capgo Actualización en vivo, permitiéndote entregar actualizaciones suaves.

Registra y accede a la consola de Capgo:

Es hora de registrarse y obtener tu clave de API para subir tu primera versión. Comienza por registrándote para una cuenta de Capgo.

Instala el Capgo SDK:

Desde una línea de comandos, directamente en la raíz de tu aplicación Capacitor, ejecuta:

npm i @capgo/capacitor-updater && npx cap sync Para instalar el plugin en tu aplicación Capacitor.

Y luego agrega a tu aplicación este code como reemplazo de CodePush uno:

import { CapacitorUpdater } from '@capgo/capacitor-updater'

CapacitorUpdater.notifyAppReady()

Esto le dirá al plugin nativo que la instalación ha tenido éxito.

Inicia sesión en Capgo CLOUD:

Primero, utilice el all apikey presente en su cuenta para iniciar sesión con el CLI:

`npx @capgo/cli@latest login YOU_KEY`

Agrega tu primera App:

Vamos a empezar creando una aplicación en Capgo Cloud con el CLI.

    npx @capgo/cli@latest app add

Este comando utilizará todas las variables definidas en el archivo de configuración de Capacitor para crear la aplicación.

Sube tu primera versión:

Ejecuta el comando para construir tu code y enviarlo a Capgo con:

npx @capgo/cli@latest bundle upload`

Por defecto, el nombre de la versión será el que se encuentra en tu archivo package.json.

Revisa en Capgo si el build está presente

Puedes incluso probarlo con mi aplicación móvil de sandbox.

Hacer canal predeterminado:

Después de enviar su aplicación a Capgo, necesita hacer su canal predeterminado para que las aplicaciones puedan recibir actualizaciones de Capgo.

npx @capgo/cli@latest channel set production -s default

Configurar la aplicación para validar actualizaciones:

Agregar esta configuración a su archivo JavaScript principal.

import { CapacitorUpdater } from '@capgo/capacitor-updater'

CapacitorUpdater.notifyAppReady()

Hacer un npm run build && npx cap copy para actualizar su aplicación.

Recibir una Actualización en Vivo:

Para que su aplicación reciba una actualización en vivo desde Deploy, necesitará ejecutar la aplicación en un dispositivo o un emulador. La forma más fácil de hacer esto es simplemente usar el siguiente comando para lanzar su aplicación local en un emulador o un dispositivo conectado a su computadora.

  npx cap run [ios | android]

Abra la aplicación, colóquela en segundo plano y abríla de nuevo, deberías ver en los registros que la aplicación realizó la actualización.

¡Felicidades! 🎉 Has desplegado con éxito tu primer Live Update. Esto es solo el comienzo de lo que puedes hacer con las actualizaciones en vivo. Para aprender más, consulta la documentación completa de Live Updates. Documentación de Live Updates.

Usando plugins de Capacitor

Vamos a ver cómo utilizar un plugin de Capacitor en acción, que mencionamos antes. Para hacer esto, podemos instalar un plugin bastante simple ejecutando:

npm i @capacitor/share

No hay nada especial en el plugin de compartir pero de todos modos abre el diálogo de compartir nativo. Para esto ahora solo necesitamos importar el paquete y llamar a la función correspondiente desde nuestra aplicación, así que cambiemos lapágina de inicio de nuestra aplicación share() a esto: Como mencionamos antes, cuando instalamos nuevos plugins, debemos realizar una operación de sincronización y luego volver a desplegar la aplicación en nuestro dispositivo. Para hacer esto, ejecuta el siguiente comando: Reemplazo de __CAPGO_KEEP_0__ con 'Plugins' ya que es el contexto de la página

<template>
  <div>
    <h1>Welcome to Quasar and Capacitor!</h1>
    <button @click="share">Share now!</button>
  </div>
</template>

<script setup lang="ts">
import { Share } from '@capacitor/share';

async function share() {
  await Share.share({
    title: 'Open Youtube',
    text: 'Check new video on youtube',
    url: 'https://www.youtube.com',
    dialogTitle: 'Share with friends'
  });
}
</script>

Reemplazo de __CAPGO_KEEP_0__ con 'Share' ya que es el contexto de la página

npx cap sync

After presionar el botón, puedes ver el diálogo de compartir nativo en acción!

En segundo lugar, puedes hacer que la aplicación se sienta más nativa en iOS y Android con la navegación y las transiciones Capgo y solucionar problemas de diseño comunes de iOS que causan rebosamiento horizontal o áreas de seguridad recortadas.

Interfaz de usuario que se siente nativa con Capgo Navegación y Transiciones Nativas

He trabajado durante años con Ionic para construir aplicaciones de múltiples plataformas, pero integrarla con Quasar es engorrosa y raramente vale la pena cuando ya tienes Tailwind CSS.

Para un sentir móvil nativo en una aplicación Quasar + Capacitor, utiliza plugins Capgo en lugar de kits de interfaz de usuario web solo como Konsta UI:

  • @capgo/capacitor-native-navigation — barra de navegación nativa, barra de pestañas de vidrio líquido en iOS y un estilo de barra de pestañas difuminado en Android. Su router de Quasar mantiene el estado de ruta; el plugin es dueño del navegador nativo.
  • @capgo/capacitor-transiciones — transiciones de página estilo Ionic y retroceso de arrastre de iOS en la capa de WebView, sin adoptar la interfaz de usuario de Ionic.

Instale ambos:

npm add @capgo/capacitor-native-navigation @capgo/capacitor-transitions
npmx cap sync

Configure la navegación nativa con el modo de inserción de CSS para que el contenido web respete las barras nativas:

import { NativeNavigation } from '@capgo/capacitor-native-navigation';

await NativeNavigation.configure({
  contentInsetMode: 'css',
  animationDuration: 360,
  glass: {
    effect: 'liquidGlass',
  },
});

Renderice una barra de pestañas de vidrio líquido (iOS utiliza la renderización propia del sistema; Android utiliza un fondo de vista previa de WebView desenfocado):

await NativeNavigation.setTabbar({
  selectedId: 'home',
  labelVisibilityMode: 'labeled',
  icons: true,
  colors: { dynamic: true },
  tabs: [
    { id: 'home', title: 'Home', icon: { svg: '...' } },
    { id: 'settings', title: 'Settings', icon: { svg: '...' } },
  ],
});

await NativeNavigation.addListener('tabSelect', ({ id }) => {
  router.push(`/${id}`);
});

Agregue transiciones de página nativas en la caja de su aplicación:

<script setup>
import { ref, onMounted } from 'vue';
import { useRouter } from 'vue-router';
import '@capgo/capacitor-transitions';
import { initTransitions, setDirection, setupRouterOutlet } from '@capgo/capacitor-transitions/vue';

initTransitions({ platform: 'auto' });

const router = useRouter();
const outletRef = ref(null);

onMounted(() => {
  if (outletRef.value) {
    setupRouterOutlet(outletRef.value, { platform: 'auto', swipeGesture: 'auto' });
  }
});

const openSettings = () => {
  setDirection('forward');
  router.push('/settings');
};
</script>

<template>
  <cap-router-outlet ref="outletRef">
    <router-view />
  </cap-router-outlet>
</template>

Envuelva las páginas de ruteo en cap-router-outlet, cap-pagey cap-contenty llame a setDirection('forward') o setDirection('back') context: HTML fragmento de texto de una cadena de UI de Capgo más larga (clave de mensaje `alternatives_cta_questions`). Página/área: página de comparación de alternativas de actualización en vivo de Capacitor. Rol: párrafo de marketing o legal largo. Visto en: página alternatives.astro. Preservar términos de producto y marca de Capgo exactamente. Clave de mensaje `alternatives_cta_questions` (Preguntas de llamada a la acción de alternativas). | Fragmento de texto de UI de Capgo más largo (clave de mensaje `appflow_cta_questions`). Página/área: copia de marketing de comparación/migración de Appflow. Rol: párrafo de marketing o legal largo. Visto en: página ionic-appflow.astro. Preservar términos de producto y marca de Capgo exactamente. Clave de mensaje `appflow_cta_questions` (Preguntas de llamada a la acción de Appflow). | Fragmento de texto de UI de Capgo más largo (clave de mensaje `capwesome_cta_questions`). Página/área: página de comparación de Capawesome. Rol: párrafo de marketing o legal largo. Visto en: página capwesome.astro. Preservar términos de producto y marca de Capgo exactamente. Clave de mensaje `capwesome_cta_questions` (Preguntas de llamada a la acción de Capwesome). | Fragmento de texto de UI de Capgo más largo (clave de mensaje `consulting_faq_subtitle`). Página/área: página de servicios de consultoría. Rol: subtítulo o etiqueta de sección. Visto en: página consulting.astro. Preservar términos de producto y marca de Capgo exactamente. Clave de mensaje `consulting_faq_subtitle` (Subtítulo de preguntas frecuentes de consultoría). | Página/área: copia de marketing de comparación/migración de Appflow. Rol: etiqueta de UI corta o elemento de navegación. Visto en: página ionic-appflow.astro, página ionic-enterprise-plugins.astro, página soluciones/ionic-enterprise-plugins.astro. Clave de mensaje `appflow_plugins_or` (Appflow Plugins O).

antes de navegar. No duplique los encabezados o pie de página web cuando la navegación nativa posee esas superficies. Using @capgo/capacitor-native-navigation Usando @__CAPGO_KEEP_0__/__CAPGO_KEEP_1__-navigación-nativa Usando @capgo/capacitor-transiciones.

Áreas seguras con Tailwind

Para áreas seguras de dispositivos en Tailwind CSS, utilice @capgo/tailwind-capacitor publicado como tailwind-capacitor en npm). Proporciona safe-areas utilidades y otros plugins de Tailwind amigables con Capacitor:

npm add -D tailwind-capacitor

In src/css/app.scss:

@import 'tailwindcss';
@plugin "@capgo/tailwind-capacitor/platform";
@plugin "@capgo/tailwind-capacitor/safe-areas";

Utilice utilidades como pt-safe, pb-safe, y px-safe en lugar de esparcirlos env(safe-area-inset-*) manualmente. El proyecto está activamente desarrollado — si algo falta para su configuración de Quasar, abrir una PR en GitHub.

Corrección de problemas de diseño de iOS (Viewport, Área Segura y Desbordamiento Horizontal)

Si el contenido parece recortado, desplazado o desplazable horizontalmente en iOS, agregar más overflow-x: hidden o ajustar la etiqueta de viewport sola no suele solucionar el problema. Pase por estas comprobaciones en orden.

Asegúrese de que la etiqueta meta de viewport se aplique correctamente

In index.html (o su plantilla HTML de Quasar), establezca la etiqueta meta de viewport en <head>:

<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />

Gestione el área segura de iOS desde un solo contenedor raíz

Crear un solo contenedor de aplicación y aplicar allí el relleno de área segura — no en múltiples componentes anidados:

html,
body,
#q-app {
  width: 100%;
  min-height: 100%;
  margin: 0;
  padding: 0;
  overflow-x: hidden;
}

* {
  box-sizing: border-box;
}

.app-shell {
  min-height: 100dvh;
  width: 100%;
  padding-top: env(safe-area-inset-top);
  padding-right: env(safe-area-inset-right);
  padding-bottom: env(safe-area-inset-bottom);
  padding-left: env(safe-area-inset-left);
}

Envuelva todo el contenido de la página dentro de .app-shellEl relleno de área segura duplicado en encabezados, modales y contenedores de diseño a menudo hace que la interfaz de usuario parezca recortada o demasiado grande.

Con @capgo/tailwind-capacitor, puedes expresar el mismo relleno con utilidades como pt-safe pb-safe px-safe en esa sola caja.

Establece Capacitor iOS contentInset a never primero

En capacitor.config.ts, prefiere el relleno de inserción nativo deshabilitado y deja que CSS (o la navegación nativa) contentInsetMode: 'css') se encargue del área segura:

const config: CapacitorConfig = {
  appId: 'com.example.myapp',
  appName: 'my-app',
  webDir: 'dist/spa',
  ios: {
    contentInset: 'never',
  },
};

Mezclar el relleno de contenido automático de Capacitor con CSS env(safe-area-inset-*) relleno es una causa común de doble espaciado.

Encuentra el elemento que está realmente desbordando

The usual culprit is an element using 100vw, Tailwind w-screen, un ancho de píxel fijo, o un ancho de píxel muy grande min-width.

In el Inspector de Safari Web, ejecuta:

[...document.querySelectorAll('*')]
  .filter(el => el.scrollWidth > document.documentElement.clientWidth)
  .map(el => ({
    el,
    tag: el.tagName,
    class: el.className,
    scrollWidth: el.scrollWidth,
    clientWidth: document.documentElement.clientWidth,
  }));

Con Tailwind, reemplaza w-screen con w-full cuando sea posible. Muchos problemas de rebosamiento horizontal provienen de 100vw / w-screen, un relleno de área segura duplicado, o un contenedor de ancho fijo — no del meta de la etiqueta de vista previa en sí.

Conclusiones

Capacitor es una excelente opción para crear aplicaciones nativas basadas en un proyecto web existente, ofreciendo una forma simple de compartir code y mantener una interfaz de usuario consistente.

Y con la adición de CapgoSi es aún más fácil agregar actualizaciones en vivo a tu aplicación, asegurando que tus usuarios siempre tengan acceso a las últimas características y correcciones de errores.

Si deseas aprender a agregar Capgo a tu aplicación de Next.js, consulta el siguiente artículo:

Sigue adelante desde Crear aplicaciones móviles con actualizaciones en vivo, Quasar y Capacitor.

Si estás utilizando Crear aplicaciones móviles con actualizaciones en vivo, Quasar y Capacitor. para planificar el trabajo de plugins nativos, conecta con Capgo Directorio de plugins para el flujo de trabajo del producto en Capgo Directorio de plugins, Capacitor Plugins por Capgo para los detalles de implementación en Capacitor Plugins por Capgo, Agregar o Actualizar Plugins para los detalles de implementación en Agregar o Actualizar Plugins, Alternativas de Plugins de Ionic Enterprise para el flujo de trabajo del producto en Alternativas de Plugins de Ionic Enterprise, y Capgo Construcción Nativa para el flujo de trabajo del producto en Capgo Construcción Nativa.

Actualizaciones en vivo para aplicaciones Capacitor

When a web-layer bug is live, ship the fix through Capgo instead of waiting days for app store approval. Users get the update in the background while native changes stay in the normal review path.

Cuando haya un error de capa web en vivo, envíe la corrección a través de __CAPGO_KEEP_0__ en lugar de esperar días para la aprobación de la tienda de aplicaciones. Los usuarios obtienen la actualización en segundo plano mientras los cambios nativos siguen en el camino de revisión normal.

Contexto: Página/área: Sitio web de marketing de Capgo. Rol: Descripción de apoyo o descripción meta. Visto en: componente GetStarted.astro. Preservar términos de producto/marca y términos de desarrollador exactamente. Mensaje clave `descripción_de_actualizaciones_instantáneas_para_aplicaciones_de_capacitor` (Descripción De Actualizaciones Instantáneas Para Aplicaciones De Capacitor).

Apoyo humano de Martin

Capgo gives you the best insights you need to create a truly professional mobile app.