2. Agenda
• Shared project
• PCL e DependencyService
• Gestire le differenze
• I Custom Renderer
• .NET Standard Library
3. Shared or Portable
Portable Class Library or Shared Project
C# Platform Specific C# Platform Specific C# Platform Specific
Shared C# Interface Code
(Xamarin.Forms)
Shared C# App Logic
(ViewModels, Models etc)
4. Shared Project
• Un tipo di progetto speciale, che non produce una DLL in fase di
compilazione
• I file contenuti al suo interno vengono replicati nei singoli progetti,
con il meccanismo dei link di Visual Studio
• Stesso meccanismo usato nelle Universal Windows app per
condividere codice tra Windows e Windows Phone
5. Shared Project
Per gestire le differenze tra le piattaforme si utilizza la compilazione
condizionale, come nelle Universal Windows app
public void DoSomething()
{
#if WINDOWS_PHONE
//utilizzo le API di Windows Phone
#endif
#if __ANDROID__
//utilizzo le API di Android
#endif
#if __IOS__
//utilizzo le API di iOS
#endif
}
6. Shared Project
Nell’ambito Xamarin Forms, sconsiglio questo approccio perché
rende il codice poco comprensibile e difficile da leggere, soprattutto
in caso di utilizzo di molte API differenti
8. Portable Class Libraries (PCL)
• Il progetto produce una libreria DLL, compatibile con tecnologie
differenti (Windows, Windows Phone, Xamarin, ecc.)
• Supporta il set di API minimo condivisibile tra le piattaforme
selezionate
• Non è possibile utilizzare la compilazione condizionale
9. DependencyService
• Si crea un’interfaccia nel progetto condiviso, che espone i metodi
comuni tra tutte le piattaforme
• Si crea un’implementazione dell’interfaccia specifica per ogni
piattaforma, che utilizza le API di Xamarin
• Tramite la classe DependencyService, si ottiene un riferimento
all’implementazione specifica per la piattaforma corrente
12. Gestire le differenze
Xamarin Forms offre la classe Device, che:
• Permette di distinguere la piattaforma e implementare variazioni
nel layout
• Permette di effettuare alcune operazioni cross-platform
direttamente nel progetto condiviso:
• Invocare un URL -> OpenUri()
• Avviare un timer -> StartTimer()
• Eseguire un’operazione sul thread della UI ->
BeginInvokeOnMainThread()
13. Le differenze nel layout
<Label>
<Label.FontSize>
<OnPlatform x:TypeArguments="x:Double"
WinPhone="20"
iOS="25"
Android="30" />
</Label.FontSize>
</Label>
15. CustomRenderer
• E’ il meccanismo di Xamarin Forms che consente di personalizzare
l’aspetto e il comportamento dei controlli in base alla piattaforma
• Un controllo base, nel progetto condiviso, da utilizzare nelle pagine
XAML
• Una classe in ogni progetto specifico, in grado di utilizzare le API
native della piattaforma