You are on page 1of 56

Desarrollo de aplicaciones

mviles multiplataforma con


C# - Xamarin VS
1: Conceptos multiplataforma y primeros
pasos con Xamarin
E.J. Hernndez Valdelamar
Marzo, 2016

Sesin 1 - Objetivo

Exponer la terminologa y conceptos


relacionados al desarrollo de software
multiplataforma.
Exponer el procedimiento de instalacin de
Xamarin y las carcatersticas de su integracin
con VS.
Explorar las caractersticas del cdigo asociado
a una aplicacin Xamarin.

Contenido

Conceptos multiplataforma

Multiplataforma (cross-platform)

Tipos de aplicaciones mviles: nativas, web e hbridas

Xamarin

Introduccin a Xamarin

Instalacin de Xamarin

Plantillas de proyecto Visual Studio - Xamarin

Caractersticas del cdigo y organizacin

Explorando una aplicacin sencilla

Comentarios

Tipos de software

Aplicaciones y servicios

Multiplataforma

En informtica, multiplataforma (cross-platform, platformindependent) es un atributo conferido a programas informticos


o mtodos y conceptos de cmputo que son implementados e
interoperan en mltiples plataformas informticas.
El software multiplataforma puede dividirse en dos tipos:

uno requiere una compilacin individual para cada


plataforma que le da soporte,
y el otro se puede ejecutar directamente en cualquier
plataforma sin preparacin especial, por ejemplo, el
software escrito en un lenguaje interpretado o bytecode
precompilado portable para los cuales los intrpretes o
paquetes en tiempo de ejecucin son componentes
comunes o estndar de todas las plataformas.
https://es.wikipedia.org/wiki/Multiplataforma

Tecnologas multiplataforma

Aplicaciones cross-platform

Cuando decimos que una aplicacin es CrossPlatform, queremos decir que puede ejecutarse
en diversas plataformas, es decir, una
aplicacin podra funcionar tanto en Android, en
iOS, Windows Phone o WinRT, sin la
necesidad de haber realizado un desarrollo
especfico para cada plataforma.
Fuente: "El desarrollo multiplataforma"

Variedad de plataformas mviles

Desarrollo cross-platform

El cross-platform es un mtodo para desarrollar aplicaciones


para nuestros dispositivos mviles con un costo menor de
desarrollo.
Este se centra en un nico desarrollo que exporta a las
diferentes plataformas disponibles en el mercado.
Gracias a esta prctica, se puede conseguir la presencia de
nuestras aplicaciones en todos los sistemas operativos, con un
costo mucho menor que si fueran desarrolladas en el lenguaje
nativo, ya que esto supondra un desarrollo para cada
plataforma.
Fuente: "Conoce qu es el cross-platform"

Tipos de desarrollo multiplataforma

Hay dos tipos de desarrollo multiplataforma:

el desarrollo que genera cdigo nativo y es


ejecutado por el terminal como si de una aplicacin
nativa se tratara;
o bien el desarrollo que no genera cdigo nativo y
es ejecutado e interpretado por un navegador web
dentro de la aplicacin.

http://itblogsogeti.com/2015/04/23/el-desarrollo-multiplataforma/

Aplicaciones nativas

Aplicaciones nativas. Las aplicaciones nativas


residen en el dispositivo y se instalan a travs
de una tienda de aplicaciones (Google Play o
Apple App Store).
Son programas desarrollados especficamente
para una plataforma y sus interfaces siguen los
estndares y normas de dicha plataforma.

Aplicaciones Web

Se ejecutan desde un navegador. La primera vez que


se accede a estas aplicaciones se utiliza una pgina
Web: el usuario navega a una URL y tiene opcin de
instalar dicha pgina en la pantalla inicio del
dispositivo, creando un acceso directo.
Las aplicaciones Web pueden llegar el mismo aspecto
que las aplicaciones nativas, difieren en la capacidad
que tienen las aplicaciones nativas para acceder a las
caractersticas propias del dispositivo, tales como el
acceso a la cmara, telfono o GPS.

Aplicaciones hbridas

Se trata de aplicaciones nativas que utilizan el


navegador. Utilizan el mismo procedimiento de
instalacin que las aplicaciones nativas (a
travs de una tienda de aplicaciones), pero
gran parte de estas aplicaciones de disea
utilizando pginas web.
Se utilizan este tipo de aplicaciones como
contenedores de aplicaciones web existentes,
es una manera econmica y rpida de lograr
presencia en las tiendas de aplicaciones.
http://anibalgoicochea.com/2013/07/26/aplicaciones-nativas-aplicaciones-web-y-aplicaciones-hibridas/

https://www.lancetalent.com/blog/tipos-de-aplicaciones-moviles-ventajas-inconvenientes/

Xamarin

Xamarin es una plataforma para desarrollar aplicaciones


para plataformas iOS, Android, Windows Phone , Windows
Store y Mac usando el lenguaje de programacin C#.
Xamarin nos da la posibilidad de tener una base de cdigo
compartido que contiene entidades de negocio, lgica de
negocio, acceso a servicios, etctera, y simplemente tener
cdigo distinto para los detalles de interfaz de usuario
para la capa de cliente en cada plataforma.
Bsicamente es como desarrollar al mismo tiempo para
todas las plataformas, por lo que minimizamos tiempos de
desarrollo.

Lo que ofrece Xamarin

Un solo lenguaje: C#

Enfoque de desarrollo nativo vs


multiplataforma
Con el enfoque nativo (silo), se contruye
varias veces la misma aplicacin, usando
distintos conjuntos de herramientas,
manteniendo distintas bases de cdigo y
requiriendo varios equipos de trabajo.

Con el enfoque multiplataforma (write


once , run anywhere), se escribe una
sola vez la aplicacin, se usa un
conjunto de herramientas, se mantiene
una base de cdigo, y el trabajo lo
hace un equipo.

Xamarin vs el mundo mobile

http://www.slideshare.net/Sohodragon/cross-platform-mobile-development-with-xamarin-and-office-365

La clave: compartir cdigo entre


plataformas

Compartir el mximo de cdigo


entre aplicaciones

Usando Xamarin.Forms, se puede tener reuso incluso en cdigo relacionado a la


interfaz de usuario (UI)

Limites de la comparticin de cdigo

Instalacin de Xamarin

Descargar instalador (~2.5 Mb)

https://xamarin.com/download

Ejecutar XamarinInstaller.exe

Descarga ~1.9 Gb (Android SDH, GTK#, Xamarin


Studio, Xamarin for VS)
+1 hora

Plantillas de proyecto Xamarin/VS


apps nativas

Estas plantillas exponen la funcionalidad nativa de los dispositivos


iOS y Android como objetos de C#. Las aplicaciones tienen acceso
total a las API nativas y a los controles de usuario nativos, de modo
que tienen la misma capacidad de respuesta que las aplicaciones
iOS y Android escritas con Objective-C, Swift o Java.
Despus de crear un proyecto, podr aprovechar todas las
caractersticas de productividad de Visual Studio. Por ejemplo, podr
usar un diseador para crear pginas y usar IntelliSense para
explorar las API nativas de la plataforma de iOS y Android.
Cuando est listo para ejecutar la aplicacin y ver su aspecto, puede
usar el emulador de Visual Studio para Android o el emulador de
Android que elija. Para los proyectos de iOS, conctese a un Mac en
red e inicie el emulador de Mac desde Visual Studio.
https://msdn.microsoft.com/es-MX/library/dn771552.aspx

Plantillas nativas Android

Plantillas cross-platform

Segn la complejidad del diseo de las aplicaciones,


puede considerar la posibilidad de compilarlas usando
plantillas Xamarin.Forms en el grupo Aplicaciones
mviles de plantillas de proyecto.
Xamarin.Forms es un Kit de herramientas de interfaz
de usuario que permite crear una nica interfaz de
usuario que puede compartir entre Android, iOS y
Windows Phone.
Al compilar una solucin Xamarin.Forms, obtendr
una aplicacin Android, una aplicacin iOS y una
aplicacin Windows Phone.

Plantillas cross-platform

Ventajas y limitaciones cross

Aunque la idea de crear una interfaz de usuario que se


representa en las tres plataformas parece muy atractiva,
asegrese de revisar las ventajas y limitaciones de ese
mtodo antes de realizar una inversin.
Si finalmente es necesario que ample el marco de trabajo
creando numerosos representadores de controles
personalizados para lograr experiencias de usuario ms
complicadas y personalizadas, quizs quiera disear una
interfaz de usuario independiente para cada plataforma.
Seguir disfrutando todas las ventajas que ofrece usar un
solo lenguaje (C#), podr compartir grandes cantidades de
cdigo entre los dispositivos.

Compartiendo cdigo entre apps

Si no est usando Xamarin.Forms y opta por un diseo


individual para cada plataforma, puede compartir la mayor parte
del cdigo que no sea de interfaz de usuario entre los
proyectos de plataforma (Windows, iOS y Android).
Esto incluye cualquier lgica de negocios, la integracin en la
nube, el acceso a bases de datos o cualquier otro cdigo que
tenga como destino .NET Framework. El nico cdigo que no
se puede compartir es el cdigo que tiene como destino una
plataforma especfica.
El cdigo se puede compartir mediante un proyecto compartido,
un proyecto de Biblioteca de clases portable o ambos.
Posiblemente ver que algunos cdigos encajan mejor en un
proyecto compartido y que otros tienen ms sentido dentro de
un proyecto de Biblioteca de clases portable.

Limitaciones

Instalando Xamarin con VS 2013 en un Win7,


solo es accesible el desarrollo para Android.
Para generar las versiones de plataforma
especfica, se requiere hardware/software
nativo:

Mac, MacOS, iOS....

Windows 8.1 o superior, Win Phone 8 ...

Antes de empezar a programar...

Una decisin fundamental, es definir como se


estructurarn nuestras aplicaciones.
Usar todo el soporte de Xamarin para terminar
desarrollando "nativo", no tiene sentido.
En cambio, el enfoque de multiplataforma
(cross) es lo que debe aprovecharse.
Adicional al tipo de plantillas a usar, debe
establecerse una arquitectura de base.

Exploracin de una app Xamarin

Para descubrir qu contiene el cdigo para una


aplicacin Xamarin, se propone:

Crear una solucin Xamarin.Forms Portable

Analizar la estructura de la solucin

Ejecutar la aplicacin (Android)

Analizar el contenido de los proyectos

Primer paso: tipo de proyecto

Necesito una cuenta?

Si, para hacer deploy en un dispositivo e incluso para ejecutar el ejemplo (existe la opcin
Start a trial of Xamarin Business vlida por 30 das). Si solo se quiere ver el cdigo basta
con darle Cancel.

As que empezamos con una


subscripcin de prueba.

Importante

Debe seleccionarse la opcin de TRIAL Business (ver detalles) para poder usar
Xamarin.Forms, de lo contrario en lugar de TRIAL aparecer un nivel STARTER y eso
causar errores al tratar de compilar un proyecto Xamarin.Forms:
1>User code size, 4239932 bytes, is larger than 131072 and requires a
Business (or higher) License.
1>Using type `Android.Runtime.JNIEnv` requires Business (or higher)
License.
1>ERROR al compilar.

Y despus de la prueba... invertir

Este esquema es una de las grandes dudas posteriores a la adquisicin de MS.


Esto seguir aplicando?

Contenido de la solucin
Proyectos
XFPortableTest

XFPortableTest (Portable)

XFPortableTest.Droid

XFPortableTest.iOS

XFPortableTest.Windows
(8.1)
XFPortableTest.WinPhone
(8.1)

Y al ejecutar ... problemas!

Asumiendo que no hay soporte para iOS y Windows 8.1 en Win7, aplicar Unload
project a los proyectos de iOS, Windows y WinPhone.
La otra cuestin es que la ejecucin se esperara en un emulador, y parece que
interpreta como si fuera sobre un dispositivo.

Lanzar el emulador de Android 4

Y que aparece el emulador

Y al ejecutar de nuevo la aplicacin, compila y


hace el deploy en el emulador (tarda
muchsimo)....

Y al fin...

15 minutos despus, primero despliega una


advertencia relacionada a que el built esta
hecho con una versin de evaluacin y solo
durar 24 horas.
Luego muestra un ttulo con el nombre de la
solucin.
Y al final, el Hola mundo es un Welcome....

Contenido de los proyectos


App.cs
XFPortableTest (Portable)

XFPortableTest

XFPortableTest.Droid

MainActivity.cs

App.cs = layout UI + elementos UI

ContentPage
StackLayout
Label

Definiendo la interfaz de usuario


UI

En cdigo fuente
usando el API de
Xamarin.Forms

Opciones

Extensible
Application
Markup
Language (XAML)

Cada pantalla corresponde a un Page en Xamarin Forms, la cual representa


un Activity en Android, un ViewController en iOS o un Page en WinPhone

MainActivity = punto de arranque Android

En el caso de Android, el arranque de la app depende de declarar una actividad con la propiedad
MainLauncher=true
[Activity(Label = "XFPortableTest", Icon = "@drawable/icon", MainLauncher = true, ConfigurationChanges =
ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsApplicationActivity
Iniciar la actividad y los componentes necesarios en este caso de una forma en el evento OnCreate
Xamarin.Forms.Forms.Init(this, bundle);
y cargar la app para su ejecucin
LoadApplication(new App());

Comentarios

El desarrollo de apps multiplataforma implica:

Conocer las capacidades de VS

Conocer las capacidades de Xamarin

Conocer los pormenores de la plataforma objetivo


(Android, iOS, Win)

El demo que genera una solucin


Xamarin.Forms es muy escueta, por lo que
debe plantearse un caso donde puedan
aplicarse ms conceptos y tcnicas que
permitan un desarrollo complejo.

Respecto al hardware

Es inhumano el tiempo que una maquina dual


core con 3 GB de RAM, Win7 y VS2013 puede
tardar para compilar o ejecutar una prueba.
Al menos 4 GB de RAM y un procesador de 3
cores deben aliviar esta situacin, pero tal vez
lo mejor sea un i5 y 6 GB.

Siguientes pasos: tcnicas de


programacin

Como toda nueva herramienta, hay una curva


de aprendizaje respecto a conocer las
capacidades del nuevo juguete y "cmo hacer".
En las siguientes entregas, el objetivo ser
revisar estos 2 temas.

Siguientes pasos: rumbo a una


arquitectura compartida
Reuso/Compartir cdigo
Organizar el cdigo de la aplicacin en
capas, usando el principio de
separacin de responsabilidad.
Colocar funcionalidad de base que sea
agnstica de la plataforma en una
librera base (core) reusable.

El futuro (inmediato)

Microsoft adquiri Xamarin en febrero de 2016.

Las incognitas que pronto se resolvern:

Xamarin se integrar al Visual Studio?


Seguir cobrandose aparte o el costo lo absorbera
la MSDN?
Seguir requiriendose hardware/software nativo
para generar versiones especficas, o viene algun
SaaS que genere las versiones en la nube?
Qu pasar con Cordova y otras opciones cross?

Referencias

Java WORA *

Building Cross Platform Applications *

An introduction to Xamarin Forms *

Getting Started with Xamarin.Forms *

Desarrollo de Apps Cross-Platform con Xamarin.Forms *

TUTORIAL: Desarrollo de Aplicacin para Android con


Xamarin *

Referencias (2)

Libreras Portables: Comparte cdigo entre mltiples


plataformas *
Property Finder a Cross-Platform Xamarin MonoTouch
Mobile App *
Why I Dont Recommend Xamarin for Mobile Development
*