Xamarin: comparación con el SDK nativo y los marcos basados ​​en JS

Por lo tanto, una de las principales características de la codificación utilizando el SDK nativo proporcionado por Android e iOS es el hecho de que obtiene no sólo un mejor rendimiento, sino también la apariencia de cada plataforma: por ejemplo, en iOS , una pestaña de navegación Bar se encuentra en la parte inferior de la pantalla, mientras que en Android se encuentra en la parte superior (sí sé que también puede ser superior e inferior, pero usted consigue mi punto), o también el muelle de navegación de muelle es un estilo de navegación Android Mientras que (por lo que sé) no hay nada similar en iOS sdk nativo. Mi punto de ser, se puede sentir la diferencia de las plataformas por sus directrices de diseño que es una buena cosa, ya que hace que su aplicación se vea profesional.

Así que teniendo en cuenta esto, en términos de rendimiento y mantener la sensación de su aplicación, el uso de marcos basados ​​en JS como Titanium o PhoneGap no hará una elección sabia.

Luego viene Xamarin . Como he leído aquí: Xamarin ¿cómo es conseguir la apariencia nativa y sentir? Parece que es un envoltorio de C# para el SDK nativo, que por lo que yo entiendo, no debe afectar el rendimiento. Pero ¿dónde está la apariencia? Dado que los diseños XML no son totalmente lo que da a Android aplicaciones de Android o iOS su sensación, sino también la navegación (que proviene de las clases del controlador), ¿cómo trata Xamarin con éstos? Se dice en su sitio web que se puede compartir código entre la plataforma, pero eso también significa que tengo que compartir el sistema de navegación y similares?

Por último, en aras de "no escribir código para cada plataforma" , ¿vale la pena no usar SDK nativo e ir con Xamarin (realmente no tengo un problema escribiendo código tanto para iOS como para Android), o es este objetivo marco Para los desarrolladores de C# para que no tengan que aprender Objective-C o Android.

Cualquier explicación adicional sería impresionante, y gracias de antemano.

Construí una gran aplicación en el último año (2013) con diferentes componentes: principalmente una API (ASP.NET Web API => C #), un sitio web (ASP.NET MVC => C # + AngularJS) y una aplicación para Android (Xamarin.Android => C #) e iOS (Xamarin.iOS => C #). La decisión de utilizar Xamarin tenía sus ventajas y sus desventajas, pero en general estoy más que feliz con él.

Como se puede ver en mi lista anterior, casi todo se hizo con C # (bueno, el sitio web está escrito principalmente en JavaScript ;-)). Es un lenguaje maduro maravilloso con características realmente agradables (como LINQ). En mi escenario se hace claro: no tuve que aprender y perfeccionar cuatro lenguajes (Swift / Objective-C, Java, C #, JavaScript) sino solo dos: C # y JavaScript.

Eso viene especialmente en juego con respecto al aspecto de compartir código: nuestras aplicaciones cliente no son realmente clientes ligeros debido a alguna funcionalidad sin conexión que requiere mucha lógica de sincronización, por lo que la parte de interfaz de usuario de las dos aplicaciones es sólo un lado de la medalla. Como resultó, realmente podría usar el 90% de ese código de no interfaz en iOS y Android. Este es un beneficio increíblemente enorme, ya que no se trata sólo de algunas originalidades lingüísticas de Swift / Objective-C o Java, sino también de los diferentes marcos que está utilizando en iOS y Android. Para utilizar .NET Framework / Mono como base de todas las aplicaciones de Xamarin, puede abstraer cosas como el acceso a los datos o la comunicación en red desde el sistema operativo subyacente.

En términos de velocidad e interfaz de usuario, no tiene ninguna desventaja, ya que está utilizando las API nativas 1: 1. Lo que esté disponible en iOS o Android también está disponible a través de Xamarin. Y cada vez que Apple, por ejemplo, envía una nueva versión de iOS, Xamarin enviará la actualización para que dentro de unos días, por lo que no tiene que esperar para poder utilizar las nuevas características introducidas por Apple.

Xamarin utiliza una técnica llamada Ahead of Time Compilación en iOS, por lo que todo lo que escribe en C # se compila en el material nativo de iOS antes de que se despliegue en su dispositivo. Esto significa que no hay diferencia en lo que se ejecuta entre una aplicación "nativa" de Objectice-C y una aplicación de Xamarin (excepto algunas pequeñas sobrecargas que no son dignas de mención de mis experiencias).

En Android Just in Time, la compilación se utiliza como cualquier otra aplicación "nativa" de Android, también.

Eso significa que tienes todas las mismas API y posibilidades que tendrías de otro modo, si quisieras ir con Objective-C o Java. Usted incluso utiliza los mismos objetos para construir su UI con exactamente los mismos tipos y nombres (a veces ligeramente optimizado;)). Así que si desea una barra de pestañas de navegación para su aplicación – se utiliza un UITabBarController para eso. Vea iOS contra Xamarin .

Después de varios años en mi camino con Xamarin sólo una desventaja:

Posibles fugas de memoria. Sus muestras enteras hacia fuera allí son un manojo de crap con respecto a los fundamentos esenciales de prevenir fugas de la memoria. Si está trabajando con "recursos caros" como archivos multimedia dentro de su aplicación, debe tener cuidado desde el primer día. Tuve que deshacerse de todos los problemas cuando una aplicación de mina ya había sido el crecimiento de hasta 35 diálogos diferentes (complejos). Eso me llevó casi dos meses o, en otras palabras, miles de dólares. Proporcionan algo de documentación al respecto, pero la herramienta es pobre en este extremo. Y es probable que aparezcan errores y muy difíciles de encontrar ( ejemplo ).

Pero en general fue una de mis mejores decisiones para ir con Xamarin.

He estado codificando con Xamarin por un tiempo ahora. Ha sido genial hasta ahora. Cualquier problema que he tenido me di cuenta porque c # es mi idioma nativo. El sitio de Xamarin tiene muchos ejemplos y referencias de API para muchas características en todas las plataformas.

  1. Rendimiento: obtiene rendimiento nativo al usar Xamarin. No se hicieron preguntas. Lo he estado usando para crear las características de grabación de audio, video y foto para una nueva aplicación en la que estoy trabajando. Xamarin procesa el código c # en código de byte nativo para todas las plataformas. Así es como se logra.

  2. Mira: el aspecto de tu aplicación será nativo. Usted literalmente tiene que usar el formato xml de Android para hacer su interfaz de usuario y el mismo Goes for IOS. Seguirás diseñando tus elementos de la misma manera que lo hiciste en cada plataforma. Todo lo que hace Xamarin es vincular una vista a un evento para ti.

  3. Api – La belleza de Xamarin está en la API. Ellos portaban todo el espacio de nombres de Android y IOS a c #. Echa un vistazo a su documentación .

  4. Caro – Mi único problema con Xamarin es que es caro. Si comprueba su precio es escandaloso. Pero conseguiste lo que pagaste. Un producto premium respaldado por el soporte.

  5. C # – Sharp es un gran lenguaje que tiene un montón de apoyo. El nuevo async / await consigue el paseo de la edición entera de la gerencia del hilo. Procesamiento Json es muy fácil en la plataforma. He subido varias clases en Github que se pueden utilizar para muchas aplicaciones.

Si usted es de un fondo de java, el cepillado para arriba en sus habilidades del c # será una brisa.

La aplicación rdio fue creada con Xamarin. Descárgalo en Android e IOS y prueba su rendimiento y disfruta de su aspecto nativo.

La mejor de las suertes

Hay mucho más contenido de Internet, ayuda y soporte para los nativos. Eso solo me ayuda a hacer mi elección. Si eres realmente bueno en Xamerin, tal vez el 70% del código que escribas sea utilizable por ambas aplicaciones, todavía tienes que personalizar las cosas para cada aplicación.

Pero de nuevo, el apoyo a los nativos es tan grande, que si se topa con un problema, también lo ha hecho alguien más.

Con xamerin, bueno, buena suerte.

Cuando digo aplicación me refiero a iOS / Android

  • Cuando se usa Mono Touch, ¿puedo también empaquetar para una aplicación estándar de Windows?
  • Cómo probar todo en Xamarin
  • Cómo obtener / detectar el tamaño de la pantalla en Xamarin.Forms?
  • Desarrollando para iPhone / Android y WPF
  • Xamarin.IOS Error - No se puede resolver la referencia: C: / Archivos de programa (x86) /../ Xamarin.iOS / v1.0 / Facades / System.Private.CoreLib.InteropServices.dll
  • Targeting / Developing para múltiples plataformas móviles con un solo lenguaje de programación (C #)? ¿Coste-beneficio?
  • MonoDroid, interfaz de usuario común de MonoTouch
  • Sugerencias para entrar en el desarrollo móvil - iPhone SDK puro, Android SDK, Mono Touch o Titanium?
  • ¿Cómo puedo decirle a mi jefe de trabajo con Xamarin no lo hará más rápido
  • Consulta del cliente de Azure Mobile Service que no devuelve el control a Xamarin Form android client app
  • Pasando variables de ViewModel a otro View (MVVMCross)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.