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

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

...
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 su...
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...
Type

Description

Exemples

Cible

Langage

Web app

• Site web responsive
• Aide au développement
avec composants
réutil...
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...
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
– SQL...
Outils
Visual Studio

– Add-in
– Connexion à un Mac

Xamarin Studio

– Basé sur MonoDevelop

Android designer
iOS designer...
Environnement de développement
OS

IDE
iOS
Android
Windows
Phone
(1) License business minimum
(2) Mac requis

Mac OS X
Xam...
Partage de code
Android

iOS

Windows

UI
Spécificités

UI
Spécificités

UI
Spécificités

Code commun
(business)

07/03/20...
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 c...
Gratuit ?
Free Starter Edition
32kb d’IL
~25MB code source, sans linking

30 jours version d’essai
MSDN
– 90 jours avec un...
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...
Tests & debug
Debugger sur simulateur ou device
Xamarin Test Cloud
– 100aine de devices
– Fragmentation / Performance
– Sc...
Documentation Xamarin
http://docs.xamarin.com/
Fondamentaux de chaque OS
Sujets avancés
Recettes
Exemples de code
07/03/20...
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...
MULTIPLATEFORME

#mstechdays

07/03/2014

39
Architecture
75% de code réutilisé (en moyenne)
Aucun partage d’UI
Portable Class Library
Link File
Conditional compilatio...
File linking
Symboles prédéfinis
–
–
–
–
–

#if
#if
#if
#if
#if

__MOBILE__
__ANDROID__
__IOS__
WINDOWS_PHONE
SILVERLIGHT
...
Architecture

07/03/2014

42
Vocabulaire
WINDOWS PHONE
View (.xaml)

ANDROID
Layout (.axml)

Page

Activity

UserControl
Frame
Application

Fragment
In...
Xamarin.Mobile
API cross platform
Contacts
Géolocalisation
Caméra
VNext
– Compas + Accéléromètre
– Notifications
07/03/201...
Android - Contacts
ContentResolver content = getContentResolver();
Cursor ncursor = null;
try {
ncursor = content.query (C...
iOS - Contacts
ABAddressBookRef ab = ABAddressBookCreate();
CFStringRef name = CFSTR ("Smith");
CFArrayRef smiths = ABAddr...
Xamarin.Contacts
var book = new AddressBook (this) {
PreferContactAggregation = true
};
foreach (Contact c in book.Where (...
MonoTouch.Dialog
public class Expense
{
[Section("Expense Entry")]
[Entry("Enter expense name")]
public string Name;
[Sect...
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 nati...
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 simpl...
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
– Documenta...
Conclusion
Applications natives
– Look & feel
– Performances

Le choix des armes
– Visual Studio
– Xamarin Studio

Partage...
Conclusion
Oui mais …
–
–
–
–
–
–

Bonnes connaissances en architecture d’application
Paradigmes de chaque plateforme à ap...
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, Andro...
 Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Prochain SlideShare
Chargement dans…5
×

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

7 523 vues

Publié le

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

Publié dans : Technologie
0 commentaire
9 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

Aucun téléchargement
Vues
Nombre de vues
7 523
Sur SlideShare
0
Issues des intégrations
0
Intégrations
422
Actions
Partages
0
Téléchargements
0
Commentaires
0
J’aime
9
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

×