Xamarin Forms, MVVMCross y SkiaSharp: la santísima trinidad del desarrollo de aplicaciones multiplataforma
Publicado: 2022-03-11Hable acerca de establecer altas expectativas. ¡La santísima trinidad, nada menos!
La verdad es que el desarrollo de aplicaciones móviles es costoso cuando se dirige a múltiples plataformas, porque no hay un código compartido. Apple requiere que codifiques en Objective-C o Swift, Android requiere que codifiques en Java y WinPhone requiere que desarrolles en .NET, a menudo C#. Agregue a eso la gran cantidad de bibliotecas que cada plataforma proporciona para manejar mapas, dibujos, imágenes o GPS: se requiere una gran cantidad de tiempo y conocimiento para crear una sola aplicación móvil.
No hace falta decir que la mayoría de las nuevas empresas no pueden permitirse el lujo de triplicar sus gastos, e incluso las empresas establecidas pueden tener dificultades para justificar el precio de entrada al espacio móvil.
En este artículo, aprenderá cómo Xamarin Forms, en combinación con MVVMCross y SkiaSharp, puede ser una forma viable de crear aplicaciones móviles multiplataforma sin comprometer la familiaridad, el rendimiento y la singularidad. El artículo revisará estas tres tecnologías y cómo pueden reducir el costo de desarrollo al permitir la máxima reutilización de código en múltiples plataformas móviles.
Un problema importante
El problema del desarrollo de aplicaciones móviles multiplataforma es real y, como tal, han surgido muchas soluciones diferentes a lo largo de los años para reducir los costos de desarrollo al compartir código entre plataformas. En la industria de los videojuegos, por ejemplo, todos los principales motores de juegos brindan una solución multiplataforma, e incluso Unreal y Unity apuntan a teléfonos móviles y tabletas.
En el frente de las aplicaciones, ha habido múltiples intentos de liderar este mercado multiplataforma a lo largo de los años. Muchos se quedaron cortos y se han perdido en el abismo, pero un par de ellos aún sobreviven después de varios años. Entre estos se encuentra Xamarin, la única solución .NET que ofrece soporte para las tres plataformas móviles.
Nativo o no, aquí vengo
¡Entonces hay una guerra entre diferentes soluciones y quién dice que la guerra es propaganda!
La guerra se libra principalmente en el frente de la gran N : ¡ser nativo! Debe tener cuidado con la palabra porque no tiene un significado claro. Es la palabra más utilizada en el mundo del desarrollo móvil hoy en día y está muy de moda. La verdad es que nadie está de acuerdo en lo que realmente significa.
Al seleccionar un marco multiplataforma, todas las opciones "nativas" no son iguales, así que tenga cuidado, podría estar comparando manzanas con naranjas. Para algunos se trata del lenguaje de programación, para otros se trata de poder usar las características del hardware, otros piensan que se trata del uso de las API/UI de la plataforma y, a menudo, se trata solo de no ser una aplicación web.
Hay argumentos en todos los lados del debate y no voy a profundizar más porque es inútil. ¿Por qué es inútil? Bueno, déjame decirte un hecho difícil de digerir: ¡a tus usuarios finales no les importa!
Sí, leíste bien, solo a tus programadores les importa. Su usuario final nunca elegirá su aplicación debido a la tecnología subyacente: elegirá su aplicación porque responde a su problema y brinda una buena experiencia.
Entonces, en lugar de pelear por el significado de una palabra, veamos cómo Xamarin proporciona una manera eficiente de brindarles a los usuarios lo que les importa.
El Padre, el Hijo y el Espíritu Santo
Antes de continuar, aclaremos los tres elementos que componen nuestra solución al problema del desarrollo multiplataforma.
El Padre: Xamarin
Como se mencionó anteriormente, Xamarin es una solución .NET para el desarrollo de aplicaciones móviles y de escritorio. Microsoft lo compró en 2016, pero data de hace unos cuatro años con el proyecto Mono. Actualmente cuenta con tres soluciones: Xamarin.iOS, Xamarin.Android y Xamarin.Mac. Las otras plataformas ya manejan aplicaciones .NET por defecto, siendo soluciones de Microsoft. En resumen, Xamarin ofrece un enlace directo a las API de la plataforma en .NET. Por lo tanto, puede usar características nativas de una aplicación .NET. También hay un módulo de extensión para Xamarin llamado Formularios que proporciona una capa de abstracción para la interfaz de usuario.
El Hijo: SkiaSharp
SkiaSharp es un contenedor .NET sobre la biblioteca de gráficos vectoriales Skia de Google. Skia es el motor de renderizado nativo de Android, Chrome, ChromeOS y Firefox. Con SkiaSharp, puede usar la biblioteca en su aplicación .NET para que sea multiplataforma. Esto significa que la sombra ordenada que dice su diseñador "hará que su aplicación sea mucho mejor" se puede codificar solo una vez en lugar de repetirse para cada plataforma de destino. Personalmente, creo que su mejor característica es la capacidad de renderizar gráficos SVG de una manera que le permite evitar la duplicación de los diversos factores de forma mientras conserva una representación nítida y con píxeles perfectos.
El Espíritu Santo: MVVMCross
Para mantener todo bien separado y acoplado libremente, nuestra solución santificada se basará en MVVMCross. Este marco implementa una infraestructura MVVM (Model-View-ViewModel) para que todo pueda mantenerse independiente. Sin ser demasiado técnicos, las aplicaciones generalmente se dividen en tres partes:
- El modelo: una representación de memoria de nuestros datos
- La vista: nuestra interfaz de usuario, que presenta los datos y las acciones a los usuarios.
- El modelo de vista: la capa que une nuestro modelo a nuestra vista y viceversa
En ingeniería de software, siempre nos esforzamos por mantener la vista separada del modelo de vista para que la lógica de la aplicación (en el modelo de vista) pueda reutilizarse incluso si cambiamos la representación visual. MVVMCross nos ayuda a lograr precisamente eso mediante el manejo de enlaces de datos y proporcionando patrones y herramientas para la abstracción de la plataforma.
Lo que les importa a los usuarios finales
Solo para recapitular, hay diferentes cosas que diferencian las aplicaciones exitosas de las malas. Una aplicación exitosa:
- Resuelve un problema de la vida real.
- Ofrece una experiencia agradable
El punto número 1 obviamente no tiene nada que ver con el marco que elijas. Así que concentrémonos en el punto número 2. Hay tres aspectos principales que contribuyen a que su aplicación sea agradable:
- Familiaridad
- Rendimiento
- Unicidad
Familiaridad
La familiaridad se relaciona con la facilidad de uso y la rápida búsqueda de su camino a través de la aplicación.
En otras palabras, se trata de usar los diferentes paradigmas de interfaz de usuario de la plataforma de una manera coherente en todo el sistema. Por ejemplo, las cosas simples como las posiciones de los botones, las acciones de contexto de la lista o la navegación contribuyen a la familiaridad de su aplicación.
La familiaridad es el principal punto débil de las aplicaciones web o marcos basados en una interfaz web. Xamarin Forms, por otro lado, proporciona asignaciones multiplataforma a elementos de la interfaz de usuario proporcionados por el proveedor.
Por lo tanto, sus usuarios obtienen una experiencia que se ajusta a la apariencia general de la plataforma, por lo que intuitivamente se sentirán cómodos en su aplicación.
Rendimiento
Francamente, mencionar "nativo" en su propaganda de marketing no significa nada. Tome Jasonette como un ejemplo que es "nativo sobre HTTP". La interfaz de usuario se almacena en un servidor web... hola viajes de ida y vuelta y ralentizaciones, por lo que vemos que no se puede suponer necesariamente que nativo implique un mejor rendimiento.

Entonces, con ese mito fuera del camino, al observar los puntos de referencia de la vida real, Xamarin aparece como la solución más completa con respecto al rendimiento. Xamarin Forms, que no requiere muchos más cambios de contexto, ofrece un rendimiento comparable al de las aplicaciones en idiomas nativos.
Mi conclusión es que sus opciones de implementación son las que pueden ralentizar su aplicación en lugar de Xamarin frente al idioma nativo. Otras opciones por ahí están en clara desventaja con respecto al rendimiento.
Unicidad
La posibilidad de que sus diseñadores creen una aplicación de apariencia única también es muy importante si desea brindar la mejor experiencia de usuario posible y diferenciar su aplicación.
Muchas veces, la singularidad implica crear controles, animaciones o gestos personalizados. Cuando no está disponible en Xamarin, puede usar SkiaSharp (un contenedor alrededor de la biblioteca de representación de gráficos vectoriales Skia de Google) y aprovechar el concepto de representación personalizada de Xamarin Forms para acercarse al hardware tanto como sea necesario, mientras codifica siempre en un solo lenguaje, algo que las otras soluciones no pueden ofrecer.
Lo que le importa como empresa
En este punto, lo más probable es que esté pensando que la elección del marco también es una decisión comercial. Aparte de los factores fuera del alcance de este artículo, como la disponibilidad de recursos humanos, Xamarin tiene mucho que ofrecer, especialmente cuando se combina con MVVMCross. Desarrollaré cuatro aspectos que querrá considerar en su decisión:
- Precio y costes de desarrollo
- reutilización de código
- Disponibilidad de componentes
- Apoyo y comunidad
Precio y costos de desarrollo
Saquemos esto del camino. Desde principios de este año, Xamarin es gratuito para autónomos y pequeñas empresas como nuevas empresas (con Visual Studio Community Edition). Para organizaciones más grandes, viene «gratis» con una licencia de Visual Studio que quizás ya tenga. ¡Xamarin Forms, MVVMCross y SkiaSharp también son gratuitos y de código abierto para colmo!
Como ya mencioné, seguir la ruta .Net con Xamarin le permite desarrollar sus aplicaciones en un solo idioma de principio a fin. La mayoría de las otras soluciones requieren que sus programadores conozcan diferentes lenguajes. En el caso de Cordova, por ejemplo, debe tener fluidez no solo en HTML, Javascript, CSS, sino también posiblemente en Objective-C, Java y/o C# si necesita acceder a las API de proveedores que no tienen un complemento disponible. .
La variedad de idiomas utilizados hace que haya más cambios de contexto y más herramientas para dominar, lo que reduce la eficiencia. Xamarin, por otro lado, es una solución todo en uno: desde Visual Studio construyes, implementas y depuras en todas las plataformas.
Aunque no está directamente relacionado con Xamarin, también obtiene muchas funciones en C# que aceleran el desarrollo al elegir la solución .Net. Es decir, se beneficia de las excelentes características de C# 4.5+, como subprocesos múltiples sencillos con async/await, cierres y reflejos, todos los cuales han demostrado mejorar la eficiencia.
Reutilización de código
Es probable que haya pensado en la reutilización de código y lo más probable es que considere que todas las soluciones son algo equivalentes en este sentido. Lamento decirlo amigo, ¡pero te equivocas!
Los programadores entre ustedes podrían haberse preguntado por qué demonios propondría el uso de MVVMCross sobre la capa MVVM que está integrada en Forms. Bueno, aquí hay algo para considerar: ¿realmente solo está creando aplicaciones móviles?
Al aislar la lógica de su aplicación con MVVMCross y usar la inversión de control que proporciona, puede reutilizar una cantidad máxima de código en dispositivos móviles, pero también en Windows y Mac (porque Xamarin.Mac es su amigo).
No solo le ahorrará dinero, sino que también presenta buenas prácticas de ingeniería que reducirán los costos de mantenimiento de su código.
Disponibilidad de componentes
Tal vez no seas como yo, pero odio reinventar la rueda. Por lo tanto, tener acceso a los componentes existentes que puede integrar fácilmente en su aplicación es crucial para acelerar su tiempo de comercialización y, a menudo, reducirá sus costos al mismo tiempo.
Elegir Xamarin y MVVMCross le ofrece dos opciones para elegir los componentes existentes. En primer lugar, cada vez hay más componentes disponibles para Xamarin con o sin Forms. Xamarin tiene una Tienda de componentes integrada dentro de Visual Studio donde puede encontrar varias soluciones a problemas comunes de aplicaciones y otras compañías venden directamente, así que asegúrese de buscar antes de comenzar a escribir sus propios componentes (o considere venderlos una vez que estén construidos).
En segundo lugar, querrá buscar paquetes de Nuget porque es probable que alguien ya haya escrito código para hacer lo que necesita. Entre esos paquetes, encontrará una lista decente de complementos MVVMCross multiplataforma que resolverán problemas comunes como correo electrónico, GPS o localización.
Si ya tiene experiencia con C#, probablemente tenga sus componentes preferidos. Por supuesto, no querrás dejarlos ir, se sienten tan cómodos. Tenga la seguridad de que puede crear enlaces de C# para los componentes existentes y luego usarlos como si estuvieran integrados con Xamarin, incluso en Forms con un poco de ayuda de los renderizadores personalizados.
Hablando de eso, es posible que desee echar un vistazo al repositorio Github de enlaces de Xamarin antes de crear el suyo propio.
Soporte y Comunidad
Finalmente, el acceso a soporte y ejemplos es un factor muy importante en la elección de un marco. Xamarin ha existido por un tiempo, por lo que la comunidad tiene un tamaño bastante bueno hoy.
Buscar información en Google generalmente arroja una buena cantidad de respuestas (consejo: también intente sus búsquedas de monotouch y monodroid, los ancestros de Xamarin) y Xamarin ofrece muchos ejemplos y excelente documentación en su sitio web.
Además, dado que Xamarin realmente es solo un enlace sobre las API del proveedor, la documentación de Apple y Google siempre es relevante y responderá muchas de sus preguntas. Luego puede crear su propio servicio MVVMCross para abstraer las API del proveedor dentro de su código compartido.
En cuanto al futuro de Xamarin, con su adquisición en marzo pasado por parte de Microsoft, mi apuesta es que no irá a ningún lado excepto hacia adelante. Desde esa venta y el cambio de coincidencia a un modelo gratuito, la comunidad solo ha crecido, el soporte ha mejorado y el producto ha seguido mejorando, ¡posiblemente incluso a un ritmo más rápido!
El futuro parece prometedor para Xamarin.
¡Preparémonos para la fiesta!
Soy consciente del hecho de que puedo estar abriendo una lata de gusanos con este artículo. No me malinterpreten, hay otras opciones que vale la pena considerar y lo invito a hacerlo, porque mis preocupaciones pueden no ser las mismas que las suyas.
Tenga en cuenta que si tiene una línea de tiempo de seis semanas y cuatro meses después todavía no tiene una aplicación lista, no está ganando. Eso dejaría dos meses y medio y mucho dinero para capacitar a alguien internamente o contratar a alguien con conocimientos. Insistir en crear una aplicación "nativa" en ese momento puede ser bastante perjudicial para el destino de su proyecto.
Xamarin y estas tecnologías complementarias brindan exactamente lo que les importa a sus usuarios y lo que usted necesita. Espero que este artículo lo ayude a tomar una decisión bien informada sobre el marco que puede elegir para su próxima aplicación móvil.
