Últimamente en mi puesto de trabajo hemos estado dándole vueltas a esta pregunta, ¿debemos hacer las aplicaciones móviles de forma nativa o usar algún framework para desarrollarlas de forma nativa? No es una respuesta fácil y depende de las circunstancias de cada proyecto.
¿De qué tipo de proyecto estamos hablando?
Es la primera pregunta que pienso que hay que hacerse, ¿es un proyecto interno para una compañía donde los usuarios pueden usar indistintamente dispositivos Android o iOS? ¿Es un proyecto para usuarios finales que será desplegado en los markets de cada plataforma? ¿Es un proyecto que es la base de la compañía y que será el producto referente de la misma?
En función de estas preguntas podremos tomar una decisión más o menos acertada, pero eso si, sabiendo que no hay verdad absoluta ni una regla que nos diga al 100% cual es la mejor decisión.
Es un proyecto para usuarios finales que será desplegado en los markets
Para este tipo de proyectos yo no tendría duda, optaría por aplicaciones 100% nativas tanto para Android como para iOS, aprovechando todo el potencial de las APIs nativas, además para este tipo de proyectos es muy importante el diseño gráfico y la navegación en la aplicación (usabilidad), más si cabe que la funcionalidad.
Es un proyecto empresarial para uso interno de sus empleados
Aquí es donde podemos tener más controversia a la hora de elegir cómo desarrollar nuestra aplicación, si es una aplicación pequeña y no sufrirá grandes cambios a lo largo del tiempo podemos hacerla en nativo para aprovechar todo el potencial de cada plataforma, ya que no nos llevará mucho tiempo y no tendrá un mantenimiento excesivo.
Si por el contrario es un proyecto grande y/o tendrá un gran mantenimiento a lo largo del tiempo, bien porque se vaya ampliando su funcionalidad o porque se vaya modificando su funcionamiento, aquí si optaría yo por otras alternativas como son las aplicaciones híbridas.
¿Que framework usamos para desarrollar las aplicaciones híbridas?
Esta es una gran pregunta que hay que hacerse antes de empezar con nuestra aplicación híbrida, ya que una vez empezado no tenemos vuelta atrás si no queremos tirar todo nuestro desarrollo y empezar de nuevo.
Tenemos varias alternativas, desde un desarrollo web con PhoneGap o Ionic o un desarrollo Cross-Plattform con Xamarin.
Si nuestro equipo de desarrollo viene del mundo web, usar una de las dos primeras alternativas puede ser una buena opción, ya que prácticamente no notarán el cambio de plataforma, pero hay que tener en cuenta que no todo lo que deseen podrá ser desarrollado con estos frameworks, ya que el acceso que tiene a la API de cada plataforma es limitado.
Con el tema de la usabilidad también tiene algunas limitaciones, ya que será necesario tener una buena hoja de estilos para que visualmente no veamos una aplicación de estilo iOS en un móvil Android o viceversa.
Con Xamarin en cambio, aunque no lo parezca estaremos desarrollando una aplicación 100% nativa en su fondo, tendremos una acceso completo a la API de cada plataforma y visualmente todos los componentes que introduzcamos se traducen en los componentes nativos de cada plaforma, con lo que conseguimos un aspecto visual nativo.
De cara al rendimiento las aplicaciones Cross-Plattform son mucho más eficiente que las nativas, podemos observarlo en el siguiente estudio:
- Cross-Platform Native apps loaded 25% faster than Hybrid apps (even for Hybrid HTML apps that were actually smaller in size than their Cross-Platform Native app contenders)
- Cross-Platform Native apps loaded large datasets 62% faster than Hybrid HTML apps
- Cross-Platform Native apps use on average 50% less memory than Hybrid HTML apps
- Cross-Platform Native apps use on average 76% less CPU than Hybrids HTML apps
- Cross-Platform Native apps can perform 22x faster than Hybrid HTML apps for CPU-intensive tasks
Fuente: Kevin Ford, Mobile Practice Lead at Magenic
Parece que con esto ya no hay dudas.. ¡Usemos Xamarin!
No es oro todo lo que reluce
No hay que correr tanto…
Xamarin aunque tiene un largo recorrido no se ha extendido tanto su uso como puede parecer, el principal motivo es que hasta hace no mucho que fue comprado por Microsoft había que pagar un dinero curioso por su uso (ahora ya es gratuito).
Esto hace que aunque haya bastante documentación, y bastante buena por cierto, no hay la misma que para el desarrollo nativo, ni tantas dudas resueltas en stackoverflow, con lo que partes de nuestro desarrollo se nos pueden atragantar un poco al principio.
Conclusión
Como veis no hay una respuesta absoluta, y todo dependerá del tipo de proyecto, la envergadura, el equipo con el que contemos… pero al menos espero que estas pequeñas reflexiones con las que me he encontrado a lo largo de estos años puedan serviros de ayuda.
¿es un proyecto interno para una compañía donde los usuarios pueden usar indistintamente dispositivos Android o iOS? ¿Es un proyecto para usuarios finales que será desplegado en los markets de cada plataforma? ¿Es un proyecto que es la base de la compañía y que será el producto referente de la misma?
Pingback: Desarrollo Multiplaforma con Flutter - Alberto Montes de Oca