Criando pacotes NuGet manualmente para o Xamarin
Esta página contém algumas dicas para ajudar a criar pacotes NuGet destinados à plataforma Xamarin.
Observação
O Xamarin Studio 6.2 (e o Visual Studio para Mac) inclui a capacidade de gerar automaticamente pacotes NuGet a partir de PCL, .NET Standard ou Projetos Compartilhados. Consulte o guia Bibliotecas multiplataforma para compartilhamento de código para obter mais detalhes.
Perfis do Pacote NuGet Xamarin
O site NuGet Supporting Multiple .NET Framework Versions and Profiles discute como oferecer suporte a diferentes estruturas e perfis da Microsoft, mas não inclui os nomes de estrutura de destino usados pelo Xamarin.
As principais estruturas de destino do Xamarin em uso atualmente são:
- MonoAndroid - Xamarin.Android
- Xamarin.iOS - API unificada Xamarin.iOS (suporta 64 bits)
- Xamarin.Mac - Perfil móvel do Xamarin.Mac , que é equivalente à superfície da API Xamarin.iOS e Xamarin.Android.
Há também um destino para a API clássica do iOS mais antiga:
- MonoTouch - API Clássica do iOS
Um arquivo .nuspec direcionado a todos esses itens seria algo como:
<files>
<file src="Mac\bin\Release\*.dll" target="lib\Xamarin.Mac20" />
<file src="iOS\bin\Release\*.dll" target="lib\Xamarin.iOS10" />
<file src="Android\bin\Release\*.dll" target="lib\MonoAndroid10" />
<file src="iOSClassic\bin\Release\*.dll" target="lib\MonoTouch10" />
</files>
O acima ignora todas as bibliotecas de classes portáteis.
A maioria dos arquivos .nuspec especifica o número da versão da estrutura de destino, mas é opcional se o assembly funcionar com todas as versões dessa estrutura de destino. Então, se o seu alvo era lib\MonoAndroid isso significaria que ele funciona com qualquer versão do Xamarin.Android.
Você pode especificar a versão com um conjunto de números sem um ponto decimal ou pode especificá-la usando pontos decimais. Sem o ponto decimal, o NuGet apenas pegará cada número e o transformará em uma versão inserindo um '.' entre cada dígito.
No acima "MonoAndroid10" significa "Android 1.0". Isso significa apenas que a estrutura de destino do projeto precisa ser MonoAndroid versão 1.0 ou superior. A versão é especificada no <TargetFrameworkVersion>
elemento no arquivo de projeto.
Para esclarecer:
- MonoAndroid403 corresponde Android 4.0.3 e mais recente (ou seja, API nível 15)
- Xamarin.iOS10 corresponde ao Xamarin.iOS 1.0 e mais recente
- O Xamarin.iOS1.0 também corresponde ao Xamarin.iOS 1.0 e mais recente
NuGets PCL com dependências de plataforma
Os perfis PCL são limitados em quais APIs do .NET framework eles podem acessar e certamente não podem acessar o código específico da plataforma. Esses links de terceiros 3rd discutem diferentes abordagens para criar pacotes NuGet que usam PCL e APIs nativas para fornecer compatibilidade para Xamarin e outras plataformas:
- Como fazer bibliotecas de classes portáteis trabalhar para você
- Criando uma PCL NuGet que funciona com o Xamarin.iOS
Essa lista externa de perfis PCL com seu nome de destino NuGet também é uma referência útil.
Exemplos
Alguns exemplos de código aberto que você pode consultar:
- ModernHttpClient – Escreva seu aplicativo usando System.Net.Http, mas solte essa biblioteca e ela será drasticamente mais rápida (exibir código-fonte).
- Splat – Uma biblioteca para fazer coisas multiplataforma que deve ser (ver fonte).
- NGraphics - Uma biblioteca multiplataforma para renderizar gráficos vetoriais no .NET (exibir código-fonte).