Referências nativas em projetos iOS, Mac e Associações
As referências nativas permitem inserir uma estrutura nativa em um projeto ou projeto de associação do Xamarin.iOS ou Xamarin.Mac.
Desde o iOS 8.0, é possível criar uma estrutura inserida para compartilhar código entre extensões de aplicativo e o aplicativo main no Xcode. Usando o recurso Referência Nativa, será possível consumir essas estruturas inseridas (criadas com Xcode) no Xamarin.iOS.
Importante
Não será possível criar estruturas inseridas de nenhum tipo de projetos Xamarin.iOS ou Xamarin.Mac, as Referências Nativas permitem apenas o consumo de estruturas nativas existentes (Objective-C).
Terminologia
No iOS 8 (e posterior), as Estruturas Inseridas podem ser incorporadas estaticamente vinculadas e vinculadas dinamicamente. Para distribuí-las corretamente, você deve transformá-las em estruturas "gordas" que incluíram todas as fatias para cada arquitetura de dispositivo que você deseja dar suporte ao seu aplicativo.
Estruturas estáticas versus dinâmicas
As Estruturas Estáticas são vinculadas em tempo de compilação em que as Estruturas Dinâmicas são vinculadas no runtime e, por isso, podem ser modificadas sem vinculação nova. Se você usou qualquer Framework de terceiros antes do iOS 8, estava usando uma Estrutura Estática que foi compilada em seu aplicativo. Confira a documentação de Programação de Biblioteca Dinâmica da Apple para obter mais detalhes.
Embedded vs. System Frameworks
As Estruturas Inseridas são incluídas no pacote de aplicativos e só podem ser acessadas para seu aplicativo específico por meio de sua área restrita. As Estruturas do Sistema são armazenadas no nível do sistema operacional e estão disponíveis para todos os aplicativos no dispositivo. Atualmente, apenas a Apple tem a capacidade de criar estruturas de nível de sistema operacional.
Estruturas finas versus fat
As Estruturas Finas contêm apenas o código compilado para uma arquitetura de sistema específica em que as Estruturas fat contêm código para várias arquiteturas. Cada base de código específica da arquitetura compilada em uma Estrutura é conhecida como uma Fatia. Portanto, por exemplo, se tivéssemos uma Estrutura que foi compilada para as duas arquiteturas do Simulador do iOS (i386 e X86_64), ela conteria duas Fatias.
Se você tentasse distribuir essa estrutura de exemplo com seu aplicativo, ela seria executada corretamente no Simulador, mas falharia no dispositivo, pois a Estrutura não contém nenhuma Fatia específica de código para um dispositivo iOS. Para garantir que uma Estrutura funcione em todas as instâncias, ela também precisaria incluir fatias específicas do dispositivo, como arm64, armv7 e armv7s.
Trabalhando com estruturas inseridas
Há duas etapas que devem ser concluídas para trabalhar com Estruturas Inseridas em um aplicativo Xamarin.iOS ou Xamarin.Mac: Criando uma Estrutura Fat e Inserindo a Estrutura.
Criando uma estrutura fat
Conforme mencionado acima, para poder consumir uma Estrutura Inserida em seu aplicativo, ela deve ser uma Fat Framework que inclua todas as arquiteturas do sistema Fatias para os dispositivos em que seu aplicativo será executado.
Quando o Framework e o aplicativo de consumo estão no mesmo projeto Xcode, isso não é um problema, pois o Xcode compilará a Estrutura e o Aplicativo usando as mesmas configurações de build. Como os aplicativos Xamarin não podem criar Estruturas Inseridas, essa técnica não pode ser usada.
Para resolver esse problema, a lipo
ferramenta de linha de comando pode ser usada para mesclar duas ou mais Estruturas em uma Estrutura Fat que contém todas as Fatias necessárias. Para obter mais informações sobre como trabalhar com o lipo
comando, consulte nossa documentação vinculando bibliotecas nativas .
Inserindo uma estrutura
A etapa a seguir é necessária para inserir uma estrutura em um projeto Xamarin.iOS ou Xamarin.Mac usando referências nativas:
Crie um novo ou abra um projeto Xamarin.iOS, Xamarin.Mac ou Binding existente.
No Gerenciador de Soluções, clique com o botão direito do mouse no nome do projeto e selecione Adicionar Adicionar>Referência Nativa:
Na caixa de diálogo Abrir , selecione o nome do Native Framework que você deseja inserir e clique no botão Abrir :
A estrutura será adicionada à árvore do projeto:
Quando o projeto for compilado, o Native Framework será inserido no pacote do aplicativo.
Extensões de aplicativo e estruturas inseridas
Internamente, o Xamarin.iOS pode aproveitar esse recurso para se vincular ao runtime Mono como uma estrutura (quando o destino da implantação é >= iOS 8.0), reduzindo o tamanho do aplicativo significativamente para aplicativos com extensões (já que o runtime Mono será incluído apenas uma vez para todo o pacote de aplicativos, em vez de uma vez para o aplicativo contêiner e uma vez para cada extensão).
As extensões serão vinculas ao runtime mono como uma estrutura, pois todas as extensões exigem o iOS 8.0.
Aplicativos que não têm extensões e aplicativos direcionados ao iOS
Resumo
Este artigo deu uma olhada detalhada na inserção de uma Estrutura nativa em um aplicativo Xamarin.iOS ou Xamarin.Mac.