Presentazioni Efficaci e lezioni di Educazione Civica
INTRO TO XAMARIN
1. Template designed by
Introduzione a Xamarin
Matteo Pagani
Support Engineer – AppConsult @ Microsoft
matteo.pagani@microsoft.com
http://wp.qmatteoq.com
2. Lo sviluppo cross platform
I requisiti di Xamarin
L’approccio Xamarin tradizionale
Xamarin Forms
agenda
3. Una applicazione, tante piattaforme
• In un mondo ideale, sarebbe bello poter sviluppare
l’applicazione solo
• Nel mondo reale, le cose funzionano in maniera differente:
• Windows Phone: C# / VB.NET + XAML o JS + HTML e Visual Studio
• iOS: Objective-C / Swift and Xcode
• Android: Java e Eclipse / Android Studio / editor di terze parti
4. Sviluppo nativo
Pro
• Performance
• Puoi utilizzare tutte le feature della piattaforma
Contro
• Devi conoscere linguaggi di programmazione e tool molto diversi
tra di loro
• Tre differenti codebase da mantenere, senza la possibilità di
condividere codice
5. Sviluppo con tecnologie web
Basato su tecnologie web (HTML e Javascript) e tool come
Apache Cordova, che offrono l’accesso alle API native tramite
librerie Javascript.
L’applicazione nativa è composta da una singola WebView,
che si fa carico di renderizzare il contenuto web.
6. Sviluppo con tecnologie web
Pro
• L’interfaccia utente e la logica sono sviluppate una volta sola.
• E’ possibile riutilizzare le skill web e i framework più diffusi come jQuery,
AngularJS, Bootstrap, ecc.
Contro
• Performance peggiori rispetto alle applicazioni native
• Un’unica interfaccia utente significa che è molto difficile realizzare una UI
che rispetti le guideline di ogni piattaforma
• E’ possibile sfruttare solo le API che sono in comune tra tutte le piattaforme
(storage, GPS, sensori, etc.)
8. • E’ basato su Mono, l’implementazione open source di C# e .NET
• E’ stata creato per supportare lo sviluppo .NET su diverse
piattaforme:
• Linux
• BSD
• Windows
• Console
• Xamarin iOS e Xamarin Android sono basati su Mono
Xamarin and Mono
9. Xamarin and iOS
• Il codice è 100% nativo
• Compilazione Ahead-Of-Time (AOT): il processo di build produce
direttamente codice nativo, offrendo le stesse performance di
un’app realizzata con Objective-C o Swift.
• Tutte le API di iOS sono utilizzabili in Xamarin tramite la sintassi e
le naming convention di C# e del framework .NET.
• Supporto a Apple Watch, iPhone, iPad e iPod.
10. • Alcune limitazioni legate all’uso di feature C#
• Dato che viene usata compilazione AOT per produrre il
pacchetto nativo, il processo di build effettua una analisi statica
del codice:
• Niente reflection
• Niente classi con uso di generic
• Niente generazione dinamica di codice
Xamarin and iOS
12. Xamarin and Android
• Approccio simile al framework .NET:
• Il codice C# viene convertito in IL e incluso nell’APK
• L’IL viene convertito in codice nativo tramite compilazione Just-In-Time (JIT)
dal device
• Xamarin produce un pacchetto che offre le stesse performance
di un’applicazione di un’applicazione scritta in Java
• Sono supportate tutte le API di Android.
• Supporta diverse branch di Android: Kindle Fire, Android Wear,
Android TV, ecc.
13. Android Runtime Model
Android OS
Mono VM
Native APIs
Google Play
Support Lib
Activity, Fragments
Etc.
APK
IL Code Resources
Dalvik/ART
VM
Bridge
14. Tool di sviluppo
Xamarin Studio:
• Disponibile su Windows e OS X
• Supporta Android e iOS (solo su OS X)
• Incluso nella licenza Xamarin
Visual Studio:
• Plugin che si integra con Visual Studio
• Supporta Android, iOS e Windows Phone
15. Sviluppo iOS con Xamarin
• Richiede un Mac dato che, per limitazioni tecniche e di
licenza, la compilazione iOS è possibile solo su OS X.
• E’ possibile utilizzare un Mac come macchina di build,
grazie al tool Xamarin Build Host:
• Lo sviluppo viene fatto su Windows con Visual Studio
• La compilazione e il deploy vengono gestiti da OS X
16. Sviluppo Android con Xamarin
• Nessun requisito speciale, è supportato sia da Windows che OS
X
• E’ possibile testare le applicazioni con diversi emulatori:
• Google (sconsigliato)
• Genymotion https://www.genymotion.com
• Xamarin Android Player https://xamarin.com/android-player
• Emulatore Microsoft incluso in Visual Studio 2015 basato su Hyper-V
(utilizza l’immagine base OSP senza i servizi di Google)
17. La licenza Xamarin
• Diverse licenze disponibili: Starter, Indie, Business e
Enterprise
• Xamarin Forms richiede almeno la licenza Indie
• L’integrazione con Visual Studio richiede almeno la licenza
Business
• Prezzo scontato per gli abbonati MSDN
• Licenza gratuita per studenti e sviluppatori open source
18. • Diverse librerie di terze parti che possono essere utilizzate nei
progetti PCL, Xamarin iOS e Xamarin Android
Due piattaforme:
• NuGet
• Component Store:
• Simile a NuGet
• Supporta anche
componenti a pagamento
Librerie di terze parti
19. Condividere il codice
Shared project
• Una tipologia di progetto particolare, che non produce una DLL
come output durante il processo di build.
• I fle inclusi nel progetto vengono copiati all’interno dei progetti
specifici delle piattaforme, tramite il meccanismo dei link di Visual
Studio
• E’ basato sulla compilazione condizionale per gestire le differenze
tra le varie piattaforme
20. Tramite la compilazione condizionale, è possibile includere codice
che viene incluso durante il processo di build per una piattaforma
Condividere il codice
public void DoSomething()
{
#if WINDOWS_PHONE
//some Windows Phone APIs
#endif
#if __ANDROID__
//some Android APIs
#endif
#if __IOS__
//some iOS APIs
#endif
}
21. Condividere il codice
Portable Class Library
• Il progetto produce una DLL come output, che può essere
utilizzata in diverse tipologie di progetti (Windows,
Windows Phone, Xamarin, etc.)
• E’ supportato il set minimo di API disponibili su ogni
piattaforma
• Non supporta la compilazione condizionale
23. L’approccio standard
• L’interfaccia utente viene realizzata sfruttando i tool nativi
(Storyboard in iOS, AXML in Android)
• Accesso a tutte le API native della piattaforma
• Richiede una buona conoscenza delle due piattaforme.
• Tramite le Portable Class Library, potete condividere la logica di
business (accesso al cloud, database, comunicazione con i
servizi, ecc.)
24. In Xamarin, ogni pagina è una Activity composta da:
• Un file XML, che descrive il layout (può essere fatto anche da
codice)
• Una classe, che gestisce le interazioni con la Activity
Xamarin Android
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout ...>
<TextView ... />
<EditText ... />
<Button ... />
</LinearLayout>
[Activity(MainLauncher = true]
public class MainActivity : Activity
{
...
}
25. Accesso ai controlli in Xamarin Android
<TextView android:id="@+id/PhoneNumber" />
// aapt resource value: 0x7f050000
public const int PhoneNumber = 2131034112;
TextView phoneNumberView =
this.FindViewById<TextView>
(Resource.Id.PhoneNumber);
E’ possibile accedere ai controlli tramite un ID
26. • Basato sul pattern MVC
• Ogni applicazione ha uno Storyboard, ovvero la
rappresentazione visuale di tutte le schermate dell’app
• Ogni schermata è una scene
• Ogni scene è composta da una View (il layout) e da un
ViewController, che ne gestisce le interazioni
Xamarin iOS
27. • Le storyboard e la
navigazione tra
una scene e l’altra
vengono creati
direttamente nel
designer di
Xamarin
• Il design richiede il
collegamento con
un Mac
Il designer di Xamarin iOS
29. Si!
• Volete riutilizzare le skill su C# and .NET vostre o del vostro team
• Volete creare applicazioni che si integrino con le feature della
piattaforma
• La vostra applicazione fa largo uso di business logic che volete
riutilizzare in tutte le piattaforme
E’ la tecnologia giusta per me?
30. No!
• Voi o il vostro team non avete skill su C# e il framework
.NET
• Volete creare applicazioni mobile senza conoscere i
dettagli di ogni singola piattaforma
Is the right technology for me?
31. Xamarin Forms
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)
iOS 6.1+ Android 4.0+ WP8.0+ (Silverlight)
WinRT support in preview
32. Xamarin Forms
• Vi permette di condividere non solo la logica di business, ma
anche l’interfaccia utente.
• Linguaggio per la UI basato su XAML: i controlli XAML vengono
convertiti in controlli nativi a runtime.
• Supporta le caratteristiche princiapli dello XAML: binding,
dependency property, trigger, behavior, etc.
• Non è lo stesso XAML di Microsoft: molti punti in comune, ma
nomi diversi per alcuni controlli e proprietà
34. Si!
• Dovete creare il prototipo di un’applicazione per un cliente o per
una demo
• Dovete creare un’applicazione di business
• Non volete imparare tutte le specifiche di ogni singola
piattaforma
E’ la tecnologia giusta per me?
35. No!
• La vostra applicazione è fortemente integrata con feature
specifiche della piattaforma.
• La vostra applicazione deve avere UI differenti per ogni
piattaforma.
E’ la tecnologia giusta per me?
37. Grazie a tutti per la partecipazione
Riceverete il link per il download a slide e demo via email nei
prossimi giorni
Per contattarmi
matteo.pagani@microsoft.com
Twitter: @qmatteoq
Grazie