En este artículo vamos a investigar el estado actual de los framework multiplataforma más populares para la creación de aplicaciones en Android e iOS.
A la hora de usar un framework multiplataforma el objetivo final, siempre es el mismo, facilitar y permitir que un mismo equipo de programadores trabaje en escribir una única base de código que al final pueda ser implementado sobre múltiples plataformas.
Con el objetivo principal de compartir la mayor parte del código posible, teóricamente se debe lograr ahorrar mucho tiempo y por tanto, también mucho dinero.
Hay varios frameworks multiplataforma disponibles y las preguntas más habituales que los desarrolladores se encuentran a la hora de comenzar un proyecto es, ¿Cuál de ellos merece más la pena? y ¿Qué framework es mejor usar en la actualidad?
El inicio de este artículo parte de una investigación en profundidad sobre el uso de Flutter y una exhaustiva evaluación de sus posibilidades. Se ha intentado analizar cuanto de complicado podría ser llegar a aprenderlo; y posteriormente, se pensó en analizar también. Los frameworks considerados con un mayor crecimiento (sé, que se ha dejado aparacado a Vue, por ahora).
Entre las soluciones para la creación de aplicaciones multiplataforma, existen otras muchas más herramientas en el mercado, como en su día ya analizamos aquí; en Ciberninjas.
Si repasamos el nombre de algunas de ellas en la actualidad, tendríamos que citar a: Flutter, React Native, Xamarin, Vue, PWA (aplicaciones web progresivas), Kotlin Native, J2Objective C (Doppl), Ionic, Cordoba (PhoneGap / Titanium), Unity.. y seguro que alguna más.
Entre todo ese listado, finalmente se decidió seleccionar tres opciones concretas, como son: Flutter, React Native y Xamarin.
Xamarin por ser uno de los frameworks multiplataforma más antiguos disponibles, utilizado principalmente en entornos empresariales.
React Native ha mostrado mucha popularidad y crecimiento en la actualidad, gracias a ReactJS y a su comunidad. Estar escrito en JavaScript ha impulsado su tasa de adopción en muchos círculos y se ha empleado sobre productos importantes.
Por último Flutter, ha sido muy promocionado por Google desde el 2017 y ha generado un gran interés en la comunidad de desarrolladores gracias a tener un enfoque novedoso e implementar un interesante stack tecnológico, sobre todo, durante sus últimos cambios y gracias a la fuerte asociación que mantiene con Android.
Antes de nada, echemos un ojo al por qué debemos o podemos elegir un framework multiplataforma.
El desarrollo multiplataforma tiende a tener una mala reputación por varias razones. Hasta hace muy poco, no existían tecnologías adecuadas para el desarrollo multiplataforma y las que estaban disponibles simplemente no eran demasiado buenas.
Se limitaban las capacidades de los desarrolladores y afectaban seriamente al rendimiento de las aplicaciones, a veces tanto, que las molestias del desarrollo multiplataforma no eran justificables.
A pesar de todos los inconvenientes, las personas continuaron eligiendo el desarrollo multiplataforma sobre el desarrollo nativo porque puede ofrecer una amplia gama de beneficios muy importantes:
Flutter ha estado disponible desde hace menos de 5 años y lanzado oficialmente desde hace menos de 3 años; pero solo comenzó a ganar visibilidad entre la comunidad de desarrollo aproximadamente desde el último año.
Flutter es una tecnología desarrollada por Google que se basa en Dart y un motor portátil de C++ para implementar un potente framework de interfaz de usuario.
A pesar de que Dart no recibió mucho cariño en la encuesta de desarrolladores de 2017 de Stack Overflow, las primeras publicaciones del blog de Flutter fueron recibidas con una mirada positiva.
No existe una hoja de ruta bien definida para Flutter, pero si te fijas lo suficiente, puedes encontrar sus hitos actuales y detalles específicos sobre en qué están trabajando a través de la discusión de este tema de Github.
El equipo de Flutter se encuentra manteniendo y dando asistencia dentro del subreddit de FlutterDev en el que se encuentran más de 29.000 usuarios y en el chat de Gitter.im donde puedes encontrar más de 10.000 usuarios.
Por último, existe un Foro de Grupo de Google con Devs de Flutter en el que ya existen más de 3.800 temas abiertos; y también puedes encontrar a los desarrolladores especializados en Flutter dentro de Stack Overflow.
Encontrar personal para desarrollar con Dart y Flutter no será fácil ya que la plataforma es bastante reciente y el lenguaje Dart es un lenguaje centrado específicamente en un aspecto muy concreto. Más, los desarrolladores de Java y Kotlin pueden aprenderlo fácilmente.
Para los desarrolladores de Android debería de ser más sencillo integrarse en el uso de Flutter, ya que puede integrarse sin ningún tipo de problemas con IntelliJ y Android Studio.
Los desarrolladores de iOS tendrán que acostumbrarse al lenguaje, la metodología y las herramientas casi por completo; lo que puede crear una línea de aprendizaje bastante más compleja.
Además de las APIs de pagos, Bluetooth y NFC, la mayoría de las APIs de hardware y sensores son compatibles, pero algunas de ellas se encuentran en una etapa temprana de su desarrollo.
Cada vez, van existiendo muchos más complementos, pero algunas áreas aún aparecen pendientes de ser investigadas. Por ejemplo, el soporte para vídeos en línea y los mapas dinámicos todavía están en desarrollo a día de hoy; pero ya van naciendo proyectos experimentales con la capacidad de afrontar estos problemas.
Dado que la interfaz de usuario personalizada y de alto rendimiento es el foco principal de Flutter, el framework está orientado a proporcionar una interfaz de usuario profundamente personalizada, a semejanza de una interfaz nativa buscando el objetivo de que los usuarios no se sientan extraños.
Flutter proporciona una implementación completa del cuerpo de la interfaz de usuario que no utiliza componentes de la interfaz de usuario nativos, para permitir así; el grado requerido de personalización, portabilidad y rendimiento.
Si se desea una interfaz de usuario personalizada para cada plataforma, se debe detectar el dispositivo actual y decidir qué diseño crear, lo que podría ser extremadamente tedioso.
Es importante tener en cuenta que es posible incrustar un FlutterView muy fácilmente en un diseño nativo de Android, para mezclarlo con la interfaz de usuario nativa sobre una misma pantalla; y esto también es posible en iOS; pero hasta el momento, aún no se ha documentado.
Cuando se trata de la realización de pruebas, queda claro que Flutter es un nuevo framework.
Dart ofrece un excelente framework de pruebas unitarias que puede utilizarse y Flutter le brinda una excelente opción para probar los widgets en un tiempo de ejecución sin cabeza, a velocidades de prueba de unidad.
Sin embargo, ejecutar pruebas de integración es algo complicado. Por último, Flutter le permite ejecutar pruebas de rendimiento con su flutter_driver paquete.
Flutter, es posiblemente considerada la mejor herramienta para el desarrollo móvil multiplataforma en un futuro cercano. Está desarrollada y respaldada por Google. Flutter usa Dart y una colección de widgets nativos para en conjunto crear impresionantes aplicaciones multiplataforma.
Saber Más: Qué es Flutter SDK, Cómo aprender Flutter en 2020, Relación entre Flutter y Dart, Guía DevTools, Wallpapers de Flutter, Productos de Flutter
? ¿Qué es Flutter? ? Aprender Flutter? ? Comparación con Flutter ? Wallpapers Flutter ? Guía DevTools
React Native se lanzó públicamente como código abierto a través de GitHub en 2015 y es el más popular de los tres frameworks en Stack Overflow y Google. A pesar de ser un framework bastante «viejo» ya, no existe una hoja de ruta clara, solo una página dedicada en GitHub que enumera los diferentes objetivos a alcanzar.
Existe una gran comunidad con (en el momento de la escritura) un subreddit de + 44.000 usuarios, un chat de Discord de + 98.000 usuarios y un fuerte soporte en Stack Overflow. Encontrar apoyo entre la comunidad es mucho más fácil que con Flutter, pero los desarrolladores de React Native ciertamente no son tan comunes como puede parecer.
Llegar a encontrar desarrolladores móviles nativos que también tengan conocimiento de React y JavaScript podría ser una tarea difícil.
React Native es compatible con la mayoría de las API nativas de Android e iOS. Debido a su gran comunidad de desarrolladores, incluso si no hay una API oficial disponible, hay muchas bibliotecas de terceros para elegir.
En términos de API específicas de hardware, React Native carece de una cantidad de ellas, pero nuevamente, hay bibliotecas de terceros disponibles. React Native no tiene API oficiales para: Bluetooth, biometría, NFC, cámara y sensores. Sin embargo, tiene API para WiFi y ubicación.
React Native realmente no ofrece una API para la creación de gráficos personalizados. Está invitado a componer componentes existentes siempre que necesite una solución personalizada, pero no es trivial tener un dibujo totalmente personalizado sin recurrir al código nativo de la plataforma.
Crear interfaces de usuario simples es bastante sencillo, dado que el equipo de desarrollo está familiarizado con los componentes React. Si necesita tener diferentes IU para cada plataforma, React Native puede administrar distintas implementaciones para Android e iOS.
Es posible, aunque no trivial, mezclar y combinar React Native UI con Native UI en la misma pantalla, y también es posible tener solo un subconjunto en las pantallas de una aplicación creada en React Native.
Los desarrolladores tienen todos los frameworks de JavaScript disponibles para realizar pruebas sobre sus componentes. Sin embargo, cuando se trata de pruebas de interfaz de usuario o automatización, la situación no es tan excelente. Aunque hay varias bibliotecas de terceros disponibles, no hay una ruta clara a seguir.
React Native es un framework de desarrollo móvil de código abierto para el desarrollo móvil multiplataforma, que te permite desarrollar aplicaciones Android e iOS con JavaScript y un amplio enjambre de APIs de componentes nativos.
Xamarin es el más antiguo de los tres frameworks, ya lleva más de 8 años. Es de código abierto, pero bajo un desarrollo centrado en el equipo de Microsoft. No posee la mejor reputación de herramientas, estabilidad y rendimiento entre los desarrolladores móviles, pero los desarrolladores empresariales de .Net parecen felices con él.
No existen hojas de ruta específicas para Xamarin o Android / iOS disponibles públicamente, pero hay una para Xamarin.Forms. Ser el framework más antiguo hace posible la existencia de una exhaustiva documentación.
Además, cuenta con una comunidad Slack de más de 6.400 usuarios, muchas reuniones / meetup y un sólido soporte a través de Stack Overflow.
Encontrar ingenieros para el framework .Net no debe ser difícil, pero encontrar ingenieros .Net con los conocimientos móviles específicos para la creación de apps nativas seguramente resulte más complicado.
Xamarin proporciona contenedores a varias bibliotecas de terceros, que generalmente ahorran mucho tiempo, ya que son un poco difíciles de crear, especialmente en iOS, donde no hay una herramienta automatizada para generar un punto de partida.
Muchas de estas extensiones se recopilan en la biblioteca de componentes de Xamarin, donde puede encontrar enlaces para Play Services, Firebase, Adobe Analytics y varios otros servicios ampliamente utilizados.
La mayoría de los enlaces son gratuitos, algunos otros son de pago, por ejemplo; el componente de reproducción de vídeo. Dicho esto, la gran mayoría de los contenedores tienen bajas calificaciones de los usuarios, incluso los proporcionados por el equipo de Xamarin.
Xamarin ofrece dos formas de desarrollar aplicaciones. En la primera; el desarrollador puede decidir crear la interfaz de usuario utilizando Xamarin.Forms, junto a la biblioteca de interfaz de usuario original de .Net (acompañada por WPF a lo largo del tiempo) o en el segundo caso; crear módulos de aplicación bajo la plataforma .Net Core completamente distintos, entre los que solo se puede compartir el código dentro de la propia plataforma de negocios «básica» de Microsoft.
Debido a la naturaleza de Xamarin, es posible que tengas un código de UI (casi) completamente compartido si usas Xamarin.Forms y no vas a necesitar proporcionar UI específicas sobre la plataforma.
Forms no tiene una función específica para presentar un UX diferente según la plataforma en la que se ejecuta, pero tiene un grado menor de integración en las vistas nativas si es necesario: es posible inyectar vistas nativas para cada plataforma en un diseño XAML. Esto debería estar bien para integraciones menores y ad-hoc, pero puede ofrecer problemas ante la necesidad de escalado.
Si el proyecto involucra interfaces de usuario desde la plataforma de .Net Core, no existe una opción para compartir la mayoría del código y la lógica de la interfaz de usuario, pero hay una mejor capacidad para interactuar con los componentes nativos y las API.
Con Xamarin se puede aprovechar NUnit, un excelente framework para pruebas unitarias que es nativo de C# y la realización de simulacros también es sencilla, lo que hace que el apartado de pruebas a nivel de componentes sea cómodo.
Por otro lado, el código de Xamarin se divide en iOS, Android y formularios. Esto puede requerir duplicar el código de prueba para cada plataforma. En el caso de iOS, se ofrece un generador de perfiles para verificar el rendimiento de la aplicación. Esta herramienta no está disponible para Android.
Xamarin brilla cuando se trata de pruebas de integración de interfaz de usuario. Hace unos años, Xamarin compró Calabash, uno de los principales framework de pruebas para interfaces de usuario sobre dispositivos móviles y creó un conjunto de pruebas específicas para Xamarin que más tarde ha terminado por denominarse Xamarin Insights.
Xamarin es un framework multiplataforma con C# y bibliotecas de plataforma nativas envueltas en una capa .NET. La tecnología consta de tres componentes principales: Xamarin Platform, Xamarin Cloud y Xamarin Insights.
La plataforma Xamarin se considera el elemento más importante de Xamarin, ya que ofrece API, controles, motores de tiempo de ejecución, cifrado, autenticación, máquinas virtuales y mucho más.
Xamarin Cloud proporciona una plataforma de prueba automatizada para garantizar la calidad de su producto en una variedad de dispositivos. Xamarin Insights es una herramienta de monitoreo que ayuda a los desarrolladores a rastrear bloqueos y excepciones de aplicaciones.
Visto este gran reposo gracias a la traducción realizada desde las publicaciones de Hackernoon y Novoda esperemos que ya puedas determinar mejor la fórmula correcta de desarrollar tus aplicaciones móviles multiplataforma.
Partiendo de la base de que los frameworks multiplataforma no son la panacea del desarrollo y que solo terminan funcionando bien cuando se usan con plena conciencia de sus limitaciones y fortalezas, ósea en un contexto que los haga brillar. No se debería nunca elegir exclusivamente un framework así, por la posibilidad de ahorrar costes y la reducción del equipo de trabajo.
Seguramente, si son implementados bajo las situaciones en que se logré cubrir las necesidades y problemas fundamentales que nuestro cliente nos plantea, lograremos ver como estas herramientas brillan siendo la piedra angular de nuestros proyectos.
Fuentes: HackerNoon + Novoda + Google
La biografía más vendida del cofundador de Apple, Steve Jobs; escrita por uno de los…
Hubo un tiempo en el que la “seguridad en el hogar” significaba confiar en un…
Elon Musk vuelve a romper todos los esquemas. Los accionistas de Tesla acaban de aprobar…
Los fans de Grand Theft Auto tendrán que esperar un poco más para volver a…
Five Nights at Freddy’s: Into the Pit nos sumerge en un misterioso mundo donde lo…
Adéntrate en el oscuro y retorcido mundo de Bendy and the Ink Machine, donde los…