Siempre he estado rodeado de developers móviles que desarrollan en nativo y han influenciado en mi opinión sobre el desarrollo de aplicaciones móviles en nativo o multiplataforma. Hasta ahora, era más de recomendar nativo pero me estoy dando cuenta que tecnologías como Xamarin son muy potentes y puedes hacer lo mismo (o casi) que en nativo y a menor precio y en menor tiempo.
Es por ello que quería escribir sobre ello en el blog de e-growing pero como no domino el tema he querido invitar a un experto para que nos dé su opinión. Os presento a Josué Yeray Julian, MVP de Windows Phone, geek y muy buen desarrollador y profesional.
Con el objetivo que nos lo cuente todo sobre el desarrollo en frameworks multiplataforma y sobre Xamarin, el framework que él utiliza, he pensado algunas preguntas que pueden tener los clientes que contratan desarrollos de aplicaciones móviles.
Para ponernos en situación…
¿Por qué me podría interesar desarrollar mis apps móviles multiplataforma?
Normalmente, desarrollamos aplicaciones móviles para una plataforma, movidos por gustos personales. Esto funciona bien si desarrollamos por hobbie y nuestra pretensión es simplemente hacer apps por diversión o tener una fuente de ingresos extra, pero no es nuestra principal vía económica. Cuando queremos dar el salto y convertir el desarrollo de apps en nuestra forma de vida, deberíamos tener en cuenta otros factores:
– Desarrollamos apps para nuestros usuarios, no para nosotros.
– Es muy difícil destacar en un market y conseguir ingresos.
– No debemos cortar las alas de nuestra app, desarrollándola en exclusiva para una plataforma.
– El marketshare de Android, iOS y Windows Phone varía mucho entre países y regiones geográficas.
Con estos puntos, tenemos que ver qué plataforma se adapta mejor a nuestra app y su modelo de monetización. Lo más probable es que acabemos viendo que, dependiendo del país y del modelo de monetización, varias plataformas se adaptan bien. Es en este momento donde empezaremos a pensar en desarrollar para varias plataformas y nos encontraremos con el problema de diferentes entornos, lenguajes, herramientas, que harán este trabajo muy complejo. Es aquí cuando el desarrollo multiplataforma entra en juego y se presenta como una opción a tener en cuenta.
¿Por qué tienen mala fama (o no son tan recomendadas) las tecnologías para el desarrollo de aplicaciones móviles multiplataforma?
Tradicionalmente, cuando hablamos de tecnologías multiplataforma, pensamos en el enfoque del mínimo denominador común: reducir nuestra implementación/desarrollo a un mínimo denominador de todas las plataformas.
Éste es el enfoque de tecnologías como PhoneGap/Cordova. Escribimos HTML5 y Javascript, dotamos a la aplicación de la misma experiencia de usuario en todas las plataformas. Este enfoque falla en muchos casos por las siguientes razones:
– Escribimos código que tiene que ser interpretado por un navegador web: html y javascript. El proceso de interpretación hace que perdamos rendimiento frente a una aplicación nativa ya compilada.
– Dependemos de un agente externo que no controlamos: el navegador web. Dependiendo de la plataforma y su versión, nuestro HTML será interpretado de una forma u otra, por lo que nunca podremos estar seguros del resultado final.
– Perdemos las peculiaridades de cada plataforma, al seguir el enfoque de “lo mismo para todos”, creamos una aplicación que no se adapta a ninguna plataforma, el usuario la siente extraña y la fricción en su uso crece. Si creamos fricción en nuestra app, el usuario tenderá a no usarla o buscar un sustituto más adaptado y sencillo de usar en su sistema.
Xamarin nos ofrece otro enfoque. Nos permite compartir la lógica interna de nuestra app, mientras nos exige que escribamos al interface de usuario de forma nativa. Esto elimina la fricción del uso que comentábamos, nos permite diseñar experiencias óptimas en cada plataforma y nos ayuda a crear una base común de código, usando una sola herramienta y lenguaje para nuestro desarrollo. Podríamos decir que es un paso intermedio entre crear las apps totalmente nativa y el desarrollo totalmente multiplataforma.
¿Qué tipo de aplicaciones puedo desarrollar con estas herramientas?
Con Xamarin, podemos crear cualquier tipo de aplicación/juego para las plataformas más usadas: iOS, Android y Windows. Tenemos un mapping del 100% de las APIs nativas de cada plataforma + APIs comunes de .NET. Existen además frameworks como MonoGame, que nos ayudan incluso al crear juegos.
¿Qué limitaciones existen? ¿O qué tipo de aplicaciones móviles NO me recomendarías desarrollar multiplataforma?
Virtualmente ninguna: La máxima de Xamarin es que cualquier cosa que puedas hacer con ObjectiveC, Swift o Java, la vas a poder escribir con Xamarin y C#. Además como la UI es nativa, diseñada para cada plataforma, el rendimiento va a ser muy bueno, totalmente comparable a una aplicación Nativas. Hace poco Harry Cheung, uno de los 20 primeros ingenieros de Google, escribió un artículo en Medium comparando el rendimiento de Xamarin con Swift, ObjectiveC, Java, RoboVM, RubyMotion y J2ObjC. El resultado: escogió Xamarin para su proyecto. Podéis leer en este artículo de Medium porqué lo hizo.
Precio
Entiendo que el precio es una gran ventaja: con un desarrollo tengo mis aplicaciones en 3 markets: Apple, Android y Windows Phone.
¿Qué me puede costar desarrollar mis apps con tecnologías multiplataforma? La relación es de 1 a 3: ¿por el precio de una app tengo tres?
El precio no es exactamente 1 a 3. Podríamos decir que es más en el orden de 1.5 a 3 o 2 a 3, dependiendo de la complejidad de la interfaz de usuario. Tomemos un ejemplo: una aplicación con tres pantallas: Login, lista de conciertos y detalle de un concierto.
– La lógica que realiza el login, obtiene los datos de los conciertos, realiza la navegación… es totalmente compartida entre las tres plataformas.
– El diseño de cada pantalla, tendremos que realizarlo 3 veces: una en iOS, una en Android y otra en Windows Phone.
La diferencia es, poniendo un precio redondo y al azar, que si una aplicación en cada plataforma nos cuesta 10.000€, en nativo hablaríamos de 30.000€. Con Xamarin, hablaríamos de entre 15.000€ y 20.000€, lo que supone un ahorro considerable. Pero más allá del simple precio, está el ahorro en tiempo. En Nativo, podemos tardar un mes en desarrollar para cada plataforma, con lo que al final tardaríamos 3 meses en total. Con Xamarin las tendríamos en 1 mes y medio, eso nos deja mucho más tiempo para atender el lanzamiento, recoger datos y preparar nuevas versiones, nos permite ser más agiles en responder a nuestros usuarios y corregir bugs, que además corregimos una vez para las tres plataformas, al tener el código compartido.
Actualizaciones
Si sale, digamos una nueva versión del sistema operativo de Apple, ¿debo actualizar las apps que tengo publicadas en los otros markets?
¿Cómo me afectan las actualizaciones en los sistemas operativos?
Las actualizaciones no van a ser un problema. Xamarin ha sabido mantenerse independiente de las tres grandes compañías en el mercado móvil: Apple, Google y Microsoft. Mantiene relaciones muy estrechas con las tres y le permite hacer cosas como presentar una beta con todas las APIs de iOS8 listas para usar, el mismo día que Apple presentó el sistema a los desarrolladores.
En cuanto a la actualización de nuestras aplicaciones, la estructura de Xamarin hace que tengamos un proyecto común con nuestra lógica y código compartido y un proyecto por cada plataforma: iOS, Android y Windows Phone. Esto nos permite actualizar cualquier plataforma por separado del resto sin ningún problema. Las aplicaciones son totalmente nativas, así que las actualizaciones de los sistemas operativos te afectarán de la misma forma que a una aplicación escrita de forma nativa. No existe diferencia en este punto.
Diseño
Sabemos que cada plataforma tiene sus guidelines de diseño.¿Si utilizo esta tecnología podré adaptar mi diseño a Android, Windows Phone o Apple?
Es una de las grandes armas de Xamarin. Mi diseño se realiza de modo exclusivo para cada una de las plataformas. No trabajo con un proyecto único, en su lugar tengo normalmente 4 proyectos:
– Core: lógica común
– iOS: Interfaz gráfica de iOS y código específico de la plataforma.
– Android: Interfaz gráfica de Android y código específico de la plataforma.
– Windows: Interfaz gráfica de Windows y código específico de la plataforma.
Esto me permite centrar mi diseño en cada plataforma, de forma que ofrezca al usuario una experiencia particular, adaptada a los guidelines de cada sistema.
Tecnología
¿Qué frameworks existen para programar aplicaciones móviles multiplataforma?
Existen muchísimos. Además de Xamarin o Cordova, de los que ya hemos hablado:
– J2ObjC: Conversor de Java a ObjectiveC
– RoboVM: Implementación de Java para iOS
– RubyMotion: Implementación de Ruby para Android e iOS
Y muchos otros que seguro que se me pasan por alto ahora…
¿Qué beneficios aporta Xamarin? ¿O en qué se diferencia de las otras?
En primer lugar, Xamarin no se limita a iOS y Android. Abre el abanico para incorporar también a Windows, Windows Phone y MAC. Esto es muy importante, sobre todo en un entorno empresarial, porque nos abre las puertas a crear soluciones empresariales de escritorio + móvil + Tablet, reaprovechando todo nuestro código en los diferentes casos de uso y creando Interfaces nativas en cada plataforma.
La principal diferencia de Xamarin también es su principal fortaleza: Genera aplicaciones nativas. Partiendo de una base de código común escrita en C#, se crean paquetes nativos para iOS, Android y Windows Phone, que no pueden ser diferenciados de una aplicación escrita en Objective C. Esto crea UIs fluidas y totalmente adaptadas a la plataforma, que son indistinguibles. Muchas veces, si eres desarrollador móvil, sabes cuándo una aplicación está desarrollada con Cordova/PhoneGap. En el caso de Xamarin, la gente se puede sorprender al saber que aplicaciones como Rdio, MixRadio, Dow Jones o juegos como Skulls of the shogun, que han sido desarrollados con Xamarin.
Profesionales
¿Dónde puedo encontrar buenos profesionales de Xamarin? ¿Cómo identificarlos?
Es importante que si buscamos ayuda con Xamarin, la persona que encontremos tenga grandes conocimientos de desarrollo en C#, patrones como MVVM, pero también experiencia móvil, que se sepa mover en todas las plataformas y conozca sus diferencias y peculiaridades. No necesitamos alguien que quiera llevarnos a una plataforma en concreto. Necesitamos a alguien que nos ayude a llegar a todas las plataformas posibles.
Hasta aquí la entrevista con JosueYeray. Creo que ahora y gracias a sus aportaciones podemos tener más clara la decisión de desarrollar nuestra aplicación móvil en nativo o utilizar Xamarin o alguno de los frameworks que nos presenta nuestro experto. Si en algún momento queréis contactar con Yeray para profundizar con el tema, os dejo su correo: info@josueyeray.com.
¿Cuál es vuestra opinión y experiencias con desarrollos multiplataformas?
¡Gracias por compartir!