Introducción
Ya tienes una Progressive Web App. Funciona en navegadores, tiene un manifest y quizás usa un service worker para soporte offline. Si ahora necesitas distribución en tiendas, APIs nativas o un mejor onboarding, migrar a una app con Capacitor suele ser más rápido que reescribir tu frontend.
La mayor ventaja es que conservas casi todo tu code web actual. En la mayoría de los casos, solo necesitas:
- compilar los assets web de producción,
- inicializa Capacitor con la configuración correcta
webDir, - añade proyectos de iOS y Android,
- e integra plugins nativos solo donde haga falta.
Si tu PWA tiene rutas limpias y una lógica de componentes clara, esto puede llevar solo unas horas.
Requisitos
Tiempo estimado: 2-5 horas, según las funciones específicas de cada plataforma.
- Node.js 18+ con Bun
- El código fuente de tu PWA actual code (React, Vue, Angular, Svelte, etc.)
- Xcode (solo para iOS y macOS)
- Android Studio (para Android)
- Cuenta de Apple Developer si planeas publicar en iOS
- Cuenta de Google Play Developer para distribuir en Android
Paso 1: Revisa tu PWA antes de convertirla a nativa
Antes de ejecutar bunx cap init, verifica que tu web app esté lista para producción:
- Asegúrate de que tu PWA tenga un script de build de producción (ej.,
bun run build). - Confirma que la carpeta de salida web sea determinista (normalmente
dist,build, oout). - Elimina redirecciones absolutas hard-coded que asuman un contexto de solo navegador.
- Verifica que el comportamiento del service worker sea compatible con WebViews móviles:
- Mantén el soporte offline si ayuda a tus usuarios.
- Evita APIs exclusivas del navegador que no estén disponibles en la webview embebida.
- Los prompts de instalación de PWA y la UX específica del navegador siguen siendo relevantes. En una app con Capacitor, los prompts de instalación no suelen ser necesarios.
Paso 2: Adaptar comportamientos web
Keep your app UI but gate browser-only logic.
Usa un check de plataforma sencillo para los prompts de instalación y push:
import { Capacitor } from '@capacitor/core'
const isNative = Capacitor.isNativePlatform()
function registerInstallPrompt() {
if (isNative) return
// existing browser-only install or Web Push code
}
Esto evita que se ejecute lógica exclusiva del navegador dentro del contenedor nativo.
Paso 3: Inicializar Capacitor en tu carpeta PWA
Desde la raíz de tu PWA actual:
bun add @capacitor/core
bun add -D @capacitor/cli
Ejecuta Capacitor init con el nombre de tu app, bundle ID y el directorio de salida web:
bunx cap init MyPWAApp com.example.my-pwa-app --web-dir dist
Si tu carpeta de build es build (Create React App) o out (Next.js static export), reemplaza dist.
Añade una config básica de Capacitor:
import type { CapacitorConfig } from '@capacitor/cli'
const config: CapacitorConfig = {
appId: 'com.example.my-pwa-app',
appName: 'MyPWAApp',
webDir: 'dist',
server: {
iosScheme: 'https',
},
}
export default config
Paso 4: Añadir plataformas nativas
Instala los paquetes nativos core y genera las carpetas del proyecto:
bun add @capacitor/ios @capacitor/android
bunx cap add ios
bunx cap add android
En este punto Capacitor ha creado ios/ y android/ carpetas. La sincronización copiará tus assets web compilados en ambas plataformas.
Paso 5: Build de la web app y sync
Build de la PWA y sync de assets web:
bun run build
bunx cap sync
Ahora abre los proyectos nativos:
bunx cap open ios
bunx cap open android
Desde Xcode o Android Studio, conecta un dispositivo o emulador y ejecuta.
Paso 6: Mejoras nativas tras la migración
Aquí es donde reemplazas funciones solo web por APIs nativas según necesites:
- Notificaciones push ->
@capacitor/push-notifications - Almacenamiento seguro de key/value ->
@capacitor/preferences - Cámara / media ->
@capacitor/camera - Auth biométrica ->
@capacitor-community/native-biometric(o el plugin que prefieras)
Para cada nuevo plugin nativo:
- Instala el paquete del plugin
- Configura los ajustes del plugin
- Ejecuta:
bunx cap sync
Luego vuelve a compilar y ejecutar.
Paso 7: Verificación de paridad en tiendas
Antes del envío:
- Prueba los deep links y el routing (
/y rutas profundas) en ambas plataformas. - Verifica que la status bar, safe areas y la orientación sean correctas.
- Elimina metadatos web que causen conflictos (como los install prompts).
- Mantén la seguridad de transporte y privacidad alineadas con tu política.
- Añade los iconos y splash screens para cada plataforma.
Si tu app usa actualizaciones OTA, combina tu pipeline de release con una estrategia de actualización segura y considera Capgo un despliegue controlado y rollback.
Checklist final
- La web app compila sin errores (
bun run build) - Capacitor inicializado con los parámetros correctos
webDir bunx cap add iosybunx cap add androidcompletado- Las apps nativas corren en dispositivos reales
- Rutas de code solo para navegador se restringen al comportamiento nativo
- Canales de actualización y assets de la app store configurados
Ya hiciste la mayor parte del trabajo pesado al crear tu PWA. Envolverla con Capacitor te ofrece:
- Distribución en tiendas,
- Acceso a APIs nativas,
- Iteración más rápida sin un rewrite completo de code,
- Un único flujo de despliegue para equipos web y mobile.
Empieza con este flujo y luego itera paso a paso según las analíticas y el feedback de los usuarios.
Continúa desde Transform Your PWA to a Native App with Capacitor
Si estás usando Transforma tu PWA en una app nativa con Capacitor para planificar la migración y las operaciones enterprise, conéctalo con Capgo Enterprise para el flujo de trabajo del producto en Capgo Enterprise, Alternativas a plugins de Ionic Enterprise para el flujo de trabajo del producto en Alternativas de Plugins de Ionic Enterprise, Alternativas a Capgo para el flujo de trabajo del producto en Capgo Alternatives, Consultoría de Capgo para el flujo de trabajo del producto en Capgo Consulting, y Soporte Premium de Capgo para el flujo de trabajo del producto en Capgo Premium Support.