Desarrollo de aplicaciones móviles: ¿nativo o multiplataforma?

Siempre y en todo momento he estado rodeado de developers móviles que desarrollan en nativo y han influido bajo mi punto de vista sobre el desarrollo de apps móviles en nativo o bien multiplataforma. Hasta el momento, era más de aconsejar nativo mas me doy cuenta que tecnologías como Xamarin son muy potentes y puedes hacer lo mismo (o bien prácticamente) que en nativo y a menor coste y en menor tiempo.

Es por esta razón que deseaba redactar sobre ello en el weblog de y también-growing mas como no domino el tema he querido invitar a un especialista a fin de que nos dé su opinión. Os presento a Josué Yeray Julian, MVP de Windows Phone, geek y buen desarrollador y profesional.

Con la meta que nos lo cuente todo sobre el desarrollo en frameworks multiplataforma y sobre Xamarin, el framework que emplea, he pensado ciertas preguntas que pueden tener los clientes del servicio que contratan un desarrollo de apps multiplataforma.

Para ponernos en situación…
¿Por qué razón me podría interesar desarrollar mis aplicaciones móviles multiplataforma?
En general, desarrollamos aplicaciones móviles para una plataforma, movidos por gustos personales. Esto marcha bien si desarrollamos por hobbie y nuestra intención es sencillamente hacer aplicaciones por diversión o bien tener una fuente de ingresos extra, mas no es nuestra primordial vía económica. Cuando deseamos dar el salto y transformar el desarrollo de aplicaciones en nuestra forma de vida, deberíamos tomar en consideración otros factores:

– Desarrollamos aplicaciones para nuestros usuarios, no para nosotros.

– Es realmente difícil resaltar en un market y lograr ingresos.

– No debemos recortar las alas de nuestra aplicación, desarrollándola en exclusiva para una plataforma.

– El marketshare de Android, iOS y Windows Phone cambia mucho entre países y zonas geográficas.

Con estos puntos, debemos ver qué plataforma se amolda mejor a nuestra aplicación y su modelo de explotación comercial. Lo más probable es que terminemos viendo que, en dependencia del país y del modelo de explotación comercial, múltiples plataformas se amoldan bien. Es ahora donde empezaremos a meditar en desarrollar para múltiples plataformas y nos encontraremos con el inconveniente de diferentes ambientes, lenguajes, herramientas, que van a hacer este trabajo muy complejo. Es acá cuando el desarrollo multiplataforma entra en juego y se presenta como una alternativa a tomar en consideración.

¿Por qué razón tienen mala fama (o bien no son tan recomendadas) las tecnologías de cara al desarrollo de aplicaciones móviles multiplataforma?
De forma tradicional, cuando charlamos 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 y cada una de las plataformas.

Este es el enfoque de tecnologías como PhoneGap/Cordova. Escribimos HTML5 y Javascript, dotamos a la aplicación de exactamente la misma experiencia de usuario en todas y cada una de las plataformas. Este enfoque falla habitualmente por las próximas razones:

Miguel de Icaza - CTO de Xamarin

– Escribimos código que debe ser interpretado por un navegador web: html y javascript. El proceso de interpretación hace que perdamos desempeño en frente de una aplicación nativa ya compilada.

– Dependemos de un agente externo que no controlamos: el navegador. En dependencia de la plataforma y su versión, nuestro HTML va a ser interpretado de un modo o bien otro, con lo que jamás vamos a poder estar seguros del resultado final.

– Perdemos las características particulares de cada plataforma, al continuar el enfoque de “lo mismo para todos”, creamos una aplicación que no se amolda a ninguna plataforma, el usuario la siente extraña y la fricción en su empleo medra. Si creamos fricción en nuestra aplicación, el usuario tenderá a no utilizarla o bien buscar un substituto más amoldado y fácil de utilizar en su sistema.

Xamarin nos ofrece otro enfoque. Nos deja compartir la lógica interna de nuestra aplicación, mientras que nos demanda que escribamos al interfaz de usuario de forma nativa. Esto suprime la fricción del empleo que comentábamos, nos deja diseñar experiencias inmejorables en todos y cada plataforma y nos ayuda a crear una base común de código, utilizando una sola herramienta y lenguaje para nuestro desarrollo. Podríamos decir que es un paso intermedio entre crear las aplicaciones absolutamente nativa y el desarrollo absolutamente multiplataforma.

¿Qué género de aplicaciones puedo desarrollar con estas herramientas?
Con Xamarin, podemos crear cualquier clase de aplicación/juego para las plataformas más usadas: iOS, Android y Windows. Tenemos un mapping del cien por ciento de las APIs nativas de cada plataforma + APIs comunes de .NET. Existen además de esto frameworks como MonoGame, que nos asisten aun al crear juegos.

¿Qué restricciones existen? ¿O bien qué género de aplicaciones móviles NO me aconsejarías desarrollar multiplataforma?
Virtualmente ninguna: La máxima de Xamarin es que cualquier cosa que puedas hacer con ObjectiveC, Swift o bien Java, la podrás redactar con Xamarin y C#. Además de esto como la UI es nativa, desarrollada para cada plataforma, el desempeño será buenísimo, plenamente equiparable a una aplicación Nativas. Hace poco Harry Cheung, uno de los veinte primeros ingenieros de Google, escribió un artículo en Medium equiparando el desempeño de Xamarin con Swift, ObjectiveC, Java, RoboVM, RubyMotion y J2ObjC. El resultado: eligió Xamarin para su proyecto. Podéis leer en el presente artículo de Medium porqué lo hizo.

Coste
Comprendo que el costo es una enorme ventaja: con un desarrollo tengo mis aplicaciones en tres markets: Apple, Android y Windows Phone.

¿Qué me puede valer desarrollar mis aplicaciones con tecnologías multiplataforma? La relación es de 1 a 3: ¿por el coste de una aplicación tengo 3?
El costo no es precisamente 1 a tres. Podríamos decir que es más en el orden de quince a tres o bien dos a tres, en dependencia de la dificultad de la interfaz de usuario. Tomemos un ejemplo: una aplicación con 3 pantallas: Login, lista de conciertos y detalle de un concierto.

– La lógica que efectúa el login, consigue los datos de los conciertos, efectúa la navegación… es absolutamente compartida entre las 3 plataformas.

– El diseño de cada pantalla, deberemos efectuarlo tres veces: una en iOS, una en Android y otra en Windows Phone.

La diferencia es, poniendo un costo redondo y al azar, que si una aplicación en todos y cada plataforma nos cuesta diez€, en nativo charlaríamos de treinta€. Con Xamarin, charlaríamos de entre quince euros y veinte.000€, lo que supone un ahorro notable. Mas alén del simple costo, está el ahorro en tiempo. En Nativo, podemos tardar un mes en desarrollar para cada plataforma, con lo que al final tardaríamos tres meses en suma. Con Xamarin las tendríamos en 1 mes y medio, eso nos deja considerablemente más tiempo para atender el lanzamiento, recoger datos y preparar nuevas versiones, nos deja ser más agiles en contestar a nuestros usuarios y corregir bugs, que además de esto corregimos una vez para las 3 plataformas, al tener el código compartido.

Actualizaciones
Si sale, afirmemos una nueva versión del sistema operativo de Apple, ¿debo actualizar las aplicaciones que tengo publicadas en los otros markets?

¿De qué forma me afectan las actualizaciones en los sistemas operativos?
Las actualizaciones no serán un inconveniente. Xamarin ha sabido sostenerse independiente de las 3 grandes compañías en el mercado móvil: Apple, Google y Microsoft. Sostiene relaciones muy angostas con las 3 y le deja hacer cosas como presentar una beta con todas y cada una de las APIs de iOS8 listas para utilizar, exactamente el mismo día que Apple presentó el sistema a los desarrolladores.

En lo que se refiere 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 deja actualizar cualquier plataforma separadamente del resto sin inconveniente. Las aplicaciones son completamente nativas, conque las actualizaciones de los sistemas operativos te afectarán del mismo modo que a una aplicación escrita de forma nativa. No existe diferencia en este punto.

Entradas relacionadas