[Xamarin] Multi-Targeting

Introducción

Con la llegada de .NET Core (y el formato project.json) llegamos a tener la opción de hacer multi-targeting. El multi-targeting no es más que compilar casi el mismo código varias veces para plataformas diferentes. Por ejemplo, con ASP.NET Core era habitual utilizar net45 o netcoreapp1.0. Más habitual era crear librerías con diferente funcionalidad basada en diferentes versiones de .NET Core. Por ejemplo, una librería con netstandard1.0 y netstandard1.4 como target.

Aunque con algunas otras plataformas (como UWP) era posible hacer algo similar no ha sido hasta el cambio a MSBuild y últimas versiones de Visual Studio 2017 donde hemos llegado a poder hacer multi-targeting con UWP, PCLs, Xamarin.Android y Xamarin.iOS.

En este artículo, vamos a conocer todos los conceptos básicos de Multi-Target así como sus beneficios a la hora de trabajar con Xamarin.

Multi-Targeting con Xamarin

Si cuentas con una librería que no requiere de código específico por plataforma no es necesario hacer multi-targeting. Como desarrolladores Xamarin, si utilizas una librería portable sin requerir código específico por plataforma, te puede interesar actualizar a una libreria .NET Standard pero sin necesidad de multi-targeting. Uno de los motivos principales para necesitar multi-target es utilizar código específico desde una librería. En estos casos, podemos tener una librería con el código común junto con N proyectos por cada plataforma que deseamos soportar. Con el uso de inyección de dependencias accedemos a la implementación específica de una plataforma. Es una forma de trabajar habitual y correcta. Sin embargo, con multi-targeting podemos tener un único proyecto con el que acceder al código de plataforma directamente.

Vamos a crear el ejemplo más básico. Partimos desde una librería .NET Standard.

Librería .NET Standard

Tras crear el proyecto, hacemos clic derecho sobre el mismo y elegimos la opción Editar:

Editar proyecto

Podemos editar el proyecto sin necesidad de descargar o cerrar el mismo viendo los cambios de forma inmediata.

Cambiamos la línea:

<TargetFramework>netstandard2.0</TargetFramework>

Por:

<TargetFrameworks>netstandard1.3;netstandard2.0</TargetFrameworks>

Y tras guardar cambios…

Multi-Targeting

Acontinuación, tienes el código fuente de un ejemplo disponible GitHub haciendo uso de Multi-Targeting en Xamarin:

Ver GitHubEl ejemplo es una librería con soporte a Multi-Targeting para netstandard1.0, netstandard2.0, MonoAndroid80, XamariniOS11 y uap10.0.15063.

NOTA: Se puede añadir soporte a .NET Framework, TvOS, macOS o Tizen en la misma librería con Multi-Targeting.

En el ejemplo, tenemos una interfaz IMultiTargeting con un único método:

string Sample ();

En la implementación de cada plataforma, sencillamente se devuelve una cadena con el nombre de la plataforma. Sin embargo, en cada implementación tenemos acceso a APIs nativas de la plataforma.

Ejemplo

Plugin Visual Studio para crear plantillas Multi-Targeting

James Montemagno que ya ha actualizado sus plugins para utilizar Multi-Targeting ha agrupado su experiencia en actualizar Plugin For Xamarin Templates para Visual Studio 2017 con soporte a Multi-Targeting.

Tras instalar el plugin, encontraremos dentro del conjunto de plantillas de proyecto de C# una llamada Plugin for Xamarin:

A crear nuevo plugin!

Este tipo de proyecto se encarga de preparar todo lo necesario para crear un nuevo Plugin para Xamarin para múltiples plataformas con un único proyecto utilizando Multi-Targeting:

Estructura del proyecto

Recuerda, cualquier duda o comentario es bienvenido en los comentarios!

Más información

Anuncios

2 pensamientos en “[Xamarin] Multi-Targeting

  1. Pingback: [Evento CartujaDotNet] Plugins, Multi-Targeting y NuGets | Javier Suárez | Blog

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

w

Conectando a %s