Compartilhar via


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:

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