advertisement

Xamarin et le développement natif d’applications Android, iOS et Windows en C#

50 %
50 %
advertisement
Information about Xamarin et le développement natif d’applications Android, iOS et Windows...
Technology

Published on March 7, 2014

Author: soatexpert

Source: slideshare.net

Description

Les slides de la conférence présentée par Cyril Cathala chez Soat le 04/03/2014 sur le thème : Xamarin et le développement natif d’applications Android, iOS et Windows en C#
advertisement

Xamarin et le développement natif d’applications Android, iOS et Windows en C# 07/03/2014 1

Cyril CATHALA Expert .NET – Soat MVP C# @CyrilCathala http://cyril.cathala.org Wallbase Quoties 1 Indice 1 Mot Showrizo Movie Battle

Agenda Les enjeux de la mobilité Hybride vs natif Xamarin Sous le capot Design & UX Multiplateforme MvvmCross 07/03/2014 3

LES ENJEUX DE LA MOBILITÉ #mstechdays 07/03/2014 4

Marché du mobile 07/03/2014 5

Fragmentation 07/03/2014 6

Fragmentation 07/03/2014 7

Fragmentation 07/03/2014 8

“By 2016, 70% of the mobile workforce will have a smartphone, and 90% of enterprises will have two or more platforms to support” Gartner Research 07/03/2014 9

HYBRIDE VS NATIF #mstechdays 07/03/2014 10

Web mobile • Plus – Standard multiplateformes – Version du site déclinée format mobile – Faibles coûts – Référencement via moteur de recherche • Moins – Expérience limitée au navigateur – En ligne uniquement Natif • Plus – – – – Meilleures performances Référencement via Store Respect de l’expérience utilisateur Support du hors ligne • Moins – Spécifique à la plateforme – Coûteux – Maintenance 07/03/2014 11

Type Description Exemples Cible Langage Web app • Site web responsive • Aide au développement avec composants réutilisables jQuery Mobile, Sencha Touch, Zepto JS, ImpactJS, LimeJS, iUI, Wink… Développeurs web Javascript Hybride web • Wrapper d’app HTML/JS • Single-page app • Web app avec fonctionnalités natives Adobe PhoneGap Build, Uxebu, Sencha Touch v2, MoSync… Développeurs web HTML/CSS/Javascript Cross-compilation • 1 langage compilé dans le langage natif cible Xamarin, Titanium… Développeurs logiciel Langage supporté (C#, Javascript, Java…) Runtime • Machine virtuelle qui fait tourner du code intermédiaire Adobe Air Développeurs logiciel Langage supporté (ActionScript, JS…) Bas niveau • Composants graphiques bas Unity, MonoGame, niveau DeltaEngine, Corona … • Utilisé pour les jeux Développeurs jeux Langage supporté (C++, OpenGL…) 07/03/2014 12

Les utilisateurs veulent du natif pour : - l’experience - le look & feel - les performances - les fonctionnalités

XAMARIN #mstechdays

Historique Projet Mono (2001) – Mené par Miguel de Icaza MonoTouch / MonoDroid (2011) Xamarin pour Mac (fin 2012) Xamarin 2.0 (février 2013) Partenariat Xamarin / Microsoft (novembre 2013) 07/03/2014 15

Xamarin c’est quoi ? 07/03/2014 16

Approche en silos Android iOS Windows Java Eclipse Objective-C XCode C# Visual Studio 07/03/2014 17

Xamarin pour des applications natives Développement en C# 1 Outil pour les compiler tous 07/03/2014 18

Rêve du développeur .NET C# 5.0 / .NET 4.5 – – – – LINQ async/await .NET framework Garbage collection C# Libraries – SQLite, JSON.NET, SharpZipLib… 07/03/2014 19

Outils Visual Studio – Add-in – Connexion à un Mac Xamarin Studio – Basé sur MonoDevelop Android designer iOS designer (alpha) – Mac uniquement 07/03/2014 20

Environnement de développement OS IDE iOS Android Windows Phone (1) License business minimum (2) Mac requis Mac OS X Xamarin Studio ✓ ✓ - Windows Xamarin Visual Studio Studio (1)(2) ✓ (1) ✓ ✓ - ✓ (1) 07/03/2014 21

Partage de code Android iOS Windows UI Spécificités UI Spécificités UI Spécificités Code commun (business) 07/03/2014 22

API native 100% des APIs disponibles Toujours à jour – iOS7 pour Xamarin sorti le même jour 07/03/2014 23

Pourquoi utiliser Xamarin ? - Développer en C# pour tous les OS - Performances optimales - API native - Réutilisation de code - Respect de l’expérience utilisateur 07/03/2014 24

Gratuit ? Free Starter Edition 32kb d’IL ~25MB code source, sans linking 30 jours version d’essai MSDN – 90 jours avec un abonnement MSDN – 1 Licence Business pour iOS + Android : $1399 ($1998) – 5 Licences Enterprise pour iOS + Android : $9900 ($18900) 07/03/2014 26

Création de projets XAMARIN

SOUS LE CAPOT #mstechdays

Configuration 07/03/2014 29

Packaging et exécution Packaging – – – – Configuration Compilation : ARM / IL Inclue dll Xamarin utiles Signature (device / store) Xamarin runtime – Allocations mémoire – Garbage collection : Sgen vs Boehm – Interopérabilité avec la plateforme 07/03/2014 30

Tests & debug Debugger sur simulateur ou device Xamarin Test Cloud – 100aine de devices – Fragmentation / Performance – Scripting 07/03/2014 31

Documentation Xamarin http://docs.xamarin.com/ Fondamentaux de chaque OS Sujets avancés Recettes Exemples de code 07/03/2014 32

DESIGN & UX #mstechdays 07/03/2014 33

UX iOS != Android != Windows 07/03/2014 34

UX différente 07/03/2014 35

Windows iPhone Phone Android

Navigation différente 07/03/2014 37

Form factors Téléphone vs tablette Fragmentation Android Form factor + capabilities Différence d’UX Approche développement différente 07/03/2014 38

MULTIPLATEFORME #mstechdays 07/03/2014 39

Architecture 75% de code réutilisé (en moyenne) Aucun partage d’UI Portable Class Library Link File Conditional compilation 07/03/2014 40

File linking Symboles prédéfinis – – – – – #if #if #if #if #if __MOBILE__ __ANDROID__ __IOS__ WINDOWS_PHONE SILVERLIGHT Pour en avoir plus : Build Settings 07/03/2014 41

Architecture 07/03/2014 42

Vocabulaire WINDOWS PHONE View (.xaml) ANDROID Layout (.axml) Page Activity UserControl Frame Application Fragment Intent - iOS UIView (.xib ou .storyboard) UIViewController UIView UINavigationController UIApplication 07/03/2014 43

Xamarin.Mobile API cross platform Contacts Géolocalisation Caméra VNext – Compas + Accéléromètre – Notifications 07/03/2014 44

Android - Contacts ContentResolver content = getContentResolver(); Cursor ncursor = null; try { ncursor = content.query (ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data.MIMETYPE, ContactsContract.Contacts.LOOKUP_KEY, ContactsContract.Contacts.DISPLAY_NAME }, ContactsContract.Data.MIMETYPE + "=? AND " + ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME + "=?", new String[] { ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE, "Smith" }, null); while (ncursor.moveToNext()) { print (ncursor.getString(ncursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)) + lineSep); String lookupKey = ncursor.getString (ncursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY)); Cursor dcursor = null; try { dcursor = content.query (ContactsContract.Data.CONTENT_URI, new String[] { ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.Data.DATA1 }, ContactsContract.Contacts.LOOKUP_KEY + "=?", new String[] { lookupKey }, null); while (dcursor.moveToNext()) { String type = dcursor.getString (ncursor.getColumnIndex(ContactsContract.Data.MIMETYPE)); if (type.equals (ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)) print ("Phone: " + dcursor.getString(dcursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) + lineSep); else if (type.equals (ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)) print ("Email: " + dcursor.getString(dcursor.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA1)) + lineSep); } } finally { if (dcursor != null) dcursor.close(); } } } finally { if (ncursor != null) ncursor.close(); } 07/03/2014 45

iOS - Contacts ABAddressBookRef ab = ABAddressBookCreate(); CFStringRef name = CFSTR ("Smith"); CFArrayRef smiths = ABAddressBookCopyPeopleWithName(ab, name); CFRelease (name); int count = CFArrayGetCount(smiths); for (int i = 0; i < count; ++i) { ABRecordRef person = (ABRecordRef)CFArrayGetValueAtIndex(smiths, (CFIndex)i); if (ABRecordGetRecordType(person) != kABPersonType) continue; NSString *name = (NSString*)ABRecordCopyCompositeName(person); NSLog ("%@n", name); [name release]; ABMultiValueRef phoneNumberProp = ABRecordCopyValue(person, kABPersonPhoneProperty); NSArray* numbers = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProp); CFRelease(phoneNumberProp); for (NSString *pvalue in numbers) NSLog ("Phone: %@n", pvalue); [numbers release]; ABMultiValueRef emailProp = ABRecordCopyValue(person, kABPersonEmailProperty); NSArray* emails = (NSArray*)ABMultiValueCopyArrayOfAllValues(emailProp); CFRelease(emailProp); for (NSString *evalue in emails) NSLog ("Email: %@n"); [emails release]; } CFRelease (ab); CFRelease (smiths); 07/03/2014 46

Xamarin.Contacts var book = new AddressBook (this) { PreferContactAggregation = true }; foreach (Contact c in book.Where (c => c.LastName == "Smith")) { print (c.DisplayName); foreach (Phone p in c.Phones) print ("Phone: " + p.Number); foreach (Email e in c.Emails) print ("Email: " + e.Address); } 07/03/2014 47

MonoTouch.Dialog public class Expense { [Section("Expense Entry")] [Entry("Enter expense name")] public string Name; [Section("Expense Details")] [Caption("Description")] [Entry] public string Details; [Checkbox] public bool IsApproved = true; [Caption("Category")] public Category ExpenseCategory; } 07/03/2014 48

Composants Xamarin http://components.xamarin.com Composants cross platform – UI – Services – Thèmes 07/03/2014 49

Bindings Pont Xamarin <> natif – https://github.com/mono/monotouch-bindings 07/03/2014 50

Architecture Xamarin Components Store Visual Studio Xamarin Studio Compilation native Performances au top Bindings natifs sur les APIs iOS / Android Mono Implémentation cross-platform de .NET 07/03/2014 51

MVVMCROSS #mstechdays 07/03/2014 52

MVC 07/03/2014 53

MVVM 07/03/2014 54

MvvmCross en résumé Binding – ValueConverter ViewModels – Navigation – Cycle de vie Inversion of Control Contrôles simplifiés Plugins – File, DownloadCache, Json, Settings, Location… 07/03/2014 55

Configuration Nuget Ninja Coder for MvvmCross Setup IoC Auto-configuration DataContext 07/03/2014 56

MVVM CROSS

CONCLUSION #mstechdays 07/03/2014 58

Ressources http://xamarin.com/getting-started – Guide pour développer une app en 10mn http://docs.xamarin.com – Documentation, Recettes http://github.xamarin.com – Exemples de code http://mvvmcross.blogspot.fr – Documentation MvvmCross 07/03/2014 59

Conclusion Applications natives – Look & feel – Performances Le choix des armes – Visual Studio – Xamarin Studio Partage de code Communauté grandissante – 500 000+ développeurs 07/03/2014 60

Conclusion Oui mais … – – – – – – Bonnes connaissances en architecture d’application Paradigmes de chaque plateforme à apprendre Besoin d’un Mac pour iOS Packages plus lourds Coût de la licence Effet boîte noire 07/03/2014 61

Cyril CATHALA @CyrilCathala http://cyril.cathala.org QUESTIONS ? REPONSES ! 07/03/2014 62

Xamarin Titanium PhoneGap Corona iOS, Android, WP iOS, Android, Blackberry iOS, Android, WP , Blackberry iOS, Android Langage C# Javascript HTML, CSS, Javascript Lua, ObjectiveC, C, Java Prix $300 / plateforme / développeur / an Gratuit Gratuit $600 / développeur / an UI UI native (riche) UI native (riche) UI Web Contrôles natifs courants (acceptable) Accès API Accès complet Accès complet Limité Accès complet (presque) Performances Très proche du natif Presque natif Dépend de la WebView du tél Proche du OpenGL natif Types d’app Productivité / Utilitaire / Entreprise Productivité / Utilitaire Basique / Simple Jeux Plateforme 07/03/2014 63

#mstechdays presentations

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Xamarin et le développement natif d'applications Android ...

A l'ère des smartphones et tablettes, le développement ... développement natif d'applications Android, ... Windows, iOS et Android en C# ...
Read more

Quel choix entre Qt et Apache Cordova - openclassrooms.com

Je suis actuellement en train de réfléchir quant ... J'ai donc pensé à Apache Cordova et à Qt mobile pour ... Fonctionne-t-il correctement sur iOS? ...
Read more

Xamarin - Créer vos Apps Windows, iOS et Android en C# ...

Xamarin et le développement natif d'applications Android, iOS et Windows en C# ... Tuto Créez vos applications iOS et Android avec Xamarin ...
Read more

Xamarin, le cross-platform en C# - dbottiau.azurewebsites.net

Le développement mobile est en plein essor depuis un certain nombre d'années déjà. Les systèmes d'exploitation (iOS, Androïd, Windows Phone et ...
Read more

Développement d'application Mobile pour iOS ... - Wess Soft

Développement d'application Mobile pour iOS, Android et Windows ... (Xamarin C#) Développement Web ... décisions concernant le développement de votre ...
Read more

App xamarin ios / android - codeur.com

Je souhaite recevoir des devis pour la création d'une iOS et Android développée sur XAMARIN ... et nous serions ravi de le réaliser ...
Read more

Visual Studio et Xamarin - msdn.microsoft.com

... applications natives iOS, Android et Windows à partir ... En savoir plus sur le développement pour ... d’applications avec Xamarin.Forms ...
Read more

Osmose - Le blog Ebiznext - Développer une application ...

... qui permettent le développement d’applications ... en C# qui sera transpilée vers les 3 plateformes supportées : Android, iOS, et Windows ...
Read more