Condividi tramite


Riferimenti nativi nei progetti iOS, Mac e binding

I riferimenti nativi consentono di incorporare un framework nativo in un progetto Xamarin.iOS o Xamarin.Mac o un progetto di associazione.

A partire da iOS 8.0 è stato possibile creare un framework incorporato per condividere il codice tra le estensioni dell'app e l'app principale in Xcode. Usando la funzionalità Di riferimento nativo sarà possibile usare questi framework incorporati (creati con Xcode) in Xamarin.iOS.

Importante

Non sarà possibile creare framework incorporati da qualsiasi tipo di progetti Xamarin.iOS o Xamarin.Mac, i riferimenti nativi consentono solo l'utilizzo di framework nativi (Objective-C) esistenti.

Terminologia

In iOS 8 (e versioni successive) i framework incorporati possono essere collegati in modo statico e collegato dinamicamente. Per distribuirli correttamente, è necessario renderli in framework "fat" che includono tutte le sezioni per ogni architettura di dispositivo che si vuole supportare con l'app.

Framework statici e dinamici

I framework statici vengono collegati in fase di compilazione in cui i framework dinamici sono collegati in fase di esecuzione e possono essere modificati senza ricollegare. Se è stato usato un framework di terze parti prima di iOS 8, si usava un framework statico compilato nell'app. Per altri dettagli, vedere la documentazione relativa alla programmazione della libreria dinamica di Apple.

Framework di sistema incorporati e framework di sistema

I framework incorporati sono inclusi nel bundle delle app e sono accessibili solo all'app specifica tramite la sandbox. I framework di sistema vengono archiviati a livello di sistema operativo e sono disponibili per tutte le app nel dispositivo. Attualmente, solo Apple ha la possibilità di creare framework a livello di sistema operativo.

Framework sottili e fati

Thin Frameworks contiene solo il codice compilato per un'architettura di sistema specifica in cui Fat Framework contiene codice per più architetture. Ogni codebase specifica dell'architettura compilata in un framework viene definita sezione. Ad esempio, se fosse stato compilato un framework per le due architetture del simulatore iOS (i386 e X86_64), conterrà due sezioni.

Se si prova a distribuire questo framework di esempio con l'app, viene eseguito correttamente nel simulatore, ma ha esito negativo nel dispositivo perché framework non contiene sezioni specifiche del codice per un dispositivo iOS. Per garantire il funzionamento di un framework in tutte le istanze, è necessario includere anche sezioni specifiche del dispositivo, ad esempio arm64, armv7 e armv7s.

Uso dei framework incorporati

È necessario completare due passaggi per usare i framework incorporati in un'app Xamarin.iOS o Xamarin.Mac: Creazione di un framework fat e incorporamento del framework.

Creazione di un framework Fat

Come indicato in precedenza, per poter usare un framework incorporato nell'app, deve essere un Framework Fat che include tutte le architetture di sistema Slices per i dispositivi in cui verrà eseguita l'app.

Quando il framework e l'app di utilizzo si trovano nello stesso progetto Xcode, questo non è un problema perché Xcode compilerà sia il framework che l'app usando le stesse impostazioni di compilazione. Poiché le app Xamarin non possono creare framework incorporati, questa tecnica non può essere usata.

Per risolvere questo problema, lo strumento da lipo riga di comando può essere usato per unire due o più framework in un framework Fat contenente tutte le sezioni necessarie. Per altre informazioni sull'uso del comando, vedere la lipodocumentazione relativa al collegamento di librerie native.

Incorporamento di un framework

Il passaggio seguente è necessario per incorporare un framework in un progetto Xamarin.iOS o Xamarin.Mac usando riferimenti nativi:

  1. Creare un progetto Xamarin.iOS, Xamarin.Mac o Binding esistente o nuovo.

  2. Nel Esplora soluzioni fare clic con il pulsante destro del mouse sul nome del progetto e scegliere Aggiungi>riferimento nativo:

    In the Solution Explorer, right-click on the project name and select Add Native Reference

  3. Nella finestra di dialogo Apri selezionare il nome di Native Framework da incorporare e fare clic sul pulsante Apri:

    Select the name of the Native Framework to embed and click the Open button

  4. Il framework verrà aggiunto all'albero del progetto:

    The framework will be added to the projects tree

Quando il progetto viene compilato, Native Framework verrà incorporato nel bundle dell'app.

Estensioni dell'app e framework incorporati

Internamente Xamarin.iOS può sfruttare questa funzionalità per collegarsi al runtime mono come framework (quando la destinazione di distribuzione è >= iOS 8.0), riducendo così in modo significativo le dimensioni dell'app per le app con estensioni (poiché il runtime Mono verrà incluso una sola volta per l'intero bundle dell'app, anziché una volta per l'app contenitore e una volta per ogni estensione).

Le estensioni verranno collegate al runtime mono come framework, perché tutte le estensioni richiedono iOS 8.0.

App che non hanno estensioni e app destinate a iOS

Riepilogo

Questo articolo ha esaminato in dettaglio l'incorporamento di un framework nativo in un'applicazione Xamarin.iOS o Xamarin.Mac.