Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

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

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité

Consultez-les par la suite

1 sur 63 Publicité

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

Une mise à jour de cette présentation est disponible ici : http://fr.slideshare.net/soatexpert/dvelopper-des-applications-i-os-et-android-avec-c-grce-xamarin

*********************

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#

La vidéo de la présentation est visible ici : http://youtu.be/0BF9NqLYNvQ

Une mise à jour de cette présentation est disponible ici : http://fr.slideshare.net/soatexpert/dvelopper-des-applications-i-os-et-android-avec-c-grce-xamarin

*********************

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#

La vidéo de la présentation est visible ici : http://youtu.be/0BF9NqLYNvQ

Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (17)

Les utilisateurs ont également aimé (20)

Publicité

Similaire à Xamarin et le développement natif d’applications Android, iOS et Windows en C# (20)

Plus par SOAT (20)

Publicité

Plus récents (20)

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

  1. 1. Xamarin et le développement natif d’applications Android, iOS et Windows en C# 07/03/2014 1
  2. 2. Cyril CATHALA Expert .NET – Soat MVP C# @CyrilCathala http://cyril.cathala.org Wallbase Quoties 1 Indice 1 Mot Showrizo Movie Battle
  3. 3. Agenda Les enjeux de la mobilité Hybride vs natif Xamarin Sous le capot Design & UX Multiplateforme MvvmCross 07/03/2014 3
  4. 4. LES ENJEUX DE LA MOBILITÉ #mstechdays 07/03/2014 4
  5. 5. Marché du mobile 07/03/2014 5
  6. 6. Fragmentation 07/03/2014 6
  7. 7. Fragmentation 07/03/2014 7
  8. 8. Fragmentation 07/03/2014 8
  9. 9. “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
  10. 10. HYBRIDE VS NATIF #mstechdays 07/03/2014 10
  11. 11. 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
  12. 12. 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
  13. 13. Les utilisateurs veulent du natif pour : - l’experience - le look & feel - les performances - les fonctionnalités
  14. 14. XAMARIN #mstechdays
  15. 15. 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
  16. 16. Xamarin c’est quoi ? 07/03/2014 16
  17. 17. Approche en silos Android iOS Windows Java Eclipse Objective-C XCode C# Visual Studio 07/03/2014 17
  18. 18. Xamarin pour des applications natives Développement en C# 1 Outil pour les compiler tous 07/03/2014 18
  19. 19. 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
  20. 20. Outils Visual Studio – Add-in – Connexion à un Mac Xamarin Studio – Basé sur MonoDevelop Android designer iOS designer (alpha) – Mac uniquement 07/03/2014 20
  21. 21. 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
  22. 22. 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
  23. 23. API native 100% des APIs disponibles Toujours à jour – iOS7 pour Xamarin sorti le même jour 07/03/2014 23
  24. 24. 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
  25. 25. 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
  26. 26. Création de projets XAMARIN
  27. 27. SOUS LE CAPOT #mstechdays
  28. 28. Configuration 07/03/2014 29
  29. 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
  30. 30. Tests & debug Debugger sur simulateur ou device Xamarin Test Cloud – 100aine de devices – Fragmentation / Performance – Scripting 07/03/2014 31
  31. 31. Documentation Xamarin http://docs.xamarin.com/ Fondamentaux de chaque OS Sujets avancés Recettes Exemples de code 07/03/2014 32
  32. 32. DESIGN & UX #mstechdays 07/03/2014 33
  33. 33. UX iOS != Android != Windows 07/03/2014 34
  34. 34. UX différente 07/03/2014 35
  35. 35. Windows iPhone Phone Android
  36. 36. Navigation différente 07/03/2014 37
  37. 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
  38. 38. MULTIPLATEFORME #mstechdays 07/03/2014 39
  39. 39. Architecture 75% de code réutilisé (en moyenne) Aucun partage d’UI Portable Class Library Link File Conditional compilation 07/03/2014 40
  40. 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
  41. 41. Architecture 07/03/2014 42
  42. 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
  43. 43. Xamarin.Mobile API cross platform Contacts Géolocalisation Caméra VNext – Compas + Accéléromètre – Notifications 07/03/2014 44
  44. 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
  45. 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
  46. 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
  47. 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
  48. 48. Composants Xamarin http://components.xamarin.com Composants cross platform – UI – Services – Thèmes 07/03/2014 49
  49. 49. Bindings Pont Xamarin <> natif – https://github.com/mono/monotouch-bindings 07/03/2014 50
  50. 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
  51. 51. MVVMCROSS #mstechdays 07/03/2014 52
  52. 52. MVC 07/03/2014 53
  53. 53. MVVM 07/03/2014 54
  54. 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
  55. 55. Configuration Nuget Ninja Coder for MvvmCross Setup IoC Auto-configuration DataContext 07/03/2014 56
  56. 56. MVVM CROSS
  57. 57. CONCLUSION #mstechdays 07/03/2014 58
  58. 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
  59. 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
  60. 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
  61. 61. Cyril CATHALA @CyrilCathala http://cyril.cathala.org QUESTIONS ? REPONSES ! 07/03/2014 62
  62. 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

×