Son unas de las plataformas más importantes en el desarrollo mobile. He trabajado con las dos y aquí te cuento mi experiencia con Xamarin vs React Native.
Desde que salí de la universidad siempre me he dedicado al desarrollo mobile. Mayoritariamente desarrollando apps para iOS pero con el tiempo también he entrado en el desarrollo Android. Una de las desventajas que tiene tener 2 sistemas operativos tan populares para los smartphones, tablets, etc. es que para que tu app tenga presencia en ambas plataformas, la tienes que desarrollar 2 veces, una para cada plataforma.
Esto en proyectos pequeños no es tanto problema pero, en proyectos grandes, es un gasto de tiempo y dinero descomunal. Todo se debe hacer por duplicado y esto conlleva mantener 2 apps que, aunque sean la misma, en realidad cada app tiene su propio código.
Frente a este complejo problema, se han desarrollado diferentes plataformas que nos permiten tener un único código para nuestras apps Android y iOS. También nos permiten mantener las personalizaciones propias de cada sistema operativo.
Hay varias plataformas de desarrollo mobile nativo cómo Xamarin, React Native, Flutter… Personalmente he trabajado con Xamarin y React Native. Flutter la tengo pendiente porque creo que es una opción muy interesante a tener en cuenta, ya que detrás de Flutter está la propia Google. Y estoy seguro que pronto hablaré de ella aquí en el blog.
Cada plataforma tiene sus pros y sus contras pero mi experiencia con Xamarin vs React Native, al trabajar con ambas, me permite tener una visión completa de ellas.
Desarrollando con Xamarin
Xamarin es una plataforma de desarrollo mobile nativo desarrollada por Miguel de Icaza y Nat Friedman, partiendo del proyecto Mono que consistía en crear un grupo de herramientas libres, basadas en GNU/Linux y compatibles con .NET. Fue comprada por Microsoft en 2016.
Xamarin se basa en código escrito en C#, que se puede ejecutar en Windows, Mac o Linux. A partir de ahí se desarrollaron librerías especificas para implementar el ecosistema iOS y Android.
Con todo esto, podemos crear un proyecto escrito íntegramente en C# con el que podemos generar apps para iOS y Android, tanto en Mac como en Windows (dónde no es posible desarrollar apps para iOS con Xcode).
Ventajas
Desarrollar nuestra app en Xamarin tiene una serie de ventajas como Xamarin Forms que nos permite tener un solo proyecto que después se generará para iOS y para Android.
También podemos desarrollar nuestro proyecto en una estructura de Core + Plataformas. Esto nos da un poco más de personalización ya que podemos crear las pantallas para cada plataforma y no estamos obligados a usar únicamente los componentes que nos da Xamarin Forms.
Que esté detrás Microsoft también es un plus, ya que nos da la tranquilidad de saber que es un proyecto desarrollado por una gran compañía de software. También podemos usar Visual Studio por lo que podemos usar todas las posibilidades de este gran IDE.
Inconvenientes
Uno de los grandes problemas de Xamarin es el tiempo que requiere su compilación. Esto va mejorando con cada versión, pero es claramente una barrera ya que según que cambios o si tu ordenador no es muy potente, estamos hablando de varios minutos perdidos viendo la pantalla como compila nuestra app.
También tiene el inconveniente que todos los plugins que queramos utilizar los tienen que desarrollar exclusivamente para Xamarin. Por ejemplo, si usamos Firebase, tenemos que esperar a que la comunidad, o la propia Microsoft, adapte las nuevas librerías a Xamarin.
Otro problema es la información que tenemos cuando nuestra app crashea, si bien hay plataformas que nos permiten obtener informes sobre nuestros fallos en producción cómo AppCenter, la información que nos da no siempre es clara y se hace difícil el mantenimiento de la app.
Desarrollando con React Native
React Native es la plataforma de desarrollo mobile nativo creada por Facebook a partir de su framework de javascript React. Se basa en tener un único código escrito íntegramente en javascript pero también se puede añadir React Native a nuestra app Android y iOS.
Es multiplataforma, así que nos permite desarrollar React Native tanto en Windows como en Mac.
Ventajas
Una ventaja es que nos permite tener todo el código de nuestra app escrito en javascript y usar librerías desarrolladas para React. La comunidad de javascript crece exponencialmente por lo que cualquier librería o componente que busques, lo vas a encontrar fácilmente.
Otra ventaja es que está bajo el paraguas de una gran empresa cómo es Facebook, esto nos da tranquilidad al querer desarrollar nuestras apps en React Native. También las librerías nativas de React Native, tanto de iOS como de Android, son mucho más conseguidas que las de Xamarin.
El desarrollo también es mucho más productivo puesto que integra un compilador muy potente que durante el desarrollo nos permite ver los cambios que hacemos en la app en tiempo real, refrescando la interfaz de usuario. Todo esto hace que el desarrollo mobile con React Native sea mucho más ágil que en Xamarin.
Inconvenientes
Uno de los inconveniente más grandes es que se lanzan muchas nuevas versiones y a veces, por el uso de según que librerías, se generan errores y esto nos hace perder un tiempo muy valioso.
El tiempo de generar nuestra versión para producción es muy grande, tardando muchos minutos para un proyecto de mediano tamaño. Pero al suceder únicamente al generar las apps, no es tampoco un inconveniente muy importante.
Otro inconveniente es el hecho de que añadir según qué librerías nativas, dependiendo de la versión que estemos usando de React Native, la cosa se complica por momentos. Teniendo que ir a los proyectos de iOS y Android a configurar manualmente la introducción de la nueva librería.
Mi opinión
Como vemos, cada plataforma tiene sus ventajas y inconvenientes y es decisión de cada uno usar una u otra. Mi opinión personal, mi experiencia con Xamarin vs React Native, es que me gusta mucho la manera de trabajar con React Native. Creo que he sido condicionado por el hecho de que he visto evolucionar Xamarin desde casi sus inicios y he pasado por muchos obstáculos con Xamarin. En cambio con React Native ha sido todo mucho más fácil. Es cierto que la manera de trabajar con uno u otro es un poco diferente pero para la mayoría de los casos creo que React Native se lleva el gato al agua.
Esto no quiere decir que React Native sea la panacea y sea algo perfecto, siempre usar las plataformas nativas es mucho mejor, pero el tiempo que se gana usando estas plataformas de desarrollo mobile y la calidad de su resultados lo avalan.
Como siempre, cualquier duda o sugerencia no dudes en contactar conmigo o escribirme un email a javi@tuprogramas.com. También te invito a que te suscribas a mi newsletter para estar al tanto de las novedades más interesantes del blog, así como del lanzamiento de cursos que estoy preparando.