Post on 14-Aug-2015
transcript
Template designed by
Introduzione a XamarinMatteo PaganiSupport Engineer – AppConsult @ Microsoftmatteo.pagani@microsoft.com http://wp.qmatteoq.com
Lo sviluppo cross platform
I requisiti di Xamarin
L’approccio Xamarin tradizionale
Xamarin Forms
agenda
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
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
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.
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.)
Welcome to Xamarin!
Access to all the platform
features
Native user interface
Android, iOS and Windows development with Visual
Studio
You can share, on
average, up to 75% of the
code
You can reuse your C# skills
• 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
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.
• 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
iOS Runtime Model
iOS
Native APIsMapKit
UIViewControllerHealthKit
Etc.
App Native Code
Mono Runtime .NET BCL
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.
Android Runtime Model
Android OS
Mono VM
Native APIsGoogle PlaySupport Lib
Activity, FragmentsEtc.
APK
IL CodeResourc
es
Dalvik/ART VM
Bridge
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
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
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)
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
• 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
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
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}
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
L’approccio standard
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.)
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{
...}
UI definita tramite XML
Classe C# che eredita da Activity ed è
decorata con l’omonimo attributo
Accesso ai controlli in Xamarin Android
<TextView android:id="@+id/PhoneNumber" />
// aapt resource value: 0x7f050000public const int PhoneNumber = 2131034112;
TextView phoneNumberView = this.FindViewById<TextView>(Resource.Id.PhoneNumber);
Viene assegnato un ID nell’XML
E’ possibile accedere ai controlli tramite un ID
Il processo di build genera una risorsa
Si sfrutta la risorsa per accedere al
controllo
• 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
• 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
dem
o Xamarin Android
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?
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?
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
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à
Xamarin Forms<DatePicker />
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?
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?
dem
o Xamarin Forms
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