Hace unos meses que estoy trabajando en un proyecto con Xamarin Forms y creo que es buen momento para empezar a hacer una serie de entradas sobre el tema y explicar mi experiencia utilizando esta plataforma.
Que es Xamarin
Xamarin es una plataforma que nos permite crear Apps nativas para iOS, Mac, Android, Windows Phone, Windows 8 y más. Además nos permite utilizar solo un lenguaje de programación «C#» y reducir tanto los perfiles como la cantidad de equipos involucrados en el desarrollo.
Ventajas
- Aplicaciones 100% nativas
- Interfaces Nativas
- Acceso a la API nativa del dispositivo
- Rendimiento 100% nativo
- Un solo lenguaje de programación C#
- IDEs sencillos
- Xamarin Studio: IDE propio
- Visual Studio
- Código compartido
- el 100% de la lógica de negocio puede compartirse entre las plataformas
- Técnicas para compartir el código:
- Proyectos compartidos: podemos utilizar directivas de compilación #if para utilizar dependiendo de las necesidades específicas de la plataforma.
- PCL «Portable Class Library»: librerías .NET compatibles con diferentes plataformas.
- Xamarin.Forms: nos permite crear interfaces nativas con más de 40 controles compatibles.
Arquitectura Xamarin Clásica
La forma de plantear el diseño de la App tenía que ser parecido a este:
- Core Library: Xamarin nos proporciona la posibilidad de crear código compartido en C# para reutilizar en todas las plataformas, Este código podríamos tener toda la lógica de negocio, la capa de acceso a datos y la capa de servicios. De esta manera solo tendremos una librería donde poner nuestra lógica y reducir el código repetido y facilitar el mantenimiento.
- Specific Platform layer: Aunque utilicemos código compartido siempre necesitaremos acceder a utilidades nativas de la plataforma y crear un interfaz de usuario específico para cada plataforma.
Xamarin Forms
Pero con la aparición de Xamarin.Forms ha cambiado mucho la forma de afrontar el diseño de la App y podemos tener una capa de interfaz común para diseñar nuestras interfaces multiplataforma. El resultado final son los controles nativos de la plataforma.
- Core Library: Lógica compartida
- Shares UI Code: Interfaz de usuario compartido.
- Specific Platform layer: acceso a recursos específicos de la plataforma.
Controles en Xamarin.Forms
Pages
Las páginas son controles contenedores que representan un Activity en Android, un View Controller en iOS y una Página en Windows Phone.
Layouts
Los layouts son contenedores de otros layouts o vistas. Lo utilizaremos para posicionar los controles dentro de las páginas.
Views
Los controles o widgets más comunes que utilizamos normalmente en las aplicaciones.
- BoxView: Control para pintar un rectángulo relleno de color.
- Button: Control tipo botón.
- DatePicker: Control para seleccionar fechas.
- Entry: Control para editar texto en una sola línea.
- Editor: Control para editar texto múltiples líneas.
- Image: Control para mostrar imágenes.
- Label: Control para mostrar texto de solo lectura.
- ListView: Control para mostrar una lista.
- OpenGLView: Control para mostrar contenido OpenGL.
- Picker: Control para seleccionar un elemento de una lista.
- ProgressBar: Control de barra de progreso.
- ActivityIndicator : Control visual para avisar que algo está en curso sin informar el progreso.
- SearchBar: Control de búsqueda.
- Slider: Control visual para la captura de un valor lineal.
- Stepper: Control para incrementar o reducir un valor numérico.
- Switch: Control visual para la selección on-off.
- TableView: Estructura contenedora de columnas y celdas.
- TimePicker: Control visual para la entrada de horas y minutos.
- WebView: Control contenedor de HTM
Cells
Celdas predefinidas para facilitar el uso en listas y TableViews.
- EntryCell: Celda especializada con un label para el título y un entry para la introcucción de datos.
- SwitchCell: Celda especializada con un label para el título y un switch para seleccionar.
- TextCell: Celda especializada con dos labels, no con el título y el otro par la descripción.
- ImageCell: Celda especializada con una imagen y dos labels, uno para el título y otro para la descripción.
Otras utilidades
Otras utilidades que nos serán de gran ayuda en el desarrollo y que veremos en otras entradas son:
- CustomRenderers: nos permite personalizar la visualización y el comportamiento de los controles para cada una de las plataformas.
- DependencyServices: nos permite acceder desde Xamarin.Forms a características nativas de cada plataforma, como podría ser el GPS, cámara, etc.
- MessagingCenter: Nos permite publicar y suscribirse a mensajes para comunicar nuestros ViewModels o diferentes componentes.
Espero que esta introducción os parezca interesante y pueda publicar más entradas sobre el tema que me parece súper interesante.