Introducción a la creación de aplicaciones multiplataforma

En esta guía se presenta primero la plataforma de Xamarin. Se explica cómo diseñar una aplicación multiplataforma para maximizar la reutilización del código. Después, por último, cómo ofrecer una experiencia nativa de alta calidad en plataformas móviles iOS y Android.

El enfoque que se usa en este documento se puede usar tanto para aplicaciones de productividad como para aplicaciones de juegos, pero el enfoque se centra en la productividad y la utilidad (aplicaciones que no son de juego). Consulte Visual Studio Tools para Unity para obtener instrucciones de desarrollo de juegos multiplataforma.

La frase "escribe el código una sola vez y ejecútalo en cualquier plataforma" se usa a menudo para ensalzar las virtudes de un único código base que se ejecuta sin modificar en varias plataformas. Aunque tiene la ventaja de reutilizar el código, ese enfoque tiene desventajas. Dos desventajas comunes son las aplicaciones que tienen un conjunto de características con un denominador común más bajo y una interfaz de usuario de aspecto genérico que no encaja bien en ninguna de las plataformas de destino.

Xamarin no es solo una plataforma de "escribe el código una sola vez y ejecútalo en cualquier plataforma", ya que uno de sus puntos fuertes es la capacidad de implementar interfaces de usuario nativas específicamente para cada plataforma. Sin embargo, con un diseño bien pensado, es posible compartir la mayoría del código de interfaz que no es de usuario y obtener lo mejor de ambos mundos. Escriba el código de lógica empresarial y el almacenamiento de datos una vez y presente las interfaces de usuario nativas en cada plataforma. En este documento se describe un enfoque arquitectónico general para lograr este objetivo.

Este es un resumen de los puntos clave para crear aplicaciones multiplataforma de Xamarin:

  • Usar C# : escriba las aplicaciones en C#. El código existente escrito en C# se puede migrar a iOS y Android mediante Xamarin fácilmente y se usa en aplicaciones de Windows.
  • Usar patrones de diseño de MVC o MVVM: desarrolle la interfaz de usuario de la aplicación mediante el patrón Model/View/Controller. Diseñe la aplicación mediante un enfoque modelo,vista/controlador o un enfoque Model/View/ViewModel donde haya una separación clara entre el "Modelo" y el resto. Determine qué partes de la aplicación usarán elementos nativos de la interfaz de usuario de cada plataforma (iOS, Android, Windows, Mac) y lo usarán como guía para dividir la aplicación en dos componentes: "Core" y "User-Interface".
  • Compilación de interfaces de usuario nativas: cada aplicación específica del sistema operativo proporciona una capa de interfaz de usuario diferente (implementada en C# con la ayuda de las herramientas de diseño de interfaz de usuario nativas):
  1. En iOS, use las API de UIKit para crear aplicaciones de aspecto nativo, mediante Storyboard para la capa de presentación, creada en Xcode.
  2. En Android, use Android.Views para crear aplicaciones de aspecto nativo, aprovechando el diseñador de interfaz de usuario de Xamarin.
  3. En Windows, usará XAML para la capa de presentación, creada en el diseñador de interfaz de usuario de Visual Studio o Blend.
  4. En Mac, usará Storyboard para la capa de presentación, creada en Xcode.

Los proyectos de Xamarin.Forms son compatibles con todas las plataformas y permiten crear interfaces de usuario que se pueden compartir entre plataformas mediante XAML de Xamarin.Forms.

La cantidad de reutilización de código dependerá en gran medida de la cantidad de código que se mantiene en el núcleo compartido y la cantidad de código específica de la interfaz de usuario. El código principal es cualquier cosa que no interactúe directamente con el usuario, sino que proporciona servicios para partes de la aplicación que recopilarán y mostrarán esta información.

Para aumentar la cantidad de reutilización de código, puede adoptar componentes multiplataforma que proporcionan servicios comunes en todos estos sistemas, como:

  1. SQLite-net para el almacenamiento SQL local,
  2. Complementos de Xamarin para acceder a funcionalidades específicas del dispositivo, como la cámara, los contactos y la geolocalización,
  3. Paquetes NuGet compatibles con proyectos de Xamarin, como Json.NET,
  4. Uso de características de .NET Framework para redes, servicios web, E/S y mucho más.

Algunos de estos componentes se implementan en el caso práctico de Tasky.

Separar código reutilizable en una biblioteca principal

Siguiendo el principio de separación de responsabilidad mediante la migración por capas de la arquitectura de la aplicación y, a continuación, el traslado de la funcionalidad básica independiente de la plataforma a una biblioteca principal reutilizable, puede maximizar el uso compartido de código entre plataformas, como se muestra en la ilustración siguiente:

By following the principle of separation of responsibility by layering your application architecture and then moving core functionality that is platform agnostic into a reusable core library, you can maximize code sharing across platforms

Casos prácticos

Hay un caso práctico que acompaña a este documento: Tasky Pro. En cada caso práctico se describe la implementación de los conceptos descritos en este documento en un ejemplo real. Es de código abierto y está disponible en GitHub.