Xamarin Forms uno para todos !!!

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:

xamarin_old

  1. 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.
  2. 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.

xamarin_Forms

  1. Core Library: Lógica compartida
  2. Shares UI Code: Interfaz de usuario compartido.
  3. 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.

pages

Layouts

Los layouts son contenedores de otros layouts o vistas. Lo utilizaremos para posicionar los controles dentro de las páginas.

Layouts

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.

14 comentarios en “Xamarin Forms uno para todos !!!”

  1. Hace tiempo que tenia ganas de empezar a investigar con Xamarin, pero todavía no he tenido la oportunidad de trastear con él, seguiré muy de cerca todos tus artículos Marc!

    Un saludo y muchas gracias

  2. Muy interesante la introducción Marc.
    Realmente por lo que expones creo que Xamarin Forms simplificará mucho la parte de diseñar la interfaz.
    Podrías incluir algún enlace a material de referencia para un inicio rápido en la plataforma?

    Gracias!

  3. Hola Marc, estoy intentando crear con xamarin forms lo que es en android un viewpager. He visto que está el tabbedpage con el cual puedes cambiar de contenido a través de pestañas pero sin embargo no permite la opcion swipe tal y como permite android de manera nativa. Por otro lado esta el carousel page donde si que se hace swipe entre los distintos contenidos pero no existen las tabs. Conoces alguna forma de que el tabbedpage permita hacer swipe entre las distintas tabs?
    Gracias

    1. El control actual no lo permite, pero puedes hacer que se comporte de una manera personalizada para una plataforma en concreto con un custom render. De esa manera estas sobrescribiendo el control para por ejemplo solo Android.

      Espero hablar sobre el tema en breve. 😉

  4. Marc tengo una duda con todo esto de Xamarin.Forms. Yo estoy usando Xamarin junto con MVVMCross pero no con Forms. Ya tengo Windows store, WindowsPhone y ahora también Android. En breve iOS.

    Sabes como casa Xamarin.Forms con MvvmCross? Para el Core (PCL que entiendo que con Forms le llaman Services), tema de bindings, y los plugins que hay actualmente para acceder a cada plataforma de forma nativa (converters, camara, storage… etc).
    ¿O acaso esto directamente no es necesario y se usa de manera distinta?

    Un abrazo crack!!

    1. Huy eso es mucha información que espero ir respondiendo con diferentes artículos. Ahora que ya tenemos la interfaz con Xamarin Forms y los PCL con INotifyPropertyChanged ya no es tan necesario ek MvvmCross porque se soporta el MVVM de forma nativa tanto en el XAML como por código.

      Para acceder al dispositivo se utilizan servicios con DI también nativo.

      La verdad es que se lo han currado mucho y nos aportan una gran variedad de posibilidades que simplifican al máximo el desarrollo.

      Lo único malo es que la mayoría de librerías ya no funcionan con el nuevo sistema y tendrán que ir apareciendo nuevas.

      Nos vemos Sergio 😉

      PD: cuando quieras nos vemos y hablamos sobre el tema 😉

      1. Gracias por la info! tendré que hacer un proyectito de prueba para mirar esto que me dices en tal caso!
        La verdad que pinta muy bien!
        Pues chiket! Somos «casi» vecinos de oficina si no nos vemos es porque no quieres! jeje

  5. Buen artículo Marc, ahora que ha pasado un poco de tiempo podrías comentar tus impresiones sobre Forms? yo empecé con muchas ganas pero me he dado cuenta que los casos de uso se van acotando. He escrito sobre ello aquí, no se si querrías añadir algo: http://www.oscarcalvo.com/pensamientos-sobre-xamarin-forms/

    Por cierto el 12 de noviembre hacemos un evento sobre Xamarin Forms en Madrid, entiendo que te queda lejos pero si te coincide por Madrid ahí estaremos: http://www.meetup.com/Madrid-Xamarin-Developer-Group/events/226001400/?_locale=es

    Gracias!

  6. Hola Oscar, nosotros hemos hecho aplicaciones con Xamarin Forms, es como todo, solo tienes que conocer las limitaciones y no intentar utilizarlo para todo. Lo del 12 lo veo dificil 😉

  7. Buenas tardes ,
    Esta muy interesante tu articulo , me estoy motivando a contruir mis aplicaciones utilizando esa tecnologia , me gustaria que me aclare una duda que tengo , en la documentación oficial no veo nada que hable con respecto a acceder a los recurso del dispositivo ejemplo tirar y mostrar fotos de mi galeria ¿ Es posible hacer ese tipo de aplicaciones ?
    saludo

  8. Buenas tardes ,

    Esta muy interesante tu articulo , me estoy motivando a contruir mis aplicaciones utilizando esa tecnologia , me gustaria que me aclare una duda que tengo , en la documentación oficial no veo nada que hable con respecto a acceder a los recurso del dispositivo ejemplo tirar y mostrar fotos de mi galeria ¿ Es posible hacer ese tipo de aplicaciones ?

    saludo

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio