Framework incorporati in Xamarin.iOS
Questo documento descrive in che modo gli sviluppatori di applicazioni possono incorporare framework utente nelle app.
Con iOS 8.0 Apple ha reso possibile creare un framework incorporato per condividere il codice tra le estensioni dell'app e l'app principale in Xcode.
Xamarin.iOS 9.0 aggiunge il supporto per l'uso di questi framework incorporati (creati con Xcode) nelle app Xamarin.iOS. Non sarà possibile creare framework incorporati da qualsiasi tipo di progetti Xamarin.iOS, ma usare solo framework nativi esistenti (Objective-C).
Esistono due modi per usare i framework in Xamarin.iOS:
Passare il framework allo strumento mtouch aggiungendo quanto segue agli argomenti mtouch aggiuntivi nelle opzioni di compilazione iOS del progetto:
--framework:/Path/To/My.Framework
Deve essere impostato per ogni configurazione del progetto.
Aggiungere riferimenti nativi dal menu di scelta rapida
Fare clic con il pulsante destro del mouse su Progetto e scegliere Aggiungi riferimenti nativi
Questa operazione funzionerà per tutte le configurazioni.
Nelle versioni future di Visual Studio per Mac e degli strumenti Xamarin per Visual Studio sarà possibile usare i framework dall'IDE (senza modificare manualmente i file di progetto).
Alcuni progetti di esempio sono disponibili in github
Limiti
- I framework incorporati sono supportati solo nei progetti unificati .
- I framework incorporati sono supportati solo nei progetti con una destinazione di distribuzione di almeno iOS 8.0.
- Se un'estensione richiede un framework incorporato, l'app contenitore deve avere anche un riferimento al framework. In caso contrario, il framework non verrà incluso nel bundle dell'app.
Runtime di Mono
Internamente Xamarin.iOS sfrutta questa funzionalità per collegarsi al runtime mono come framework, invece di collegare il runtime Mono in modo statico a ogni estensione e all'app contenitore.
Questa operazione viene eseguita automaticamente se l'app contenitore è un'app unificata, contiene estensioni e la distribuzione di destinazione è iOS 8.0 o versione successiva.
Le app senza estensioni continueranno a essere collegate al runtime mono in modo statico, perché è prevista una riduzione delle dimensioni per l'uso di un framework se è presente una sola app che lo fa riferimento.
Questo comportamento può essere sottoposto a override dallo sviluppatore dell'app aggiungendo quanto segue come argomento mtouch aggiuntivo nelle opzioni di compilazione iOS del progetto:
--mono:static
: collegamenti al runtime mono in modo statico.--mono:framework
: collegamenti al runtime mono come framework.
Uno scenario per il collegamento con il runtime mono come framework anche per le app senza estensioni consiste nel ridurre le dimensioni del file eseguibile, per superare eventuali restrizioni di dimensioni applicate da Apple per l'eseguibile. Per riferimento, il runtime di Mono aggiunge circa 1,7 MB per architettura (a partire da Xamarin.iOS 8.12, ma varia tra le versioni e anche tra le app). Il framework Mono aggiunge circa 2,3 MB per architettura, il che significa che per un'app a architettura singola senza estensioni, rendendo il collegamento dell'app al runtime mono come framework ridurrà completamente l'eseguibile di ~1,7 MB, ma aggiungere un framework ~2.3 MB, con conseguente un'app di circa 0,6 MB più grande.