Top Banner
CREANDO APPS COMPARTIENDO AL MÁXIMO Estructura, trucos y otros aspectos de interes con el objetivo de compartir la mayor cantidad de código possible entre plataformas.
61

Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

Aug 06, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

CREANDO APPS COMPARTIENDO

AL MÁXIMOEstructura, trucos y otros aspectos de interes con el objetivo de compartir la

mayor cantidad de código possible entre plataformas.

Page 2: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Javier SuárezXAML Team Lead BraventMicrosoft MVP Windows Platform Development

• Blog: http://geeks.ms/blogs/jsuarez• Email: [email protected]• Twitter: @jsuarezruiz

Page 3: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

EL PROBLEMA

Creas la misma Appvarias veces

Page 4: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

EL ENFOQUE “ESCRIBE UNA VEZ” PARA TODO

Mínimo DenominadorComún

Page 5: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

EL ENFOQUE DE XAMARIN

Nativo compartiendocódigo

Page 6: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

DEMOPrimera App Xamarin

Page 7: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

COMPARATIVA DE PLATAFORMAS MÓVILES NATIVOS

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Xcode Android Studio

Visual Studio

ObjectiveC o Swift

Java C#

Storyboard AXML XAMLMVC MVC MVVMPatrón diseño

Page 8: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

COMPARATIVA DE PLATAFORMAS MÓVILES XAMARIN

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Visual Studio Visual Studio Visual Studio

C# C# C#

Storyboard AXML XAMLMVVM MVVM MVVMPatrón diseño

Page 9: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

MVVM

View

ViewM

odel

Model

get/set PropiedadesComandos

Notifica cambios

C#

Models

ViewView

ViewM

odelView

Model

ModelM

odel

Cross PlatformEspecífico de la Plataforma

Page 10: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

PERO… ¿PORQUE MVVM?

Mayor facilidad para mantener, extender y compartir el código.Más facilidad a la hora de colaborar.Testing.Más fácil de diseñar.

Page 11: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

MVVMCROSS

•Cross Platform MVVM Development Framework•Gratuito, Open Source•Soporta

•WP 7, 8, 8.1•WPF•WinRT•Xamarin.Android•Xamarin.iOS•Xamarin.Mac

•AKA Mvx

Page 12: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

PORTABLE CLASS LIBRARY

•1 Librería•Multiples Platformas•Incluyendo:• Xamarin.Android• Xamarin.iOS

Page 13: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

CARACTERÍSTICAS DE UNA PORTABLE CLASS LIBRARY

• Código compartido centralizado• Se depura igual que si el código estuviese en

un Proyecto específico.

• Compartir Proyecto/Assembly• NuGet

Page 14: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

MVVMCross & PCL

View

ViewM

odel

Model

PropiedadesComandos

Notifica cambios

C#

Model

ViewView

ViewM

odelView

Model

ModelM

odel

Cross Platform -PCLEspecífico de Plataforma

Page 15: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Binding OneWay

PersonViewModel

FirstName

LastName

DateOfBirth

First Name

Jon

Last Name

Doe

Date of birth

12/07/1989

Page 16: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UI Syntax

Page 17: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Two Way Binding

PersonViewModel

FirstName

LastName

DateOfBirth

First Name

Jon

Last Name

Doe

Date of birth

12/07/1989

Page 18: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UI Syntax

Page 19: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Value Conversion

PersonViewModel

FirstName

LastName

DateOfBirth

First Name

Jon

Last Name

Doe

Age

24

“Age” Conversion

Page 20: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

IMvxValueConverter

Page 21: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

AgeValueConverter

Page 22: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UI Syntax

Page 23: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UI Syntax

Page 24: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Acciones (Comandos)

PersonViewModel

FirstName

LastName

DateOfBirth

First Name

Jon

Last Name

Doe

Date of birth

12/07/1989

AddCommand

Page 25: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

ICommand

Page 26: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

ViewModel Command

Page 27: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UI Syntax

Page 28: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

DEMOUtilizando MVVMCross

Page 29: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Xamarin + Xamarin.FormsCon Xamarin.Forms:

Se comparte más, controles

compartidos

El enfoque tradicional de Xamarin

Shared UI Code

Page 30: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Xamarin + Xamarin.Forms

• Permite crear facilmente y con rapidez interfaces de usuario nativas compartidas

• Los elementos de Xamarin.Forms son mapeados a elementos nativos y behaviors propios de cada plataforma

• Podemos mezclar Xamarin.Forms con APIs nativas

Page 31: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Plataformas soportadas por Xamarin.FormsSoporta:

• Android 4.0+

• iOS 6.1+

• Windows Phone 8.0 (Silverlight) & Windows Phone 8.1 (WinRT)

Page 32: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Que incluye 40+ tipos de páginas, Layouts,

y controles Se puede utilizer code behind

o XAML

Two-way Data Binding

Navegación

API de animaciones

Servicio de dependencias

Messaging Center

Page 33: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Páginas

Content MasterDetail Navigation Tabbed Carousel

Page 34: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Layouts

Stack Absolute Relative Grid ContentView

ScrollView Frame

Page 35: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Controles

ActivityIndicator

BoxView Button DatePicker Editor

Entry Image Label ListView Map

OpenGLView Picker ProgressBar SearchBar Slider

Stepper TableView TimePicker WebView EntryCell

ImageCell SwitchCell TextCell ViewCell

Page 36: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Arquitectura de Apps con Xamarin.Forms

View

ViewM

odel

Model

PropiedadesComandos

Notifica cambios

C#

Model

ViewView

ViewM

odelView

Model

ModelM

odel

Cross Platform –PCL o Shared

Page 37: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

COMPARATIVA DE PLATAFORMAS MÓVILES NATIVO

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Xcode Android Studio

Visual Studio

ObjectiveC o Swift

Java C#

Storyboard AXML XAMLMVC MVC MVVMPatrón diseño

Page 38: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

DEMOXamarin.Forms utilizando MVVM

Page 39: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.¿Qué podemos compartir con este planteamiento?

Page 40: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Page 41: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

El enfoque de Xamarin

Con Xamarin.Forms:

Se comparte más, controles

compartidos

El enfoque tradicional de Xamarin

Shared UI Code

Page 42: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Page 43: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

TÉCNICAS DE REUTILIZACIÓN DE CÓDIGO

• Copiar y pegar.• Mismo código

duplicado.• Difícil de mantener.• Evitar en lo posible.

Ctrl-C, Ctrl-V

• Modelo• VistaModelo• Vista

MVVM

• Enlaces simbólicos.

• Depende del lenguaje.

Enlazado de ficheros

• Permite mantener código específico de cada plataforma.

• Por contra, multiplica las ramas a mantener.

Compilación Condicional

• Código manejado común a las plataformas.

Portable Class Library

Page 44: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

MVVM EN APLICACIONES UNIVERSALES

Vista VistaModelo

Modelo

Modelo

MainView.Xaml

MainViewModel.cs

Data Binding

Comandos

Interfaz de Usuario Lógica de Negocio

Lógica de Negocio

Lógica de Presentación

Page 45: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.¿Y todo esto con una App “real”?

Page 46: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

Page 47: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.Utilizando Xamarin Classic

Page 48: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

COMPARATIVA DE PLATAFORMAS MÓVILES XAMARIN

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Visual Studio Visual Studio Visual Studio

C# C# C#

Storyboard AXML XAMLMVVM MVVM MVVMPatrón diseño

Page 49: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

MVVM

View

ViewM

odel

Model

get/set PropiedadesComandos

Notifica cambios

C#

Models

ViewView

ViewM

odelView

Model

ModelM

odel

Cross PlatformEspecífico de la Plataforma

Page 50: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

DEMONuestra App utilizando MVVMCross

Page 51: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.Utilizando Xamarin.Forms

Page 52: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

COMPARATIVA DE PLATAFORMAS MÓVILES XAMARIN

IDE

Lenguaje

Vistas

iOS Android Windows Phone

Visual Studio Visual Studio Visual Studio

C# C# C#

XAML XAML XAMLMVVM MVVM MVVMPatrón diseño

Page 53: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

ARQUITECTURA DE APPS CON XAMARIN.FORMS

View

ViewM

odel

Model

PropiedadesComandos

Notifica cambios

C#

Model

ViewView

ViewM

odelView

Model

ModelM

odel

Cross Platform –PCL o Shared

Page 54: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

DEMOAhora utilizando Xamarin.Forms

Page 55: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UTILIZANDO NATIVO

Web Services

Web Services Backend C#

App

Services Services Services

View View View

ViewModel Controller Controller

App App

Web Services Backend C# Web Services Backend C#

Page 56: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UTILIZANDO XAMARIN CLASSIC

Web Services

Web Services Backend C#

App

Services

Services Services Services

Model

View Model

View View View

Page 57: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

UTILIZANDO XAMARIN.FORMS

Web Services

Web Services Backend C#

App

Services

Services (Implementation) Services (Implementation) Services (Implementation)

Model

View Model

View (Custom Render) View (Custom Render) View (Custom Render)

View

Page 58: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

CONCLUSIONES RÁPIDAS

1. Siendo ordenado y siguiendo una serie de patrones podemos compartir entre el 65% y el 90% del código de una App móvil multiplataforma.

2. Xamarin.Forms no es siempre la solución más ideal dependiendo de las características del Proyecto.

Page 59: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

¿PREGUNTAS y RESPUESTAS?Dudas?

P&R

Page 60: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

GRACIAS a TODOSPor vuestro tiempo!

Javier SuárezMicrosoft MVP Windows Platform Development

• Blog: http://geeks.ms/blogs/jsuarez• Email: [email protected]• Twitter: @jsuarezruiz

Page 61: Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin

COMPARTIR AL MÁXIMOMOBILE DEV DAY

.

.

CREANDO APPS COMPARTIENDO AL MÁXIMOEstructura, trucos y otros aspectos de interes con el objetivo de compartir la mayor cantidad de código possible entre plataformas.