Xamarin 4 Platforms

Desarrollo de aplicaciones multi-plataforma con Xamarin

June 10, 2013

Uno de los mayores desafíos a la hora de desarrollar aplicaciones multiplataforma es mantener la consistencia en todos los entornos. Es necesario coordinar los diferentes equipos de trabajo en paralelo para mantener unos tiempos de desarrollo razonables y eso dificulta reutilizar los hallazgos de una plataforma en las demás. Por eso, siempre hemos estado atentos a las diferentes alternativas de desarrollo de aplicaciones multi-plataforma, como PhoneGap, Corona SDK, Marmalade SDK, Appcelerator Titanium, Unity3D, etc.

crossPlatformImage

La mayoría de soluciones están enfocadas al desarrollo de videojuegos, dejando de lado la experiencia nativa que se busca en aplicaciones corporativas. Cada solución tiene sus ventajas y sus inconvenientes, pero realmente ninguna nos ofrecía la calidad, rendimiento y consistencia de las aplicaciones nativas junto a una experiencia de desarrollo placentera como la que ofrecen los fabricantes de sistemas operativos con sus entornos de desarrollo (XCode, Eclipse, Visual Studio).

En nuestro radar entró Xamarin, anteriormente conocido como MonoTouch y MonoDroid, como una sólida alternativa para el desarrollo de aplicaciones nativas multi-plataforma. El concepto es sencillo: utilizar C# y .NET para la compilación de aplicaciones nativas para Android o iOS.

Basándose en este sencillo concepto, se abre un nuevo abanico de posibilidades, empezando por la siempre deseada reutilización de código. En cualquier aplicación multi-plataforma que hayamos desarrollado, hay módulos iOS que hemos tenido que portar a Java, o módulos Android que hemos tenido que portar a Objective-C. Este proceso hay que multiplicarlo por cada nueva plataforma. Recordemos que cada vez que se escribe código nuevo, se introducen errores en el código (quien diga lo contrario es que no prueba su código), para evitar errores se escriben tests, que a su vez pueden contener errores, y por ello existen ciclos de calidad en el Software.

Si todas las plataformas en las que desarrollamos utilizan la misma tecnología, no es necesario reescribir el código, podemos utilizar el mismo código que hemos escrito para la plataforma anterior, que ya está probado y tiene sus propios tests, por lo que no sólo no tenemos que reimplementar la misma funcionalidad de nuevo, tampoco tenemos que escribir nuevos tests y tenemos cierta garantía de que debería funcionar como debe. Si no es así (cosa que probablemente sea cierta), al detectar un error y subsanarlo en el código compartido, la corrección se aplica a todas las plataformas al volver a compilar. Y como hemos escrito tests para probar este nuevo error (es así, ¿verdad?) nos aseguramos de que ese error no vuelve a aparecer en ninguna plataforma.

Xamarin 4 Platforms

Resulta que, casualidades de la vida, aplicaciones nativas Windows Phone 7, Windows Phone 8, Windows 8 y web pueden ser escritas usando C# y .NET, por lo que la reutilización de código se dispara y los tiempos de desarrollo descienden a límites insospechados cuantas más plataformas soportemos. Además, el entorno de desarrollo es el mismo en todas ellas, lo que mejora la consistencia y facilita la transición de un entorno a otro.

Hasta aquí todo suena como un sueño hecho realidad, ahora bien, no es magia todo lo que hay en Oz, querida Dorothy. Qué es código reutilizable y qué no es la principal preocupación para sacar el mayor provecho posible a Xamarin. Cuanto mayor cantidad de funcionalidad pueda ser desarrollada de forma que pueda ser utilizada, mejor para todos. Del código reutilizable hay que eliminar todo lo que esté relacionado con manejo de interfaces nativos, ya que es estrictamente dependiente del sistema operativo destino, así como integraciones con sistemas de ficheros y, en general, todos los frameworks que sean específicos de cada plataforma, como iCloud o GameCenter en iOS o comprobaciones de licencias de Google Play en Android.

Aunque cierta parte del código no sea directamente reutilizable, podemos utilizar técnicas como la inversión de control (IoC por sus siglas en inglés) para aumentar el código compartido desacoplando los módulos nativos mediante el uso de interfaces y haciendo uso de otros Frameworks que encapsulan el acceso a capacidades nativas del dispositivo utilizando la misma técnica.

Visita cómo mejorar la reutilización de código con MvvmCross para una optimización mayor de las funcionalidades compartidas.

Por Guillermo Gutiérrez

Categorias: Desarrollo, Xamarin