SlideShare una empresa de Scribd logo
Abril 2016 Diplomado Dispositivos Móviles 1
Módulo de Xamarin Forms
Parte 1: Introducción a Xamarin
Abril 2016 Diplomado Dispositivos Móviles 2
Sorey García (@soreygarcia)
Consultora en Movilidad
y Freelancer XAML
Ingenieria Informatica
Politécnico Jaime Isaza Cadavid
Especialista en Desarrollo de Software
Universidad EAFIT
Docente de Cátedra
Institución Universitaria Pascual Bravo
Co-fundadora de la comunidad de
Desarrolladores Avanet y Codies
Instructora
Abril 2016 Diplomado Dispositivos Móviles 3
Abril 2016 Diplomado Dispositivos Móviles 4
Commercial LicenseOpen Source License / Free available
4
From .NET to Xamarin
Windows
.NET Framework
Linux
Mono
iOS
MonoTouch
Android
Mono for Android
iOS
Xamarin.iOS
Android
Xamarin.Android
Abril 2016 Diplomado Dispositivos Móviles 5
Silo
Approach
Crear una App
multiples
veces
Abril 2016 Diplomado Dispositivos Móviles 6
Retos del desarrollo nativo
• Mac OS X
• XCode
• Objective-C
• Swift
• iOS SDK
• Apple Tools
• OS
• Eclipse or Android Studio
or…
• Java
• Android SDK
• SDK Tools
• Windows OS
• Visual Studio
• C#
• .NET Framework
• Windows Phone SDK
Abril 2016 Diplomado Dispositivos Móviles 7
Write Once,
Run Anywhere
Approach
Mínimo común
denominador App Generation
Abril 2016 Diplomado Dispositivos Móviles 8
Retos del desarrollo híbrido
• Mínimo común denominador
• Fragmentación del Browser
• Desarrollo y diseño para 1 plataforma,
afecta las experiencias de usuario
Abril 2016 Diplomado Dispositivos Móviles 9
Abril 2016 Diplomado Dispositivos Móviles 10
Algunas opciones
Abril 2016 Diplomado Dispositivos Móviles 11
Abril 2016 Diplomado Dispositivos Móviles 12
Xamarin
Approach
Comparte
código nativo
Abril 2016 Diplomado Dispositivos Móviles 13
Comparaciones por plataforma
Abril 2016 Diplomado Dispositivos Móviles 14
@implementation MSViewController
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (IBAction)OnButtonDown:(id)sender {
UIAlertView* view =
[[UIAlertView alloc]init];
[view setTitle:@"Hello World"];
[view setMessage: @"How are you?”];
[view addButtonWithTitle:@"OK"];
[view show];
}
@end
public partial class iOSAppViewController :
UIViewController
{
public iOSAppViewController (IntPtr handle) :
base (handle){
}
public override void ViewDidLoad (){
base.ViewDidLoad ();
}
partial void OnButtonDown (UIButton sender)
{
UIAlertView view = new UIAlertView();
view.Title = "Hello World" ;
view.Message = "How are you? " ;
view.AddButton ("OK");
view.Show();
}
iOS
Abril 2016 Diplomado Dispositivos Móviles 15
public class MyActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
Button myBtn = (Button) this.findViewById( R.id.clickMe);
myBtn.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View view) {
AlertDialog.Builder builder = new
AlertDialog.Builder(MyActivity.this) ;
builder.setTitle( "Hello World")
.setMessage("How are you?")
.setPositiveButton( "OK", new
DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface
dialogInterface, int i) {
dialogInterface.dismiss();
}}) .show();
}});
}
}
[Activity (Label = "AndroidApp", MainLauncher = true, Icon =
"@drawable/icon")]
public class MainActivity : Activity {
protected override void OnCreate (Bundle bundle)
{
base.OnCreate (bundle);
SetContentView (Resource.Layout.Main);
Button button = FindViewById<Button> (Resource.Id.me);
button.Click += delegate {
AlertDialog.Builder builder = new AlertDialog.Builder
(this );
AlertDialog dialog = null ;
builder.SetTitle ( "Hello World")
.SetMessage ( "How are you")
.SetPositiveButton( "OK" , delegate {
dialog.Dismiss(); } );
dialog = builder.Show ();
} ;
}
}
Android
Abril 2016 Diplomado Dispositivos Móviles 16
¿Por qué nativo?
Xamarin genera experiencias nativas.
Native User Interfaces Native API Access Native Performance
Abril 2016 Diplomado Dispositivos Móviles 17
Windows APIs
100% coverage
Abril 2016 Diplomado Dispositivos Móviles 18
… or iOS APIs
100% coverage
Abril 2016 Diplomado Dispositivos Móviles 19
… or Android APIs
100% coverage
Abril 2016 Diplomado Dispositivos Móviles 20
Compilación Nativa
Xamarin.iOS does full Ahead Of Time (AOT)
compilation to produce an ARM binary for
Apple’s App Store.
Xamarin.Android takes advantage of Just In
Time (JIT) compilation on the Android
device.
Abril 2016 Diplomado Dispositivos Móviles 21
Cualquier cosa que pueda hacerse en Objective-C or
Java puede hacerse en C# con Xamarin usando Visual
Studio o Xamarin Studio
Abril 2016 Diplomado Dispositivos Móviles 22
Abril 2016 Diplomado Dispositivos Móviles 23
Share Code: Portable Class Libraries
Abril 2016 Diplomado Dispositivos Móviles 24
NuGet
Abril 2016 Diplomado Dispositivos Móviles 25
Shared Projects
Abril 2016 Diplomado Dispositivos Móviles 26
Linked
Files
Compiler
Directives
Abril 2016 Diplomado Dispositivos Móviles 27
Separación de responsabilidades
UserInterface
AppLogic
General Model-View-ViewModel (MVVM)
Abril 2016 Diplomado Dispositivos Móviles 28
Abril 2016 Diplomado Dispositivos Móviles 29
Xamarin + Xamarin Forms
Abril 2016 Diplomado Dispositivos Móviles 30
 40+ Pages, Layouts, and Controls
 Build from code behind or XAML
 Two-way Data Binding
 Navigation
 Animation API
 Dependency Service
 Messaging Center
Xamarin.Forms
Shared UI Code
Abril 2016 Diplomado Dispositivos Móviles 31
Xamarin’s Unique Approach
Shared C# codebase • 100% native API access • High performance
iOS C# UI Windows C# UIAndroid C# UI
Shared C# Mobile C# Server
Linux/Mono
CoreCLRAzure
Shared C# Client/Server
Xamarin.Forms: Interfaces Nativas con Código Compartido
Use a single API to generate native, platform-
specific user interfaces
At runtime, each Xamarin.Forms page and its
controls are mapped to platform-specific native
UI elements
Abril 2016 Diplomado Dispositivos Móviles 33
Pages
Abril 2016 Diplomado Dispositivos Móviles 34
Layouts
Abril 2016 Diplomado Dispositivos Móviles 35
Controls
ActivityIndicator BoxView Button DatePicker Editor
Entry Image Label ListView Map
OpenGLView Picker ProgressBar SearchBar Slider
Stepper TableView TimePicker WebView EntryCell
ImageCell SwitchCell TextCell ViewCell
Abril 2016 Diplomado Dispositivos Móviles 36
Cells
• EntryCell
• SwitchCell
• TextCell
• ImageCell
http://developer.xamarin.com/guides/cross-platform/xamarin-forms/controls/cells/
Abril 2016 Diplomado Dispositivos Móviles 37
Controles de terceros
Abril 2016 Diplomado Dispositivos Móviles 38
http://www.genymotion.com/
Emuladores
Abril 2016 Diplomado Dispositivos Móviles 39
Plataformas Soportadas Xamarin Forms
• Android 4.0.3 o Superior
• iOS 6.1 o Superior
• Windows Phone y Windows 8.1
• Windows 10 UWP
Abril 2016 Diplomado Dispositivos Móviles 40
Microsoft adquirió Xamarin
Abril 2016 Diplomado Dispositivos Móviles 41
Xamarin Test Cloud
Abril 2016 Diplomado Dispositivos Móviles 42
Xamarin Insights
Abril 2016 Diplomado Dispositivos Móviles 43
Ventajas y Desventajas
VENTAJAS
• Se escribe el código solo una vez
• Mantiene la experiencia de usuario propia de cada plataforma.
• Se permite el acceso a funciones nativas a través de Inyección de Dependencias.
• No es necesario conocer todo acerca de las plataformas nativas
• Puedes crear código XAML y aprovechar la potencia de MVVM
DESVENTAJAS
• Es un poco nuevo así que es necesario adaptarse a lo que existe, lo que limita en cuanto a
crear UX que demande demasiado esfuerzo gráfico.
Xamarin.Forms se recomienda para
• Start learning platform specifics – in .NET.
• Prototype
• Data-driven, task-oriented
• multi-platform apps
• Recommended for:
• Lists
• Item selections
• Change properties
• Update backend
NO se recomienda en los siguientes casos
• Complex/customized interfaces -
nuanced experiences
• Android Material Design, iOS
transitions
• Extensive platform-specific capability
• Slow-mo camera, fingerprint
scanner (iOS 6)
• Not Recommended for:
• UI-intensive apps with complex
gestures
Abril 2016 Diplomado Dispositivos Móviles 46
• Mejoras de integración con iOS 9 y Android 6
• Material Design (AppCompat)
• Optimización del rendimiento
• XAML pre compilado
• Windows 10 (UWP) Preview
• Nuevos gestos
• Efectos, templates…
Xamarin.Forms 2.0
Abril 2016 Diplomado Dispositivos Móviles 47
evolve.xamarin.com
Abril 2016 Diplomado Dispositivos Móviles 48
Módulo de Xamarin Forms
Parte 2: Consideraciones de Publicación
Abril 2016 Diplomado Dispositivos Móviles 49
XAML y C# Everywhere
La mayoría de recursos en
internet enseñan Xamarin
Forms con Code Behind.
Sin embargo la
recomendación es
aprender y trabajar con
XAML y aprovechar su
enfoque a la separación de
responsabilidades entre el
diseño y la codificación.
Abril 2016 Diplomado Dispositivos Móviles 50
Centros de Desarrollo
Abril 2016 Diplomado Dispositivos Móviles 51
Apple Developer Center
• Cuenta de Desarrollador o Compañia: 99 USD Anuales
• Cuenta Empresarial: 299 USD Anuales
• En el Apple Developer Center se gestiona la cuenta, certificados y dispositivos
• En iTunes Connect se publican las aplicaciones
• Invitaciones a beta tester via correo desde iTunes Connect subiendo un Bundle a
TestFlight
• Nivel de complejidad: Alto
• Nivel de exigencia en calidad: Alta
• Tiempo de publicación: Días (Entre 7 y 12)
• http://appreviewtimes.com/
Abril 2016 Diplomado Dispositivos Móviles 52
Windows Store y Windows Phone Store
Windows Phone Store y Windows Store
• 19 USD de por vida para desarrolladores
• 99 USD de por vida para compañías
• Invitaciones a beta tester via correo subiendo un paquete.
• En el Developer Benefits Center se obtienen beneficios adicionales con suscripciones
• Nivel de Complejidad: Medio
• Nivel de exigencia en calidad: Baja
• Tiempo de publicación: Horas máximo 1 o 2 días, en revisiones posteriores pueden pedirte
mejorar la aplicación o puede ser removida de la tienda.
Abril 2016 Diplomado Dispositivos Móviles 53
Play Store Developer Center
Google Play Store
• 25 USD de por vida
• En Google Play Store de gestionan y publican las aplicaciones
• Se puede enviar versiones Beta a grupos de usuarios
• Nivel de complejidad: Bajo
• Nivel de exigencia en calidad: Baja
• Tiempo de publicación: Horas
Abril 2016 Diplomado Dispositivos Móviles 54
Herramientas y Modos de Ejecución
Abril 2016 Diplomado Dispositivos Móviles 55
Herramientas
Xamarin Studio en MAC o Visual Studio 2015 Update 2 en Windows
Android
• Android SDK y APIs necesarias según soporte que se dese dar
• Dispositivo, Visual Studio Emulator for Android, GenyMotion o Android Player
Windows Phone y Windows
• Windows SDK
• Dispositivo o Emuladores del SDK
iOS
• Xcode
• Dispositivo, Emuladores de Xcode
• Xamarin instalado en el MAC aunque se use Windows
Abril 2016 Diplomado Dispositivos Móviles 56
Debug y Release
Android
• No requiere de ninguna consideración para ejecutar en ambos modos.
• Para entregar un APK de prueba se necesita generar un KeyStore
• Solo se pueden publicar paquetes en release
Windows Phone y Windows
• No requiere de ninguna consideración para ejecutar en ambos modos.
• Para generar el appx de prueba se necesita firmar los paquetes con Visual
• Las apps Universales de Windows 10 están aún en Preview
• Para probar paquetes en dispositivos, se debe desbloquear el dispositivo para desarrollo
• Solo se pueden publicar paquetes en release
Abril 2016 Diplomado Dispositivos Móviles 57
Debug y Release
iOS
• Requiere cuenta de desarrollador autorizada
• Requiere configurar certificados de desarrollo bajados desde del developer center e
instalados en el KeyChain para Debug o Adhoc / AppStore.
• Se requiere generar el AppId de la aplicación en desarrollo
• Para generar IPA (Paquetes en Adhoc para prueba en dispositivos) se requiere registrar el
equipo en la cuenta de desarrollador y habilitar el dispositivo en el certificado especifico de
desarrollo o distribución
• Solo se pueden publicar paquetes generados en modo AppStore.
Abril 2016 Diplomado Dispositivos Móviles 58
APIs por Plataforma
(Mapas y Notificaciones)
Abril 2016 Diplomado Dispositivos Móviles 59
APIs para Mapas Nativos
Google
• Los mapas requieren configurar el SHA del Key Store en la consola de
desarrolladores y solicitar las llaves para Debug y para Release para Google
Maps Android API v2
• Las notificaciones requieren configurar una llave para Google Cloud
Messaging for Android
• Consola de desarrolladores: https://code.google.com/apis/console/
Abril 2016 Diplomado Dispositivos Móviles 60
APIs para Mapas Nativos
iOS
• Los mapas no requieren nada adicional
• Se requiere habilitar el certificado de Notificaciones Push para el AppId
correspondiente a la app que se esta desarrollando uno para Debug y otro
para Adhoc / AppStore
Windows Phone y Windows
• Los mapas requieren una llave para mapas de Bing >
https://www.bingmapsportal.com/
• Las notificaciones requieren de llaves generadas en los Store para cada una
de las aplicaciones publicadas.
Abril 2016 Diplomado Dispositivos Móviles 61
Azure Service Bus
Debido a la complejidad del envió de notificaciones que tiene cada
plataforma existen servicios como el de Azure Service Bus que centraliza los
envíos de notificaciones.
• iOS: Debe configurarse el certificado generado en la máquina donde se está compilando
para publicar.
• Android: Debe configurarse la llave entregada en la consola de desarrolladores
• Windows Phone: debe configurarse la llave entregada en el Windows Phone Store.
Abril 2016 Diplomado Dispositivos Móviles 62
Base de datos local
Abril 2016 Diplomado Dispositivos Móviles 63
SQLite
• SQLite provee una base de datos local por plataforma.
• Esta base de datos es almacenada en el sistema de archivos.
• SQLite está soportada nativamente por iOS y Android pero no en Windows Phone o
Windows. Debe instalarse Sqlite for Windows y Sqlite for Windows Phone
Abril 2016 Diplomado Dispositivos Móviles 64
SQLite.NET Async (ORM)
Abril 2016 Diplomado Dispositivos Móviles 65
Custom Controls, Renderers y Bindings
Abril 2016 Diplomado Dispositivos Móviles 66
Controles Extendidos y Custom Controls
• El comportamiento de los controles puede ser extendido creando clases
que heredan de los controles base y añadiendo Propiedades de
Dependencia, un concepto usado en el desarrollo con XAML que permite
crear propiedades que pueden ser enlazadas con orígenes de datos
(Bindings XAML).
Abril 2016 Diplomado Dispositivos Móviles 67
Renderers y Custom Renderers
• Los renderers son clases que provee Xamarin, para acceder a los miembros
nativos de los controles de Forms y alterar así la forma como estos
controles se dibujan. Cada control de Forms tiene su renderer excepto los
Layouts.
• Es posible querer renderizar o presentar un control que aún no ha sido
incluido en Xamarin Forms pero que se desea usar.
• Para esto existe un renderer genérico ViewRenderer a través del cual se
pueden realizar las implementaciones de estos controles.
• Para que estos controles tengan datos que provengan de Bindings debe
asociarse este concepto con el visto previamente Controles Extendidos y
Custom Controls.
Abril 2016 Diplomado Dispositivos Móviles 68
Bindings
Xamarin provee de los bindings necesarios para acceder a las APIs base de
cada plataforma desde C#, sin embargo hay empresas de terceros que
proveen controles o funcionalidades que son populares.
La manera de acceder a estas es crear nuestros propios bindings si es que no
existen ya en la tienda de componentes.
Es necesario aprender como se hace esto en cada plataforma en particular.
Android
• http://developer.xamarin.com/guides/android/advanced_topics/java_integ
ration_overview/binding_a_java_library_%28.jar%29/
iOS
• http://developer.xamarin.com/guides/ios/advanced_topics/binding_objecti
ve-c/
Abril 2016 Diplomado Dispositivos Móviles 69
Módulo de Xamarin Forms
Parte 3: Introducción a XAML y MVVM
Abril 2016 Diplomado Dispositivos Móviles 70
Conceptos básicos
Abril 2016 Diplomado Dispositivos Móviles 71
• XAML es un lenguaje declarativo, basado en
XML y pensado para escribir la interface gráfica
de una aplicación de forma textual y ordenada.
• Una característica muy importante de XAML es
que todos los objetos qué definamos en el,
automáticamente son instanciados por el CLR y
creados como objetos accesibles desde código,
sin necesidad de realizar de nuevo la declaración
de los mismos en Code Behind, todo gracias al
mecanismo de las Clases Parciales.
• Su principal objetivo es la separación de
responsabilidades.
¿Qué es XAML?
Abril 2016 Diplomado Dispositivos Móviles 72
• Los conceptos que permiten esta separación de responsabilidades en
XAML son en especial los bindings y los comandos, los cuales nos
permiten respectivamente “enlazar” datos y acciones a nuestras vistas.
• Ambos dependen del otro concepto a manejar que se conoce como el
contexto de datos, para el cual se requiere una adecuada comprensión
de los conceptos de orientación a objetos.
• Los convertidores por su parte nos ayudan a trasformar un dato y
mostrar en la vista el resultado de dicha transformación.
XAML
Abril 2016 Diplomado Dispositivos Móviles 73
• Es un patrón de diseño creado en 2005 y es una evolución de MVC y MVP
usado especialmente para aplicaciones basadas en XAML.
• La traducción de sus iniciales es Modelo Vista – Vista Modelo.
• Su principal propósito y beneficio está en la separación de responsabilidades
a nivel de la presentación de nuestras aplicaciones.
• Las implementaciones de MVVM son diversas y dependen básicamente de
las necesidades que tenga la aplicación o el desarrollo en sí mismo.
• Existen muchos frameworks disponibles para implementar MVVM en
aplicaciones XAML, su elección es personal y opcional. El framework más
más usado es MVVM Light.
¿Qué es MVVM?
Abril 2016 Diplomado Dispositivos Móviles 74
Separación de responsabilidades
UserInterface
AppLogic
General Model-View-ViewModel (MVVM)
Abril 2016 Diplomado Dispositivos Móviles 75
MVVM Simple
Model
View
ViewModel
Data Bindings
One way
One time
Two way
Commands
Interfaz de Usuario
Clases que representan las
fuentes de datos
Estructuras que
representan los contextos
de datos de las pantallas y
el que permiten el acceso a
la logica de negocio
Abril 2016 Diplomado Dispositivos Móviles 76
Vistas
Aplicaciones de escritorio, web forms
Caja de texto
Etiqueta
Form.cs (Code behind C#)
Form.designer.cs (C#)
Clase
Form
Usar code behind en clases parciales,
es el escenario “típico o más sencillo”
de un desarrollador .NET.
Aplicaciones XAML
Caja de texto
Etiqueta
MainPage.xaml
(Lenguaje declarativo XAML)
MainPage.xaml.cs (Code behind C#)
Clase
MainPage
Nuestra meta para hacer
código portable es usar
code hind al mínimo
posible. En la demo de
hecho cero code behind.
Abril 2016 Diplomado Dispositivos Móviles 77
Usando XAML se pueden crear de forma declarativa los
mismos elementos gráficos que se crearían en código
Vistas
<StackLayout>
<TextBox/>
<Button/>
</StackLayout>
StackLayout stackPanel = new StackLayout();
Entry textBox = new Entry();
stackPanel.Children.Add(textBox);
Button button = new Button();
stackPanel.Children.Add(button);
Abril 2016 Diplomado Dispositivos Móviles 78
Ambos escenarios permiten acceder a los controles de la pantalla como
miembros de la clase que los contiene es decir
this.txtMensaje.Text = “Hola”;
Y crear event handlers para poner el código relacionado a una interacción
del usuario, por ejemplo el click de un botón
private void Button_Click(object sender, RoutedEventArgs e)
{ //Code }
Sin embargo como ya lo dijimos, está no es la mejor práctica para hacer
código portable y reusable.
Vistas
Abril 2016 Diplomado Dispositivos Móviles 79
Bindings y Contextos de datos
Los bindings son textos declarativos que
definen a que propiedad o comando del
contexto de datos está asociado un
atributo de un elemento XAML.
Los contextos de datos, no son más que
instancias de clases.
Como fuente de los bindings también
pueden usarse recursos XAML
declarados a nivel de la App o en algún
diccionario de recursos.
Guardar cambios
Nombre
Editar perfil
Apellido
Abril 2016 Diplomado Dispositivos Móviles 80
Entendiendo los bindings de forma simple
12:38
recordar
*****
iniciar sesión
password
soreygarcia
usuario
Text={Binding UserName}
Password={Binding Password}
Command={Binding StartCommand}
BindingContext={Binding Usuario, Source={StaticResource Locator}}
BindingContext > Instancia de una clase, de una Vista Modelo
Abril 2016 Diplomado Dispositivos Móviles 81
XAML sin bindings
<StackLayout x:Name="ContentPanel" Grid.Row="1" >
<Label Text="TextBlock"/>
<Entry Height="72" Text="TextBox"/>
<Label Text="TextBlock"/>
<Entry Height="72" Text="TextBox"/>
<Button Content="Button"/>
</StackLayout>
Esta es la declaración XAML de la vista que se presento en la diapositiva
anterior creada en Windows Phone.
Abril 2016 Diplomado Dispositivos Móviles 82
XAML con bindings
<StackLayout x:Name="ContentPanel" Grid.Row="1">
<Label Text="TextBlock"/>
<Entry Height="72" Text="{Binding Nombre, Mode=TwoWay}"/>
<Label Text="TextBlock"/>
<TextBox Height="72" Text="{Binding Apellido, Mode=TwoWay}"/>
<Button Content="Button"/>
</StackLayout>
Esta es la declaración XAML usando bindings. Lo que hay que entender de esto es que los
bindings de los Textbox indican que esperamos que el DataContext del StackPanel tengan las
propiedades Nombre y Apellido.
Abril 2016 Diplomado Dispositivos Móviles 83
¿De donde van a salir esos datos?
<Grid x:Name="LayoutRoot" Background="Transparent"
BindingContext="{Binding Usuario, Source={StaticResource SampleDataSource}}">
<Grid x:Name="ContentPanel">
<!– Aquí van los demás elementos de nuestra vista -->
</Grid>
</Grid>
Si vemos el contenedor de nuestro StackLayout vemos que tiene asignados dos contextos, uno
en tiempo de diseño y otro en tiempo de ejecución.
El contexto del contenedor interno, espera que el contexto del contenedor más externo tenga
alguna propiedad con el nombre Persona.
Abril 2016 Diplomado Dispositivos Móviles 84
Vistas Modelos
Las Vistas Modelos
son las clases que al
instanciarse van a
servir como
contextos de datos a
nuestras vistas.
Aprender a definir las
Vistas Modelo, es
más importante de lo
que parece.
class ViewModels
ClueViewModel
«property»
+ Name(): string
+ Value(): string
BindableBase
MainViewModel
- jsonService: IJsonService
- navigationService: INavigationService
- phoneService: IPhoneService
- randomGen: Random
- LoadPlayers(): void
+ MainViewModel(INavigationService, IPhoneService)
~ SufflePlayers(): void
«property»
+ Players(): ObservableCollection<PlayerViewModel>
+ SelectedPlayer(): PlayerViewModel
BindableBase
PlayerViewModel
- navigationService: INavigationService
- phoneService: IPhoneService
- wasDiscovered: bool
- Discover(): void
- Guess(): void
+ PlayerViewModel(INavigationService, IPhoneService)
«property»
+ Answer(): string
+ Clues(): ObservableCollection<ClueViewModel>
+ DiscoverCommand(): ICommand
+ GuessCommand(): ICommand
+ Id(): int
+ Name(): string
+ ParentViewModel(): MainViewModel
+ Photo(): string
+ WasDiscovered(): bool
http://blog.soreygarcia.me/2013/12/imaginando-los-prototipos-y-las-vistas.html
Abril 2016 Diplomado Dispositivos Móviles 85
Comandos
Events
Event
HandlersCommanding
Los comandos se enlazan a las vistas a través de bindings y dependen del
contexto de datos pero están enfocados a ejecutar acciones. Su
implementación se hace usando la interfaz ICommand
Abril 2016 Diplomado Dispositivos Móviles 86
Comandos
Esta es la asociación en XAML usando bindings del uso de un comando, como
vemos la vista no tiene idea de cual es la implementación concreta del método,
esta es relativa al contexto que le sea asignado.
<StackLayout x:Name="ContentPanel" Grid.Row="1" >
<Label Text="TextBlock"/>
<Entry Height="72" Text="TextBox"/>
<Label Text="TextBlock"/>
<Entry Height="72" Text="TextBox"/>
<Button Content="Button" Command="{Binding GuardarPerfilCommand}"/>
</StackLayout>
Abril 2016 Diplomado Dispositivos Móviles 87
Servicios
Otra buena práctica es no colocar lógica compleja en las vistas modelo, aunque ellas son las
receptoras de los comandos, una práctica simple (en este nivel intermedio) es usar clases que
llamaremos servicios, para ejecutar la lógica particular de la app o del negocio.
Abril 2016 Diplomado Dispositivos Móviles 88
http://blog.soreygarcia.me/2014/07/xaml-para-principiantes-fordummies.html
Abril 2016 Diplomado Dispositivos Móviles 89
Android iOS
Cross (Xamarin Forms)
PCL (Logic)
Windows
+
C
o
m
p
a
r
t
i
d
o
CalendarService CalendarService CalendarService
Xamarin Forms
NavigationService
MainViewModel
ApiService
DepencyCo
ntaider
ICalendarSer
vice
LocalDataService
DbConnectionService DbConnectionService
IDbConnecti
onService
Abril 2016 Diplomado Dispositivos Móviles 90
Pantallas
(XAML)
ViewModels
(Origen de los
datos)
Servicios
InstancelLocator
(Dependency
Injection)
Resources
Framework
MVVM
(MVVM Light,
MVVM Cross,
*
Infrastructure.Commo
n)
ApiService
LocalDataServic
e
SettingsService
NavigationServi
ce
NetworkService
CrossService
DialogService
Models
Abril 2016 Diplomado Dispositivos Móviles 91
MVVM Light
Pantallas (XAML)
C
o
n
t
r
o
l
e
s
V
i
e
w
M
o
d
e
l
s
Commands
Bindings
Binding
Name
Property Name
Method Login
S
e
r
v
i
c
i
o
s
Data
Login
Binding
ValidationErrors
[KeyName]
Binding
LoginCommand
StaticResource
ThemeColor
Recursos
(Resource Dictionary)
ViewModelLocator
MainViewModel
Patterns & Practices
ServiceLocator
Arquitectura
Con MVVM Light
Autofac (Contenedor de dependencias)
ServiceLocator
ApiService
LocalDataService
DataTemplates
Colores
Fuentes
Abril 2016 Diplomado Dispositivos Móviles 92
Material Recomendado
Foros de Xamarin
BugZilla
VERSION FINAL
https://blogs.msdn.microsoft.com/microsoft_press/2016/03/31/fre
e-ebook-creating-mobile-apps-with-xamarin-forms/
OFFICIAL SITE
https://developer.xamarin.com/
ALGUNOS VIDEOS
https://www.youtube.com/user/soreygarcia
Abril 2016 Diplomado Dispositivos Móviles 93
Free 30 Day Trial - xamarin.com/university
Unrivaled Mobile
Development
Training
Live unlimited mobile development training from
mobile experts, in your time-zone, on your
schedule, and as often as you'd like.
Abril 2016 Diplomado Dispositivos Móviles 94
¿Preguntas?
Sorey García
soreygarcia@gmail.com | @soreygarcia | blog.soreygarcia.me

Más contenido relacionado

PDF
POE Unidad 1: Introducción a la programación visual y de eventos
PPTX
diapositivas de XAMARIN
PPTX
Herramientas case full informacion
PDF
Modelos de Base de Datos
DOC
Cuadro Comparativo de las tecnicas y herramientas en la auditoria en informatica
PDF
Organización de un centro de cómputos
PPTX
Estandares y modelos de calidad del software
PDF
Desarrollo sustentable
POE Unidad 1: Introducción a la programación visual y de eventos
diapositivas de XAMARIN
Herramientas case full informacion
Modelos de Base de Datos
Cuadro Comparativo de las tecnicas y herramientas en la auditoria en informatica
Organización de un centro de cómputos
Estandares y modelos de calidad del software
Desarrollo sustentable

Destacado (20)

PDF
NetConfUY: Maximizando la productividad del desarrollo móvil
PDF
TechDay 2015 - C# y XAML: El poder de construir aplicaciones en todas las pla...
PPTX
Testing de Apps Xamarin
PPTX
SVQDC - Desarrollo de Apps apra Hololens
PPTX
re-Connect Madrid: Novedades Xamarin
PPTX
dotNetMálaga - Taller Xamarin
PPTX
Servicios Xamarin
PPTX
Extendiendo Xamarin.Forms con Custom Renders
PPTX
Arquitectura en Aplicaciones Xamarin
PPTX
Tipos de pruebas de software
PPTX
Presentación en el Mobile Day
PDF
Web Components & Polymer 1.0 (Webinale Berlin)
PPTX
Desarrollando apps multiplataforma con Xamarin y MVVMCross
PPT
Sistemas De Evaluacion De Seguridad
PPTX
SydMobNet July 2014: Xamarin 3 & Xamarin Forms
PPTX
Xamarin day9 - Advance Xamarin Forms
PPTX
Modern .NET Apps - Telerik Webinar
PPTX
Xamarin Forms
PDF
Auditoria en informática, Organización, Planes y Estructuras.
NetConfUY: Maximizando la productividad del desarrollo móvil
TechDay 2015 - C# y XAML: El poder de construir aplicaciones en todas las pla...
Testing de Apps Xamarin
SVQDC - Desarrollo de Apps apra Hololens
re-Connect Madrid: Novedades Xamarin
dotNetMálaga - Taller Xamarin
Servicios Xamarin
Extendiendo Xamarin.Forms con Custom Renders
Arquitectura en Aplicaciones Xamarin
Tipos de pruebas de software
Presentación en el Mobile Day
Web Components & Polymer 1.0 (Webinale Berlin)
Desarrollando apps multiplataforma con Xamarin y MVVMCross
Sistemas De Evaluacion De Seguridad
SydMobNet July 2014: Xamarin 3 & Xamarin Forms
Xamarin day9 - Advance Xamarin Forms
Modern .NET Apps - Telerik Webinar
Xamarin Forms
Auditoria en informática, Organización, Planes y Estructuras.
Publicidad

Similar a Introducción a Xamarin Forms con XAML (20)

PPTX
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
PPTX
Taller Xamarin Monkey Conf 2018
PPTX
primera aplicacion Xamarin.pptx
PPTX
Introduction to xamarin
PPTX
Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
PPTX
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
PPTX
Codemotion 2017 - Taller Xamarin
PPTX
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
PPTX
Microsoft Tech Summit - Taller Xamarin
PPTX
OpenSouthCode 2018: Taller Xamarin
PPTX
Semana 02 Aplicacion Movil.pptx
PPTX
Semanahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
PDF
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
PPTX
Novedades de Xamarin 4
PPTX
Xamarin Basics
PPTX
PUE DAY 2017: Introducción a Xamarin
PDF
Azure Storage y Xamarin - Tec Tianguistenco
PPTX
Xamarin Dev Days Madrid - Taller Xamarin
PPTX
Intro to xamarin forms: converters, animations, behaviors and triggers
Evento Bolivia - Fundamentos de Xamarin - Desarrollo de apps moviles multipla...
Taller Xamarin Monkey Conf 2018
primera aplicacion Xamarin.pptx
Introduction to xamarin
Crear Apps Multiplataforma compartiendo la mayor cantidad con Xamarin
Plain Concepts Tech Day: Desarrollo de aplicaciones multiplataforma con Xamarin
Codemotion 2017 - Taller Xamarin
Semana Lambda - Fundamentos de Xamarin - Desarrollo de apps moviles multiplat...
Microsoft Tech Summit - Taller Xamarin
OpenSouthCode 2018: Taller Xamarin
Semana 02 Aplicacion Movil.pptx
Semanahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh
Introducción al desarrollo de apps móviles con Xamarin (Android & iOS)
Novedades de Xamarin 4
Xamarin Basics
PUE DAY 2017: Introducción a Xamarin
Azure Storage y Xamarin - Tec Tianguistenco
Xamarin Dev Days Madrid - Taller Xamarin
Intro to xamarin forms: converters, animations, behaviors and triggers
Publicidad

Más de Sorey García (20)

PDF
Mision inspiración para docentes
PDF
WIE: El poder de transformar al mundo con tecnología
PDF
Internet de las Cosas y Netduino
PDF
Misión: Inspiración
PDF
Codies.Launch()
PDF
Tendencias de movilidad en el mercado masivo y empresarial
PDF
[Avanet] Fiesta del Libro y la Cultura Medellín
PDF
MVP Open Day - Best Practices/Experiences
PDF
GWAB: Azure Mobile Services
PDF
Similitudes y deferencias en UX para Windows Phone y Windows
PDF
Taller MVVM Imagine Camp Medellín (Intermedio)
PDF
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
PDF
Conociendo el ecosistema de Windows Phone 8 y Windows 8
PDF
Hackaton Globant - Windows Phone (snnipets and tips)
PDF
Windows Phone 8: Tips de Diseño para Desarrolladores
PDF
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
PDF
Windows Phone 8 en Campus Party
PDF
Introducción a XAML y MVVM
PDF
Sensibilización en Metodologías Ágiles
PDF
Boya.ca - Introducción a Windows Phone
Mision inspiración para docentes
WIE: El poder de transformar al mundo con tecnología
Internet de las Cosas y Netduino
Misión: Inspiración
Codies.Launch()
Tendencias de movilidad en el mercado masivo y empresarial
[Avanet] Fiesta del Libro y la Cultura Medellín
MVP Open Day - Best Practices/Experiences
GWAB: Azure Mobile Services
Similitudes y deferencias en UX para Windows Phone y Windows
Taller MVVM Imagine Camp Medellín (Intermedio)
Estrategias para desarrollo crossplatform en Windows Phone 8 y Windows 8
Conociendo el ecosistema de Windows Phone 8 y Windows 8
Hackaton Globant - Windows Phone (snnipets and tips)
Windows Phone 8: Tips de Diseño para Desarrolladores
JSConfCo: Desarrollo de Aplicaciones para Windows Store con HTML5 y Javascript
Windows Phone 8 en Campus Party
Introducción a XAML y MVVM
Sensibilización en Metodologías Ágiles
Boya.ca - Introducción a Windows Phone

Último (20)

PDF
IA y Canva: Un aliado fundamental para crear diseños profesionales en minutos
DOCX
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
PDF
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
PDF
Actividad 1 (Habilidades sociales en la era digital)
PDF
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
PDF
¿NO HABÉIS LEÍDO?. Por Jonathan Bravo.
PDF
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
PDF
Empieza Con El Porqué - Simon Sinek Ccesa007.pdf
PDF
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
PDF
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
DOCX
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
PDF
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
PDF
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
PDF
Híper Mega Repaso Histológico Bloque 3.pdf
PDF
ciencias-1.pdf libro cuarto basico niños
PDF
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
PDF
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
PDF
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
PDF
Lección 6 Escuela Sab. A través del mar rojo.pdf
PDF
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf
IA y Canva: Un aliado fundamental para crear diseños profesionales en minutos
III Ciclo _ Plan Anual 2025.docx PARA ESTUDIANTES DE PRIMARIA
Didactica de la Investigacion Educativa SUE Ccesa007.pdf
Actividad 1 (Habilidades sociales en la era digital)
Salvese Quien Pueda - Andres Oppenheimer Ccesa007.pdf
¿NO HABÉIS LEÍDO?. Por Jonathan Bravo.
Guia de Tesis y Proyectos de Investigacion FS4 Ccesa007.pdf
Empieza Con El Porqué - Simon Sinek Ccesa007.pdf
Romper el Circulo de la Creatividad - Colleen Hoover Ccesa007.pdf
GUIA DE: CANVA + INTELIGENCIA ARTIFICIAL
PROYECTO DE APRENDIZAJE para la semana de fiestas patrias
Unidad de Aprendizaje 5 de Matematica 1ro Secundaria Ccesa007.pdf
Crear o Morir - Andres Oppenheimer Ccesa007.pdf
Híper Mega Repaso Histológico Bloque 3.pdf
ciencias-1.pdf libro cuarto basico niños
TRAUMA_Y_RECUPERACION consecuencias de la violencia JUDITH HERMAN
Gasista de unidades unifuncionales - pagina 23 en adelante.pdf
el - LIBRO-PACTO-EDUCATIVO-GLOBAL-OIEC.pdf
Lección 6 Escuela Sab. A través del mar rojo.pdf
Unidad de Aprendizaje 5 de Educacion para el Trabajo EPT Ccesa007.pdf

Introducción a Xamarin Forms con XAML

  • 1. Abril 2016 Diplomado Dispositivos Móviles 1 Módulo de Xamarin Forms Parte 1: Introducción a Xamarin
  • 2. Abril 2016 Diplomado Dispositivos Móviles 2 Sorey García (@soreygarcia) Consultora en Movilidad y Freelancer XAML Ingenieria Informatica Politécnico Jaime Isaza Cadavid Especialista en Desarrollo de Software Universidad EAFIT Docente de Cátedra Institución Universitaria Pascual Bravo Co-fundadora de la comunidad de Desarrolladores Avanet y Codies Instructora
  • 3. Abril 2016 Diplomado Dispositivos Móviles 3
  • 4. Abril 2016 Diplomado Dispositivos Móviles 4 Commercial LicenseOpen Source License / Free available 4 From .NET to Xamarin Windows .NET Framework Linux Mono iOS MonoTouch Android Mono for Android iOS Xamarin.iOS Android Xamarin.Android
  • 5. Abril 2016 Diplomado Dispositivos Móviles 5 Silo Approach Crear una App multiples veces
  • 6. Abril 2016 Diplomado Dispositivos Móviles 6 Retos del desarrollo nativo • Mac OS X • XCode • Objective-C • Swift • iOS SDK • Apple Tools • OS • Eclipse or Android Studio or… • Java • Android SDK • SDK Tools • Windows OS • Visual Studio • C# • .NET Framework • Windows Phone SDK
  • 7. Abril 2016 Diplomado Dispositivos Móviles 7 Write Once, Run Anywhere Approach Mínimo común denominador App Generation
  • 8. Abril 2016 Diplomado Dispositivos Móviles 8 Retos del desarrollo híbrido • Mínimo común denominador • Fragmentación del Browser • Desarrollo y diseño para 1 plataforma, afecta las experiencias de usuario
  • 9. Abril 2016 Diplomado Dispositivos Móviles 9
  • 10. Abril 2016 Diplomado Dispositivos Móviles 10 Algunas opciones
  • 11. Abril 2016 Diplomado Dispositivos Móviles 11
  • 12. Abril 2016 Diplomado Dispositivos Móviles 12 Xamarin Approach Comparte código nativo
  • 13. Abril 2016 Diplomado Dispositivos Móviles 13 Comparaciones por plataforma
  • 14. Abril 2016 Diplomado Dispositivos Móviles 14 @implementation MSViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)OnButtonDown:(id)sender { UIAlertView* view = [[UIAlertView alloc]init]; [view setTitle:@"Hello World"]; [view setMessage: @"How are you?”]; [view addButtonWithTitle:@"OK"]; [view show]; } @end public partial class iOSAppViewController : UIViewController { public iOSAppViewController (IntPtr handle) : base (handle){ } public override void ViewDidLoad (){ base.ViewDidLoad (); } partial void OnButtonDown (UIButton sender) { UIAlertView view = new UIAlertView(); view.Title = "Hello World" ; view.Message = "How are you? " ; view.AddButton ("OK"); view.Show(); } iOS
  • 15. Abril 2016 Diplomado Dispositivos Móviles 15 public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Button myBtn = (Button) this.findViewById( R.id.clickMe); myBtn.setOnClickListener( new View.OnClickListener() { @Override public void onClick(View view) { AlertDialog.Builder builder = new AlertDialog.Builder(MyActivity.this) ; builder.setTitle( "Hello World") .setMessage("How are you?") .setPositiveButton( "OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialogInterface.dismiss(); }}) .show(); }}); } } [Activity (Label = "AndroidApp", MainLauncher = true, Icon = "@drawable/icon")] public class MainActivity : Activity { protected override void OnCreate (Bundle bundle) { base.OnCreate (bundle); SetContentView (Resource.Layout.Main); Button button = FindViewById<Button> (Resource.Id.me); button.Click += delegate { AlertDialog.Builder builder = new AlertDialog.Builder (this ); AlertDialog dialog = null ; builder.SetTitle ( "Hello World") .SetMessage ( "How are you") .SetPositiveButton( "OK" , delegate { dialog.Dismiss(); } ); dialog = builder.Show (); } ; } } Android
  • 16. Abril 2016 Diplomado Dispositivos Móviles 16 ¿Por qué nativo? Xamarin genera experiencias nativas. Native User Interfaces Native API Access Native Performance
  • 17. Abril 2016 Diplomado Dispositivos Móviles 17 Windows APIs 100% coverage
  • 18. Abril 2016 Diplomado Dispositivos Móviles 18 … or iOS APIs 100% coverage
  • 19. Abril 2016 Diplomado Dispositivos Móviles 19 … or Android APIs 100% coverage
  • 20. Abril 2016 Diplomado Dispositivos Móviles 20 Compilación Nativa Xamarin.iOS does full Ahead Of Time (AOT) compilation to produce an ARM binary for Apple’s App Store. Xamarin.Android takes advantage of Just In Time (JIT) compilation on the Android device.
  • 21. Abril 2016 Diplomado Dispositivos Móviles 21 Cualquier cosa que pueda hacerse en Objective-C or Java puede hacerse en C# con Xamarin usando Visual Studio o Xamarin Studio
  • 22. Abril 2016 Diplomado Dispositivos Móviles 22
  • 23. Abril 2016 Diplomado Dispositivos Móviles 23 Share Code: Portable Class Libraries
  • 24. Abril 2016 Diplomado Dispositivos Móviles 24 NuGet
  • 25. Abril 2016 Diplomado Dispositivos Móviles 25 Shared Projects
  • 26. Abril 2016 Diplomado Dispositivos Móviles 26 Linked Files Compiler Directives
  • 27. Abril 2016 Diplomado Dispositivos Móviles 27 Separación de responsabilidades UserInterface AppLogic General Model-View-ViewModel (MVVM)
  • 28. Abril 2016 Diplomado Dispositivos Móviles 28
  • 29. Abril 2016 Diplomado Dispositivos Móviles 29 Xamarin + Xamarin Forms
  • 30. Abril 2016 Diplomado Dispositivos Móviles 30  40+ Pages, Layouts, and Controls  Build from code behind or XAML  Two-way Data Binding  Navigation  Animation API  Dependency Service  Messaging Center Xamarin.Forms Shared UI Code
  • 31. Abril 2016 Diplomado Dispositivos Móviles 31 Xamarin’s Unique Approach Shared C# codebase • 100% native API access • High performance iOS C# UI Windows C# UIAndroid C# UI Shared C# Mobile C# Server Linux/Mono CoreCLRAzure Shared C# Client/Server
  • 32. Xamarin.Forms: Interfaces Nativas con Código Compartido Use a single API to generate native, platform- specific user interfaces At runtime, each Xamarin.Forms page and its controls are mapped to platform-specific native UI elements
  • 33. Abril 2016 Diplomado Dispositivos Móviles 33 Pages
  • 34. Abril 2016 Diplomado Dispositivos Móviles 34 Layouts
  • 35. Abril 2016 Diplomado Dispositivos Móviles 35 Controls ActivityIndicator BoxView Button DatePicker Editor Entry Image Label ListView Map OpenGLView Picker ProgressBar SearchBar Slider Stepper TableView TimePicker WebView EntryCell ImageCell SwitchCell TextCell ViewCell
  • 36. Abril 2016 Diplomado Dispositivos Móviles 36 Cells • EntryCell • SwitchCell • TextCell • ImageCell http://developer.xamarin.com/guides/cross-platform/xamarin-forms/controls/cells/
  • 37. Abril 2016 Diplomado Dispositivos Móviles 37 Controles de terceros
  • 38. Abril 2016 Diplomado Dispositivos Móviles 38 http://www.genymotion.com/ Emuladores
  • 39. Abril 2016 Diplomado Dispositivos Móviles 39 Plataformas Soportadas Xamarin Forms • Android 4.0.3 o Superior • iOS 6.1 o Superior • Windows Phone y Windows 8.1 • Windows 10 UWP
  • 40. Abril 2016 Diplomado Dispositivos Móviles 40 Microsoft adquirió Xamarin
  • 41. Abril 2016 Diplomado Dispositivos Móviles 41 Xamarin Test Cloud
  • 42. Abril 2016 Diplomado Dispositivos Móviles 42 Xamarin Insights
  • 43. Abril 2016 Diplomado Dispositivos Móviles 43 Ventajas y Desventajas VENTAJAS • Se escribe el código solo una vez • Mantiene la experiencia de usuario propia de cada plataforma. • Se permite el acceso a funciones nativas a través de Inyección de Dependencias. • No es necesario conocer todo acerca de las plataformas nativas • Puedes crear código XAML y aprovechar la potencia de MVVM DESVENTAJAS • Es un poco nuevo así que es necesario adaptarse a lo que existe, lo que limita en cuanto a crear UX que demande demasiado esfuerzo gráfico.
  • 44. Xamarin.Forms se recomienda para • Start learning platform specifics – in .NET. • Prototype • Data-driven, task-oriented • multi-platform apps • Recommended for: • Lists • Item selections • Change properties • Update backend
  • 45. NO se recomienda en los siguientes casos • Complex/customized interfaces - nuanced experiences • Android Material Design, iOS transitions • Extensive platform-specific capability • Slow-mo camera, fingerprint scanner (iOS 6) • Not Recommended for: • UI-intensive apps with complex gestures
  • 46. Abril 2016 Diplomado Dispositivos Móviles 46 • Mejoras de integración con iOS 9 y Android 6 • Material Design (AppCompat) • Optimización del rendimiento • XAML pre compilado • Windows 10 (UWP) Preview • Nuevos gestos • Efectos, templates… Xamarin.Forms 2.0
  • 47. Abril 2016 Diplomado Dispositivos Móviles 47 evolve.xamarin.com
  • 48. Abril 2016 Diplomado Dispositivos Móviles 48 Módulo de Xamarin Forms Parte 2: Consideraciones de Publicación
  • 49. Abril 2016 Diplomado Dispositivos Móviles 49 XAML y C# Everywhere La mayoría de recursos en internet enseñan Xamarin Forms con Code Behind. Sin embargo la recomendación es aprender y trabajar con XAML y aprovechar su enfoque a la separación de responsabilidades entre el diseño y la codificación.
  • 50. Abril 2016 Diplomado Dispositivos Móviles 50 Centros de Desarrollo
  • 51. Abril 2016 Diplomado Dispositivos Móviles 51 Apple Developer Center • Cuenta de Desarrollador o Compañia: 99 USD Anuales • Cuenta Empresarial: 299 USD Anuales • En el Apple Developer Center se gestiona la cuenta, certificados y dispositivos • En iTunes Connect se publican las aplicaciones • Invitaciones a beta tester via correo desde iTunes Connect subiendo un Bundle a TestFlight • Nivel de complejidad: Alto • Nivel de exigencia en calidad: Alta • Tiempo de publicación: Días (Entre 7 y 12) • http://appreviewtimes.com/
  • 52. Abril 2016 Diplomado Dispositivos Móviles 52 Windows Store y Windows Phone Store Windows Phone Store y Windows Store • 19 USD de por vida para desarrolladores • 99 USD de por vida para compañías • Invitaciones a beta tester via correo subiendo un paquete. • En el Developer Benefits Center se obtienen beneficios adicionales con suscripciones • Nivel de Complejidad: Medio • Nivel de exigencia en calidad: Baja • Tiempo de publicación: Horas máximo 1 o 2 días, en revisiones posteriores pueden pedirte mejorar la aplicación o puede ser removida de la tienda.
  • 53. Abril 2016 Diplomado Dispositivos Móviles 53 Play Store Developer Center Google Play Store • 25 USD de por vida • En Google Play Store de gestionan y publican las aplicaciones • Se puede enviar versiones Beta a grupos de usuarios • Nivel de complejidad: Bajo • Nivel de exigencia en calidad: Baja • Tiempo de publicación: Horas
  • 54. Abril 2016 Diplomado Dispositivos Móviles 54 Herramientas y Modos de Ejecución
  • 55. Abril 2016 Diplomado Dispositivos Móviles 55 Herramientas Xamarin Studio en MAC o Visual Studio 2015 Update 2 en Windows Android • Android SDK y APIs necesarias según soporte que se dese dar • Dispositivo, Visual Studio Emulator for Android, GenyMotion o Android Player Windows Phone y Windows • Windows SDK • Dispositivo o Emuladores del SDK iOS • Xcode • Dispositivo, Emuladores de Xcode • Xamarin instalado en el MAC aunque se use Windows
  • 56. Abril 2016 Diplomado Dispositivos Móviles 56 Debug y Release Android • No requiere de ninguna consideración para ejecutar en ambos modos. • Para entregar un APK de prueba se necesita generar un KeyStore • Solo se pueden publicar paquetes en release Windows Phone y Windows • No requiere de ninguna consideración para ejecutar en ambos modos. • Para generar el appx de prueba se necesita firmar los paquetes con Visual • Las apps Universales de Windows 10 están aún en Preview • Para probar paquetes en dispositivos, se debe desbloquear el dispositivo para desarrollo • Solo se pueden publicar paquetes en release
  • 57. Abril 2016 Diplomado Dispositivos Móviles 57 Debug y Release iOS • Requiere cuenta de desarrollador autorizada • Requiere configurar certificados de desarrollo bajados desde del developer center e instalados en el KeyChain para Debug o Adhoc / AppStore. • Se requiere generar el AppId de la aplicación en desarrollo • Para generar IPA (Paquetes en Adhoc para prueba en dispositivos) se requiere registrar el equipo en la cuenta de desarrollador y habilitar el dispositivo en el certificado especifico de desarrollo o distribución • Solo se pueden publicar paquetes generados en modo AppStore.
  • 58. Abril 2016 Diplomado Dispositivos Móviles 58 APIs por Plataforma (Mapas y Notificaciones)
  • 59. Abril 2016 Diplomado Dispositivos Móviles 59 APIs para Mapas Nativos Google • Los mapas requieren configurar el SHA del Key Store en la consola de desarrolladores y solicitar las llaves para Debug y para Release para Google Maps Android API v2 • Las notificaciones requieren configurar una llave para Google Cloud Messaging for Android • Consola de desarrolladores: https://code.google.com/apis/console/
  • 60. Abril 2016 Diplomado Dispositivos Móviles 60 APIs para Mapas Nativos iOS • Los mapas no requieren nada adicional • Se requiere habilitar el certificado de Notificaciones Push para el AppId correspondiente a la app que se esta desarrollando uno para Debug y otro para Adhoc / AppStore Windows Phone y Windows • Los mapas requieren una llave para mapas de Bing > https://www.bingmapsportal.com/ • Las notificaciones requieren de llaves generadas en los Store para cada una de las aplicaciones publicadas.
  • 61. Abril 2016 Diplomado Dispositivos Móviles 61 Azure Service Bus Debido a la complejidad del envió de notificaciones que tiene cada plataforma existen servicios como el de Azure Service Bus que centraliza los envíos de notificaciones. • iOS: Debe configurarse el certificado generado en la máquina donde se está compilando para publicar. • Android: Debe configurarse la llave entregada en la consola de desarrolladores • Windows Phone: debe configurarse la llave entregada en el Windows Phone Store.
  • 62. Abril 2016 Diplomado Dispositivos Móviles 62 Base de datos local
  • 63. Abril 2016 Diplomado Dispositivos Móviles 63 SQLite • SQLite provee una base de datos local por plataforma. • Esta base de datos es almacenada en el sistema de archivos. • SQLite está soportada nativamente por iOS y Android pero no en Windows Phone o Windows. Debe instalarse Sqlite for Windows y Sqlite for Windows Phone
  • 64. Abril 2016 Diplomado Dispositivos Móviles 64 SQLite.NET Async (ORM)
  • 65. Abril 2016 Diplomado Dispositivos Móviles 65 Custom Controls, Renderers y Bindings
  • 66. Abril 2016 Diplomado Dispositivos Móviles 66 Controles Extendidos y Custom Controls • El comportamiento de los controles puede ser extendido creando clases que heredan de los controles base y añadiendo Propiedades de Dependencia, un concepto usado en el desarrollo con XAML que permite crear propiedades que pueden ser enlazadas con orígenes de datos (Bindings XAML).
  • 67. Abril 2016 Diplomado Dispositivos Móviles 67 Renderers y Custom Renderers • Los renderers son clases que provee Xamarin, para acceder a los miembros nativos de los controles de Forms y alterar así la forma como estos controles se dibujan. Cada control de Forms tiene su renderer excepto los Layouts. • Es posible querer renderizar o presentar un control que aún no ha sido incluido en Xamarin Forms pero que se desea usar. • Para esto existe un renderer genérico ViewRenderer a través del cual se pueden realizar las implementaciones de estos controles. • Para que estos controles tengan datos que provengan de Bindings debe asociarse este concepto con el visto previamente Controles Extendidos y Custom Controls.
  • 68. Abril 2016 Diplomado Dispositivos Móviles 68 Bindings Xamarin provee de los bindings necesarios para acceder a las APIs base de cada plataforma desde C#, sin embargo hay empresas de terceros que proveen controles o funcionalidades que son populares. La manera de acceder a estas es crear nuestros propios bindings si es que no existen ya en la tienda de componentes. Es necesario aprender como se hace esto en cada plataforma en particular. Android • http://developer.xamarin.com/guides/android/advanced_topics/java_integ ration_overview/binding_a_java_library_%28.jar%29/ iOS • http://developer.xamarin.com/guides/ios/advanced_topics/binding_objecti ve-c/
  • 69. Abril 2016 Diplomado Dispositivos Móviles 69 Módulo de Xamarin Forms Parte 3: Introducción a XAML y MVVM
  • 70. Abril 2016 Diplomado Dispositivos Móviles 70 Conceptos básicos
  • 71. Abril 2016 Diplomado Dispositivos Móviles 71 • XAML es un lenguaje declarativo, basado en XML y pensado para escribir la interface gráfica de una aplicación de forma textual y ordenada. • Una característica muy importante de XAML es que todos los objetos qué definamos en el, automáticamente son instanciados por el CLR y creados como objetos accesibles desde código, sin necesidad de realizar de nuevo la declaración de los mismos en Code Behind, todo gracias al mecanismo de las Clases Parciales. • Su principal objetivo es la separación de responsabilidades. ¿Qué es XAML?
  • 72. Abril 2016 Diplomado Dispositivos Móviles 72 • Los conceptos que permiten esta separación de responsabilidades en XAML son en especial los bindings y los comandos, los cuales nos permiten respectivamente “enlazar” datos y acciones a nuestras vistas. • Ambos dependen del otro concepto a manejar que se conoce como el contexto de datos, para el cual se requiere una adecuada comprensión de los conceptos de orientación a objetos. • Los convertidores por su parte nos ayudan a trasformar un dato y mostrar en la vista el resultado de dicha transformación. XAML
  • 73. Abril 2016 Diplomado Dispositivos Móviles 73 • Es un patrón de diseño creado en 2005 y es una evolución de MVC y MVP usado especialmente para aplicaciones basadas en XAML. • La traducción de sus iniciales es Modelo Vista – Vista Modelo. • Su principal propósito y beneficio está en la separación de responsabilidades a nivel de la presentación de nuestras aplicaciones. • Las implementaciones de MVVM son diversas y dependen básicamente de las necesidades que tenga la aplicación o el desarrollo en sí mismo. • Existen muchos frameworks disponibles para implementar MVVM en aplicaciones XAML, su elección es personal y opcional. El framework más más usado es MVVM Light. ¿Qué es MVVM?
  • 74. Abril 2016 Diplomado Dispositivos Móviles 74 Separación de responsabilidades UserInterface AppLogic General Model-View-ViewModel (MVVM)
  • 75. Abril 2016 Diplomado Dispositivos Móviles 75 MVVM Simple Model View ViewModel Data Bindings One way One time Two way Commands Interfaz de Usuario Clases que representan las fuentes de datos Estructuras que representan los contextos de datos de las pantallas y el que permiten el acceso a la logica de negocio
  • 76. Abril 2016 Diplomado Dispositivos Móviles 76 Vistas Aplicaciones de escritorio, web forms Caja de texto Etiqueta Form.cs (Code behind C#) Form.designer.cs (C#) Clase Form Usar code behind en clases parciales, es el escenario “típico o más sencillo” de un desarrollador .NET. Aplicaciones XAML Caja de texto Etiqueta MainPage.xaml (Lenguaje declarativo XAML) MainPage.xaml.cs (Code behind C#) Clase MainPage Nuestra meta para hacer código portable es usar code hind al mínimo posible. En la demo de hecho cero code behind.
  • 77. Abril 2016 Diplomado Dispositivos Móviles 77 Usando XAML se pueden crear de forma declarativa los mismos elementos gráficos que se crearían en código Vistas <StackLayout> <TextBox/> <Button/> </StackLayout> StackLayout stackPanel = new StackLayout(); Entry textBox = new Entry(); stackPanel.Children.Add(textBox); Button button = new Button(); stackPanel.Children.Add(button);
  • 78. Abril 2016 Diplomado Dispositivos Móviles 78 Ambos escenarios permiten acceder a los controles de la pantalla como miembros de la clase que los contiene es decir this.txtMensaje.Text = “Hola”; Y crear event handlers para poner el código relacionado a una interacción del usuario, por ejemplo el click de un botón private void Button_Click(object sender, RoutedEventArgs e) { //Code } Sin embargo como ya lo dijimos, está no es la mejor práctica para hacer código portable y reusable. Vistas
  • 79. Abril 2016 Diplomado Dispositivos Móviles 79 Bindings y Contextos de datos Los bindings son textos declarativos que definen a que propiedad o comando del contexto de datos está asociado un atributo de un elemento XAML. Los contextos de datos, no son más que instancias de clases. Como fuente de los bindings también pueden usarse recursos XAML declarados a nivel de la App o en algún diccionario de recursos. Guardar cambios Nombre Editar perfil Apellido
  • 80. Abril 2016 Diplomado Dispositivos Móviles 80 Entendiendo los bindings de forma simple 12:38 recordar ***** iniciar sesión password soreygarcia usuario Text={Binding UserName} Password={Binding Password} Command={Binding StartCommand} BindingContext={Binding Usuario, Source={StaticResource Locator}} BindingContext > Instancia de una clase, de una Vista Modelo
  • 81. Abril 2016 Diplomado Dispositivos Móviles 81 XAML sin bindings <StackLayout x:Name="ContentPanel" Grid.Row="1" > <Label Text="TextBlock"/> <Entry Height="72" Text="TextBox"/> <Label Text="TextBlock"/> <Entry Height="72" Text="TextBox"/> <Button Content="Button"/> </StackLayout> Esta es la declaración XAML de la vista que se presento en la diapositiva anterior creada en Windows Phone.
  • 82. Abril 2016 Diplomado Dispositivos Móviles 82 XAML con bindings <StackLayout x:Name="ContentPanel" Grid.Row="1"> <Label Text="TextBlock"/> <Entry Height="72" Text="{Binding Nombre, Mode=TwoWay}"/> <Label Text="TextBlock"/> <TextBox Height="72" Text="{Binding Apellido, Mode=TwoWay}"/> <Button Content="Button"/> </StackLayout> Esta es la declaración XAML usando bindings. Lo que hay que entender de esto es que los bindings de los Textbox indican que esperamos que el DataContext del StackPanel tengan las propiedades Nombre y Apellido.
  • 83. Abril 2016 Diplomado Dispositivos Móviles 83 ¿De donde van a salir esos datos? <Grid x:Name="LayoutRoot" Background="Transparent" BindingContext="{Binding Usuario, Source={StaticResource SampleDataSource}}"> <Grid x:Name="ContentPanel"> <!– Aquí van los demás elementos de nuestra vista --> </Grid> </Grid> Si vemos el contenedor de nuestro StackLayout vemos que tiene asignados dos contextos, uno en tiempo de diseño y otro en tiempo de ejecución. El contexto del contenedor interno, espera que el contexto del contenedor más externo tenga alguna propiedad con el nombre Persona.
  • 84. Abril 2016 Diplomado Dispositivos Móviles 84 Vistas Modelos Las Vistas Modelos son las clases que al instanciarse van a servir como contextos de datos a nuestras vistas. Aprender a definir las Vistas Modelo, es más importante de lo que parece. class ViewModels ClueViewModel «property» + Name(): string + Value(): string BindableBase MainViewModel - jsonService: IJsonService - navigationService: INavigationService - phoneService: IPhoneService - randomGen: Random - LoadPlayers(): void + MainViewModel(INavigationService, IPhoneService) ~ SufflePlayers(): void «property» + Players(): ObservableCollection<PlayerViewModel> + SelectedPlayer(): PlayerViewModel BindableBase PlayerViewModel - navigationService: INavigationService - phoneService: IPhoneService - wasDiscovered: bool - Discover(): void - Guess(): void + PlayerViewModel(INavigationService, IPhoneService) «property» + Answer(): string + Clues(): ObservableCollection<ClueViewModel> + DiscoverCommand(): ICommand + GuessCommand(): ICommand + Id(): int + Name(): string + ParentViewModel(): MainViewModel + Photo(): string + WasDiscovered(): bool http://blog.soreygarcia.me/2013/12/imaginando-los-prototipos-y-las-vistas.html
  • 85. Abril 2016 Diplomado Dispositivos Móviles 85 Comandos Events Event HandlersCommanding Los comandos se enlazan a las vistas a través de bindings y dependen del contexto de datos pero están enfocados a ejecutar acciones. Su implementación se hace usando la interfaz ICommand
  • 86. Abril 2016 Diplomado Dispositivos Móviles 86 Comandos Esta es la asociación en XAML usando bindings del uso de un comando, como vemos la vista no tiene idea de cual es la implementación concreta del método, esta es relativa al contexto que le sea asignado. <StackLayout x:Name="ContentPanel" Grid.Row="1" > <Label Text="TextBlock"/> <Entry Height="72" Text="TextBox"/> <Label Text="TextBlock"/> <Entry Height="72" Text="TextBox"/> <Button Content="Button" Command="{Binding GuardarPerfilCommand}"/> </StackLayout>
  • 87. Abril 2016 Diplomado Dispositivos Móviles 87 Servicios Otra buena práctica es no colocar lógica compleja en las vistas modelo, aunque ellas son las receptoras de los comandos, una práctica simple (en este nivel intermedio) es usar clases que llamaremos servicios, para ejecutar la lógica particular de la app o del negocio.
  • 88. Abril 2016 Diplomado Dispositivos Móviles 88 http://blog.soreygarcia.me/2014/07/xaml-para-principiantes-fordummies.html
  • 89. Abril 2016 Diplomado Dispositivos Móviles 89 Android iOS Cross (Xamarin Forms) PCL (Logic) Windows + C o m p a r t i d o CalendarService CalendarService CalendarService Xamarin Forms NavigationService MainViewModel ApiService DepencyCo ntaider ICalendarSer vice LocalDataService DbConnectionService DbConnectionService IDbConnecti onService
  • 90. Abril 2016 Diplomado Dispositivos Móviles 90 Pantallas (XAML) ViewModels (Origen de los datos) Servicios InstancelLocator (Dependency Injection) Resources Framework MVVM (MVVM Light, MVVM Cross, * Infrastructure.Commo n) ApiService LocalDataServic e SettingsService NavigationServi ce NetworkService CrossService DialogService Models
  • 91. Abril 2016 Diplomado Dispositivos Móviles 91 MVVM Light Pantallas (XAML) C o n t r o l e s V i e w M o d e l s Commands Bindings Binding Name Property Name Method Login S e r v i c i o s Data Login Binding ValidationErrors [KeyName] Binding LoginCommand StaticResource ThemeColor Recursos (Resource Dictionary) ViewModelLocator MainViewModel Patterns & Practices ServiceLocator Arquitectura Con MVVM Light Autofac (Contenedor de dependencias) ServiceLocator ApiService LocalDataService DataTemplates Colores Fuentes
  • 92. Abril 2016 Diplomado Dispositivos Móviles 92 Material Recomendado Foros de Xamarin BugZilla VERSION FINAL https://blogs.msdn.microsoft.com/microsoft_press/2016/03/31/fre e-ebook-creating-mobile-apps-with-xamarin-forms/ OFFICIAL SITE https://developer.xamarin.com/ ALGUNOS VIDEOS https://www.youtube.com/user/soreygarcia
  • 93. Abril 2016 Diplomado Dispositivos Móviles 93 Free 30 Day Trial - xamarin.com/university Unrivaled Mobile Development Training Live unlimited mobile development training from mobile experts, in your time-zone, on your schedule, and as often as you'd like.
  • 94. Abril 2016 Diplomado Dispositivos Móviles 94 ¿Preguntas? Sorey García soreygarcia@gmail.com | @soreygarcia | blog.soreygarcia.me