Categorías: Movilidad Sin categoría Xamarin Xamarin.Forms

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

Con 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.

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.

 

Compartir
Publicado por
Santiago Porras Rodríguez

Este sitio web utiliza cookies para que tengas la mejor experiencia de usuario. Si continuas navegando, estás dando tu consentimiento para aceptar las cookies y también nuestra política de cookies (esperemos que no te empaches con tanta cookie 😊)