Las ventajas que te ofrece Microsoft Azure y el mundo.NET

Xamarin.Forms | Compilación condicional y ejecución por dispositivos

xamarin-logoCon Xamarin y Xamarin.Forms se ha abierto la posibilidad de desarrollar para Windows Phone, iOS y Android compartiendo el código e, incluso con Xamarin.Forms también las vistas con lo que se hace necesario disponer de mecanismos que nos permitan modificar algunos detalles en caso de necesitar que el alguna plataforma o en todas, haya un comportamiento o una visualización diferente. Es aquí donde aparecen dos estrategias diferentes para alcanzar este objetivo, la tradicional compilación condicional y la ejecución por dispositivos.

Compilación condicional

Los desarrolladores de .NET y en especial los que usamos C# ya conocíamos la compilación condicional para establecer diferentes parámetros dependiendo del modo de ejecución de la aplicación que estuviéramos desarrollando, por ejemplo, cambiar parámetros en una ejecución de depuración (DEBUG) que difieran de los de producción.

#if DEBUG
    // Código a ejecutar si se ejecuta en modo depuración
#else
    // Código a ejecutar fuera del modo depuración
#endif

Dado que en el desarrollo de Apps multiplataforma tenemos que poder diferenciar entre dispositivos, Xamarin.Forms nos aporta las siguientes símbolos:

Android + iOS

#if __MOBILE__
//Código específico para Android e iOS
#endif

iOS

#if __IOS__
//Código específico para iOS
#endif

Android

#if __ANDROID__
//Código específico para Android
#endif

También podemos ser más específicos afinando en la versión de Android

#if __ ANDROID _11__
//Código específico para Android 3.0 Honeycomb o superior
#endif

Windows Phone

Para Windows Phone se definen dos símbolos, WINDOWS_PHONE y SILVERLIGHT

#if __WINDOWS_PHONE__
//Código específico para Windows Phone
#endif
#if __SILVERLIGHT__
//Código específico para Windows Phone
#endif

Esto nos permitirá ejecutar nuestra aplicación con diferentes códigos por ejemplo para mostrar un Hello world personalizado.

helloworld

NOTA: En Portable Class Libraries (PCL) no funciona la directiva #if con lo que tendremos que buscar una alternativa como la que os muestro en el siguiente punto

Ejecución por dispositivos

Además de la compilación condicional, en Xamarin.Forms disponemos de otra opción tanto para código C# como para XAML donde podemos diferenciar también entre las diferentes plataformas.

C#

En C# tendremos que hacer uso de Device.OnPlatform que nos permite diferenciar entre plataformas.

Device.OnPlatform(
    Android:()=> { myLabel.Text = “Hello World from Android” },
    iOS: ()  => { myLabel.Text = “Hello World from iOS”},
    WinPhone: () => {myLabel.Text = “Hello World from Windows Phone”}
);

XAML

En XAML podemos hacer lo mismo que con C# pero, evidentemente con XAML

<Label>
    <Label.Text>

        <OnPlatform x:TypeArguments="Text"
                  iOS="Hello World from iOS"
                  Android="Hello World from Android"
                  WinPhone="Hello World from Windows Phone"/>
    </Label.Text>
Label>

 

Conclusión

Xamarin.Forms no sólo ofrece una alta productividad a la hora de desarrollar aplicaciones multiplataforma, sino que, unida a la posibilidad de diferenciar plataformas en código para realizar cosas específicas como por ejemplo establecer diferentes separaciones con paddings, también ofrece la posibilidad de realizar tareas específicas en función de la plataforma mejorando así la experiencia de desarrollo y, por tanto, también la experiencia de usuario.

 

mm

Sobre Santiago Porras Rodríguez

Innovation Team Leader at ENCAMINA | MVP in Developer Technologies. Apasionado por las nuevas tecnologías. Colaboro con la comunidad de desarrolladores escribiendo artículos en mi blog personal y ocasionalmente en CompartiMOSS.com. Además, soy uno de los coordinadores de TenerifeDev, grupo de usuarios de .NET de Tenerife y de otros grupos como Comunidad Office 365. Puedes encontrarme en la red microparticipando en Twitter con el usuario @saintwukong
Esta entrada ha sido publicada en Movilidad, Sin categoría, Xamarin, Xamarin.Forms y etiquetada como , , . Enlace permanente .
Suscríbete a Piensa en Sofware desarrolla en Colores

Suscríbete a Piensa en Sofware desarrolla en Colores

Recibe todas las actualizaciones semanalmente de nuestro blog

You have Successfully Subscribed!

ENCAMINA, piensa en colores