Inicio / Artículos

PWA, Swift y Kotlin, o Expo: Elegir una arquitectura para aplicaciones móviles

Compare las PWA, las aplicaciones nativas completamente desarrolladas en Swift y Kotlin, y Expo en términos de base de código, presencia en tiendas, rendimiento, acceso al hardware, velocidad de lanzamiento y costo, y luego elija.

Editor: REACTAPP.TOP5 min de lectura1251 palabras

Fuentes: PWA vs Native vs Expo: Pros, Cons, and How to Choose the Right Architecture

La arquitectura que elijas para un producto móvil es difícil de cambiar posteriormente. Si la elección es deficiente, el siguiente año se dedicará a lidiar con la plataforma en lugar de desarrollar nuevas funcionalidades: conflictos de dependencias tras una actualización del framework, la falta de una API de hardware o que los dos equipos dedicados al desarrollo nativo comiencen a separarse. Esta guía compara los tres puntos de partida más comunes: las aplicaciones web progresivas, las aplicaciones nativas completas escritas en Swift y Kotlin, y Expo basado en React Native, y finaliza con criterios concretos para elegir entre ellos, ya sea que estés creando un MVP o planificando la siguiente fase de una aplicación existente.

Cómo se comparan las tres opciones

Antes de analizar cada opción en detalle, aquí está cómo difieren según los aspectos que suelen determinar el resultado.

Código fuente

  • PWA: un único código fuente web creado con HTML, CSS y JavaScript.
  • Nativo: un código base separado por plataforma, típicamente Swift para iOS y Kotlin para Android.
  • Expo: un único código base en JavaScript o TypeScript compartido por iOS y Android.
  • Presencia en la tienda de aplicaciones

    • PWA: funciona en la web. La lista en la tienda es opcional y depende de envoltorios o soluciones específicas para cada plataforma.
    • Nativo y Expo: se distribuyen directamente a través de la Apple App Store y Google Play.

    Rendimiento

    • Nativo: el máximo rendimiento. Animaciones fluidas a la tasa de actualización completa de la pantalla, hasta 120 fps en pantallas compatibles, sin ninguna capa de abstracción que interfiera.
    • Expo: cercano al nativo para la mayoría de las interfaces. React Native renderiza vistas reales nativas, y su nueva arquitectura sustituye el antiguo puente asíncrono por llamadas directas de JavaScript al código nativo a través de JSI, lo que eliminó un cuello de botella de larga data.
    • PWA: limitado por lo que permite el motor del navegador, especialmente en cuanto a animaciones intensivas y tareas en segundo plano.

    Acceso al hardware

    • Nativo: todo lo que expone la plataforma.
    • Expo: amplia cobertura gracias al SDK de Expo, complementada con plugins de configuración y módulos nativos personalizados cuando es necesario.
    • PWA: el conjunto básico disponible para la web, como cámara y geolocalización, con notables carencias en iOS.

    Rapidez de publicación

    • PWA: los cambios se ponen en producción tan pronto como se implementan, sin necesidad de revisión en la tienda.
    • Expo: las actualizaciones over-the-air (OTA) pueden distribuir cambios en JavaScript y recursos al instante, mientras que los cambios en el código nativo siguen pasando por el proceso normal de revisión en la tienda.
    • Nativo: cada versión pasa por el proceso de revisión en la tienda.

    Costo

    • PWA: suele ser el más económico de desarrollar y mantener.
    • Expo: requiere una inversión moderada con un equipo.
    • Nativo: es el más caro, ya que generalmente dos bases de código para diferentes plataformas implican dos equipos especializados.

    Aplicaciones Web Progresivas: el enfoque centrado en la web

    Una PWA es una aplicación web que utiliza funcionalidades como un service worker y un manifiesto de aplicación web para comportarse más como una app instalada: se puede agregar a la pantalla principal, ejecutarse en su propia ventana y seguir funcionando sin conexión. Si el funcionamiento sin conexión es fundamental para tu producto, la guía del blog sobre el soporte offline con service workers explica los mecanismos.

    Ventajas. No existe una tienda de aplicaciones que se interponga entre tú y tus usuarios. Cualquiera que tenga la URL puede usar la app y agregarla a su pantalla principal. Las actualizaciones llegan a todos en la siguiente carga, y el contenido puede ser indexado por los motores de búsqueda, lo que genera descubrimientos orgánicos que rara vez se logran con las listas de la tienda.

    Límites. Apple sigue restringiendo las PWA en iOS. El envío de notificaciones web solo está disponible para aplicaciones añadidas a la pantalla principal, y la ejecución en segundo plano está estrictamente limitada. Las APIs de Bluetooth web y otras similares para hardware no son compatibles en Safari en absoluto. Si el producto depende de Bluetooth, del seguimiento continuo en segundo plano o de una integración profunda con el dispositivo, una PWA se encontrará rápidamente sin opciones viables. Las políticas de la plataforma han cambiado más de una vez, por lo que debe verificar el estado actual para sus versiones específicas de iOS.

    Swift y Kotlin nativos: máximo control

    Optar por la solución nativa implica desarrollar y mantener dos aplicaciones: una en Swift para iOS y otra en Kotlin para Android.

    Puntos fuertes. No se elimina nada de lo esencial, por lo que el rendimiento y la fidelidad son tan buenos como lo permite la plataforma. Las nuevas APIs de Apple y Google están disponibles el mismo día en que se lanzan, sin necesidad de esperar a que un framework las integre. Esta es la opción natural para gráficos exigentes, AR o VR complejos y procesamiento en segundo plano intensivo.

    Límites. La carga adicional es considerable. Dos bases de código duplican aproximadamente el esfuerzo de desarrollo y pruebas, y suelen requerir dos equipos con habilidades diferentes. Cada función tiene que desarrollarse dos veces y mantenerse sincronizada, y cada lanzamiento, incluso uno para corregir un error menor, debe esperar la revisión de la tienda.

    Expo: una sola base de código, resultados nativos

    Expo es un framework y conjunto de herramientas de código abierto basado en React Native. Oculta gran parte de la complejidad de compilación nativa en iOS y Android, por lo que una única base de código en JavaScript o TypeScript puede generar aplicaciones nativas reales para ambas plataformas.

    Puntos fuertes. El desarrollo avanza rápidamente. Expo Application Services (EAS) compila los binarios nativos en la nube, por lo que el trabajo diario rara vez requiere abrir Xcode o Android Studio. EAS Update entrega correcciones OTA directamente a las aplicaciones instaladas. Tenga en cuenta que las actualizaciones OTA pueden modificar el código JavaScript y los recursos, pero no el código nativo, y las políticas de la tienda siguen determinando qué se puede cambiar con una actualización; una nueva dependencia nativa implica una nueva compilación en la tienda.

    Límites. Los plugins de configuración y la API de Expo Modules han hecho que el código nativo personalizado sea mucho más accesible que antes, y las compilaciones de desarrollo permiten incluir cualquier biblioteca nativa, no solo aquellas que vienen incluidas en Expo Go. Aun así, las aplicaciones que necesitan controladores de hardware de nivel muy bajo o código C++ personalizado complejo siguen requiriendo trabajo nativo real, y el equipo necesita a alguien cómodo realizándolo.

    Para obtener una visión más amplia de las opciones multiplataforma además de Expo, incluyendo Flutter y Kotlin Multiplatform, consulte la reseña del blog sobre marcos de trabajo móviles multiplataforma.

    Elegir la arquitectura adecuada

    Ajuste la arquitectura al producto y no a la herramienta favorita del equipo:

    1. Elija una PWA cuando el presupuesto es limitado, la visibilidad a través de búsquedas es importante y el producto se compone principalmente de contenido o formularios: una tienda en línea, un sitio de noticias o un panel de control SaaS. También es una forma sensata de validar la demanda antes de invertir en aplicaciones para tiendas.
    2. Elija Expo para una startup, un MVP o una aplicación en producción que necesite llegar rápidamente tanto a App Store como a Google Play con un único equipo. Esto abarca la mayoría de las aplicaciones empresariales y para consumidores.
    3. Elija la versión nativa para juegos de alta gama, productos que requieren mucho hardware como dispositivos de ejercicio que se sincronizan continuamente por Bluetooth, o cualquier aplicación donde las interfaces a 120 fps y la ausencia total de riesgos de abstracción sean requisitos esenciales.

    Estas opciones no son sistemas aislados permanentes. Una PWA puede coexistir con una aplicación de tienda, y una aplicación Expo puede contener módulos nativos escritos en Swift y Kotlin; por lo tanto, a menudo existe una vía híbrida cuando una parte del producto supera las capacidades de la opción predeterminada.

    Conclusión

    Ninguna de las tres opciones es en general la mejor. La respuesta adecuada depende de lo que el producto debe hacer en el dispositivo, de la rapidez con la que se necesita llegar a los usuarios y del número de ingenieros con los que se cuenta para financiar el proyecto. Resuelva estas tres cuestiones antes de escribir código: el costo de la elección incorrecta se manifiesta posteriormente en refactores y soluciones temporales para la plataforma, mientras que la elección correcta permite al equipo dedicar su tiempo a características que los usuarios realmente notan.

    Lecturas relacionadas