Ventajas y desventajas de Xamarin

Hola Habr! Hoy le diremos qué les gusta a los usuarios de Xamarin, nuestra herramienta de desarrollo de aplicaciones móviles multiplataforma. Además, abordaremos las deficiencias de la plataforma. Por cierto, debajo del corte encontrará una gran cantidad de código y ejemplos ilustrativos, y no solo texto con una enumeración. Únete ahora!



Este artículo fue preparado por nuestros socios, chicos de EGO.

Xamarin es un práctico kit de herramientas para desarrollar aplicaciones móviles multiplataforma en C # usando .NET. Es compatible con iOS, Android y Windows Phone.

Para desarrollar una aplicación basada en Xamarin, no necesita conocer a fondo los idiomas específicos de las plataformas individuales. Además, cuando trabaje con cualquier plataforma, tendrá acceso completo a las capacidades de su SDK y mecanismos incorporados para crear interfaces de usuario.

Por lo tanto, Xamarin le permite crear aplicaciones que casi no son diferentes de sus contrapartes nativas, lo que significa que son bastante adecuadas para su distribución a través de tiendas oficiales (por ejemplo, Google Play y App Store).

Además, según los desarrolladores de Xamarin, la solución llave en mano no será significativamente inferior en términos de rendimiento.

Considere los componentes de Xamarin.

  • Xamarin.IOS es una biblioteca de clase C # que proporciona a los desarrolladores acceso al SDK de iOS.
  • Xamarin.Android es una biblioteca de clase C # que proporciona a los desarrolladores acceso al SDK de Android.
  • C # compilador.
  • .NET Framework
  • Herramientas IDE (integradas en Visual Studio para Mac OS y Windows).

Este artículo detalla siete razones importantes para usar Xamarin para el desarrollo multiplataforma.



Materiales adicionales: comparación de Xamarin y PhoneGap .

1. Fácil de aprender


¿A qué debe prestar atención primero al elegir una plataforma? Por supuesto, la complejidad de su desarrollo. Es poco probable que haya muchas personas que quieran pasar tiempo dominando la sintaxis (por ejemplo, para una posesión bastante segura de Angular, debe estudiar esta plataforma durante al menos varios meses). Por lo tanto, si la creación de código de alta calidad requiere una preparación extremadamente seria, entonces muchos principiantes simplemente no logran dominar completamente el entorno de desarrollo. Pero comenzar con Xamarin es fácil: no tiene que aprender el idioma Xamarin ni nada de eso.

using Xamarin.Forms; RootPage.Children.Add(new ContentPage { Content = new Label { Text = "Sketches in Forms", BackgroundColor = Color.Yellow, TextColor = Color.Blue, Font = Font.SystemFontOfSize(NamedSize.Large), VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, } }); 

Es suficiente conocer el lenguaje C # con su imperativo estilo de escribir programas, sentirse libre en el entorno .NET y aprender varias clases relacionadas con plataformas específicas.

 using System.Diagnostics; using Foundation; using UIKit; namespace NeonPlayerConcept.iOS { [Register("AppDelegate")] public class AppDelegate : UIApplicationDelegate { public override UIWindow Window { get; set; } public static void Main(string[] args) { UIApplication.Main(args, null, "AppDelegate"); } } } 

Fuente

Para crear una aplicación completamente "nativa" para una plataforma en particular, debe tener suficiente conocimiento de Java (en el caso de Android) u Objective-C / Swift (para iOS). En algunos casos, esto puede ser un serio obstáculo. Veamos cómo se resuelve la misma tarea, que implica crear una cadena de atributos, en Objective-C y en C #.

En el objetivo-C:

 CFStringRef stringKeys[] * { kCTFontAttributeName, kCTForegroundColorAttributeName }; CFTypeRef stringValues[] * { myListFontRef, COColorGetConstantColor(kCOColorWhite) }; attr = CFDictionaryCreate (kCGAllocatorDefault, (const void **) &stringKeys, (const void **) &stringValues, sizeof(stringKeys) / sizeof(stringKeys[0]), &kCFTypeDictionaryKeyCallbacks, &kCFTypeDictionaryValueCallbacks); astr = CFAttributedStringCreate(kCFAllocatorDefault, CFSTR(“Hello from ego team!”), attr); 

En C #:

 var stringAttributes = new CFStringAttributes { Font = myFont, ForegroundColor = UIColor.White.CGColor }; var myString = new NSAttributedString (“Hello from EGO team!”, attrs); 

Si no está utilizando las capacidades de desarrollo multiplataforma de Xamarin, para crear un proyecto comercial que tenga un rendimiento suficiente en ambas plataformas, es posible que deba usar dos enfoques diferentes a la vez. Esto significa que los costos casi se duplican.

2. Reduce los costos del proyecto


En base a las ventajas descritas anteriormente, se puede observar que el desarrollo multiplataforma con Xamarin requiere aproximadamente 1,5 veces menos tiempo (y dinero) que crear un proyecto especializado separado para cada plataforma.

Por supuesto, algunos fragmentos de código (por ejemplo, componentes de utilidad) serán los mismos en ambas versiones, y algunos otros (en particular, la lógica empresarial que no utiliza las funciones especializadas del dispositivo del usuario) requerirán solo cambios menores. Sin embargo, la situación general es un poco más complicada. Algunos componentes de su aplicación inevitablemente tendrán que escribirse desde cero para cada sistema operativo. Al crear e implementar dos aplicaciones para dos plataformas, casi siempre es necesario contratar dos equipos de desarrollo. Usar Xamarin es mucho más simple:

Gracias a las API independientes de la plataforma, aproximadamente el 70% del código se escribirá en un formato universal.

En este ejemplo, la clase MainPage usa la interfaz ITextToSpeech para seleccionar la función deseada en una plataforma específica:

 ITextToSpeech.cs: public interface ITextToSpeech { void Speak (string text); } TextToSpeech_Android.cs: [assembly: Dependency (typeof (TextToSpeech_Android))] namespace UsingDependencyService.Android { public class TextToSpeech_Android : Java.Lang.Object, ITextToSpeech { TextToSpeech speaker; string toSpeak; public TextToSpeech_Android () {} public void Speak (string text) { \\Android-specific code } } } TextToSpeech_iOS.cs: [assembly: Dependency (typeof (TextToSpeech_iOS))] namespace UsingDependencyService.iOS { public class TextToSpeech_iOS : ITextToSpeech { TextToSpeech speaker; string toSpeak; public TextToSpeech_Android () {} public void Speak (string text) { … \\iOS-specific code } } } MainPage.cs: public class MainPage : ContentPage { public MainPage [] { var speak = new Button { Text = “Hello, world!”, VerticalOptions = LayoutOptions.CenterAndExpand, HorizontalOptions = LayoutOptions.CenterAndExpand, }; speak.Clicked += (sender, e) => { DependencyService.Get<ITextToSpeech>().Speak("Hello from Xamarin Forms"); }; Content = speak; } } 

3. Capacidad para crear interfaces de usuario como "nativo"


Una de las razones principales por las que los desarrolladores evitan las herramientas de desarrollo multiplataforma es que dichas herramientas no le permiten utilizar la gama completa de capacidades de entornos específicos. Esto se relaciona principalmente con el diseño (diseño plano en iOS, diseño de materiales en Android) y con las capacidades intelectuales de los dispositivos del usuario (acceso a contactos, cámara, datos GPS, etc.).

La solución multiplataforma final no tendrá un alto rendimiento (este inconveniente es inherente a casi todas las aplicaciones creadas con herramientas web multiplataforma) y no podrá aprovechar plataformas específicas (lo que significa que algunas características inicialmente planificadas por el creador del proyecto pueden no completamente implementado).

Sin embargo, todo es diferente cuando se usan las herramientas de Xamarin para el desarrollo multiplataforma de aplicaciones "nativas". En este caso, no encontrará los problemas anteriores. No solo las clases .NET estándar están disponibles para los desarrolladores: pueden conectar fácilmente clases compatibles con una plataforma móvil específica (están contenidas en las bibliotecas C # para Xamarin.Android y Xamarin.iOS, respectivamente). Esto significa que cuando use Xamarin para desarrollar aplicaciones para iOS y Android, tendrá a su disposición toda la gama de capacidades de estas plataformas. No necesita utilizar herramientas de terceros (y generalmente pagas).

4. Condiciones óptimas para las pruebas.


Probar un producto que se está preparando para su lanzamiento no es una tarea trivial, especialmente cuando se trata de la plataforma Android. Los formatos de pantalla de los dispositivos iOS del usuario están claramente definidos y conocidos de antemano, pero los dispositivos Android son muy diferentes. Si la aplicación no se ha probado en un dispositivo específico, su interfaz puede en algunos casos "dispersarse". Los creadores de Xamarin han propuesto una solución a este problema.

En particular, Test Cloud también está disponible para usuarios de la plataforma, lo que permite emular más de 2000 dispositivos. Esta decisión no es gratuita, pero los costos estarán justificados.



Materiales adicionales: nueve mejores herramientas de prueba de aplicaciones móviles para iOS y Android .

5. Compatibilidad perfecta con dispositivos IoT


Si desea que su aplicación reciba datos sobre la ubicación del usuario, giroscopio, acelerómetro u otros sensores incorporados, entonces Xamarin será una excelente opción.

 private void Instance_Ranged(object sender, System.Collections.Generic.IEnumerable<IBeacon> e) { Try { var data = string.Empty; foreach (var beacon in e) { data = $@”region id: {beacon} } _labelContent.Text = data; LogStatus(@”Ranged”); } catch (Exception exception) { LogStatus(exception.ToString()); } } 

Este entorno de desarrollo es totalmente compatible con dispositivos IoT (por ejemplo, con Estimote ) que le permiten recibir datos de ubicación, lo que significa que no tiene que configurar la integración con soluciones de terceros (especialmente porque esto no será posible en principio).

6. Documentación de calidad y una gran comunidad.


Hay documentación bien organizada para Xamarin con ejemplos prácticos, fragmentos de código e instrucciones paso a paso.

Por supuesto, algunas preguntas no pueden responderse en él. En este caso, la comunidad en línea lo ayudará. Hay dos comunidades oficiales de Xamarin: en el sitio web oficial de la plataforma y en el portal StackOverflow.

Si aún no puede obtener la información que necesita (algunos desarrolladores se quejan de que los expertos de la comunidad no son muy activos), puede comunicarse con el servicio de soporte técnico privado disponible para los titulares de licencias comerciales de Xamarin. Los especialistas le responderán en unas pocas horas y le ofrecerán no solo un conjunto de procedimientos estándar que rara vez ayudan a solucionar el problema por completo, sino instrucciones detalladas paso a paso para resolver su problema en particular.

7. Integración perfecta con Microsoft Windows


Casi todas las empresas de TI tienen una infraestructura desarrollada de software usado en la plataforma Windows.

Para todas las ediciones de Visual Studio (para Mac OS y Windows) desde la primavera de 2016, Xamarin también se proporciona como parte de la suscripción. Si ya está utilizando Visual Studio para el desarrollo, no necesita pagar más.

Desventajas de Xamarin


Intentamos hablar en detalle sobre las fortalezas de Xamarin y examinamos varias de sus ventajas obvias. Sin embargo, nos gustaría hacer que esta revisión sea más objetiva, por lo que recurrimos a las debilidades de la solución. De hecho, solo un inconveniente merece atención: el tamaño de las aplicaciones escritas con Xamarin generalmente excede ligeramente el volumen de las contrapartes nativas. Sin embargo, la optimización nunca es superflua.

Entonces, ¿qué tan efectivo es Xamarin?


Xamarin tiene varias ventajas y es excelente para proyectos a gran escala para desarrollar aplicaciones multiplataforma que son complejas en términos de arquitectura, similares a las soluciones nativas.

Source: https://habr.com/ru/post/es415833/


All Articles