Développer des applications iOS et
Android avec C# grâce à Xamarin
Cyril CATHALA
Expert .NET – Soat
@CyrilCathala
http://cyril.cathala.org
Wallbase Quoties Movie Battle1 Indice 1 Mot 2048
Soat en bref
• Veille technologique
• Accompagnement technique
• Formations
• Audit
• Réalisation de POC
• Forfaits Window...
•Les enjeux de la mobilité
•Solutions multiplateformes
•Introduction à Xamarin
•Comment ça marche
Agenda
•Design & UX
•Par...
Les enjeux de la
mobilité
Marché du mobile
Marché du mobile
Fragmentation
Fragmentation
Fragmentation
Solutions multiplateformes
• Support multiplateforme (BYOD)
• Expérience riche et native
• Bonnes performances
• Time-to-market rapide
• Code facilem...
Solutions multiplateformes
Web
Mobile
Wrapper
Natif
Interprété Cross
Compilation
Natif
Spécifique
OS
Outils multiplateform...
Applications mobiles
Android iOS Windows
5 versions d’OS
x 8 Fabricants
x 20 Langues
x 27 Tailles d’écran
3 versions d’OS
...
Outils multiplateformes
Technologies Distribution Package Acteurs connus
Mobile Browser
HTML, CSS,
JavaScript
www Pages We...
Outils multiplateformes
Coût Maintenabilité Performance UX Offline Capteurs Outils
Mobile
Browser
Web
Wrapper
Web-to-
nati...
Les utilisateurs sont exigeants :
✓ Performances
✓ Look & feel
✓ Expérience utilisateur
✓ Fonctionnalités
Introduction à Xamarin
Approche en silos
Android
Java
Eclipse
iOS
Objective-C
XCode
Windows
C#
Visual Studio
Même code partout
L’approche Xamarin
100% des API couvertes
Windows
iOS
Android
Tout ce que vous pouvez faire en
Objective-C ou Java peut être fait en
C# et Visual Studio avec Xamarin
Performances natives
Xamarin.iOS
•Compilation AOT
•Xamarin.Android
•Compilation JIT
Toujours à jour
Toujours à jour
• Support le même jour
• iOS 5, iOS 6, iOS 6.1, iOS 7.0, iOS 7.1
• Nokia X
• Android Wear
• Google Glass (...
Développement .NET
• Compétences réutilisées
• C# 5.0 / .NET 4.5
• LINQ
• async/await
• .NET framework
• Garbage collectio...
Outillage
Xamarin Studio
PC ou Mac
Visual Studio 2013
Plugin
Outillage
Visual Studio
• Plugin
• Compiler pour Android ou iOS
• iOS via connexion à un Mac
• Debug
• Emulateur ou device
Outillage
Xamarin Studio
• Compatible PC ou Mac
• IDE riche basé
• Support de NuGet
• Support de Git et SVN
Android Designer
• Visual Studio
• Xamarin Studio
• UI Native
• Fonctionnalités
• Résolutions
• Versions
• Taille d’écran
iOS Designer
• Beta
• Xamarin Studio
• Mac uniquement
• UI Native
• Gestion des
storyboards
Environnement de dév
OS Mac OS X Windows
IDE
Xamarin
Studio
Xamarin
Studio
Visual Studio
iOS ✓ - ✓(1)(2)
Android ✓ ✓ ✓(1)
...
Pourquoi utiliser Xamarin ?
- Développer en C# pour tous les OS
- Performances optimales
- API native
- Réutilisation de c...
Prix
Licences par développeur, par plateforme, par an
• Starter – Gratuit, package limité
• Indie - $299, Xamarin Studio U...
Version d’essai
• 30 jours version d’essai
• MSDN
• 90 jours avec un abonnement MSDN
• 1 Licence Business pour iOS + Andro...
DÉMONSTRATION
Création de projets
Comment ça marche
• Implémentation open source du framework .NET
• Compatible avec Linux & Mac
• Projet démarré en 2001 par Miguel de Icasa
...
• Manifest de configuration
• Compilation
• ARM / IL
• Mono runtime
• Linked assemblies
• Signature (device / store)
Packa...
• Machines virtuelles
• Mono + Dalvik
• S’exécutent côte à côte
• VM Mono plus rapide que Dalvik
• Pont à 2 niveaux
• Andr...
• Compilation en binaire ARM
Runtime iOS
• SGen
• Actuel GC de Mono
• Non générationnel
• Boehm
• Ancien GC de Mono
• Générationnel
• Par défaut sur iOS
Garbage co...
• Pont C# managé avec natif
• https://github.com/mono/monotouch-bindings
Bindings
• Debugger sur simulateur ou device
• Xamarin Test Cloud
• 100aine de devices
• Fragmentation / Performance
• Scripting
Te...
• http://docs.xamarin.com/
• Fondamentaux de chaque OS
• Sujets avancés
• Recettes
• Exemples de code
Documentation Xamarin
Design & UX
Expérience utilisateur
UX iOS != Android != Windows
Windows
Phone
iPhone
Android
Navigation différente
• Téléphone != tablette
• Form Factor
• Capabilities
• Différence d’UX
• Approche développement différente
Form factors
Partage de code
Partage de code
Android
iOS
Mac
WP
Architecture
• 75% de code réutilisé (en moyenne)
• Aucun partage d’UI
File Linking
Portable
Class
Library
Shared
Projects
File Linking
File Linking
• Symboles prédéfinis
#if __MOBILE__
#if __ANDROID__
#if __IOS__
#if WINDOWS_PHONE
#if SILVERLIGHT
• Pour en ...
Portable Class Libraries
• 1 assembly
• Plusieurs plateformes
• Xamarin.Android, Xamarin.iOS
• Centralise le code partagé
...
Shared Projects
• Introduit avec les Universal Apps
• Entre PCL et File Linking
• Copie les fichiers à la compilation
• Co...
Composants multiplateformes
• Xamarin.Auth
• Authentification Oauth
• Xamarin.Social
• Partage de statut
• Xamarin.Mobile
...
Android - ContactsContentResolver content = getContentResolver();
Cursor ncursor = null;
try {
ncursor = content.query (Co...
iOS - ContactsABAddressBookRef ab = ABAddressBookCreate();
CFStringRef name = CFSTR ("Smith");
CFArrayRef smiths = ABAddre...
Xamarin.Contacts
var book = new AddressBook (this)
{
PreferContactAggregation = true
};
foreach (Contact c in book.Where (...
MonoTouch.Dialogpublic class Expense
{
[Section("Expense Entry")]
[Entry("Enter expense name")]
public string Name;
[Secti...
Composants Xamarin
• http://components.xamarin.com
• Composants multiplateformes
• UI
• Services
Architecture
Mono
Implémentation cross-platform de .NET
Bindings natifs sur les APIs
iOS / Android
Compilation native
Perf...
MvvmCross
MVC
MVVM
Implémentation multiplateforme du pattern MVVM
• Support du Data Binding
• ValueConverter
• ViewModels
• Navigation
• Cycl...
• Composants multiplateformes
• Plugins
• File
• DownloadCache
• Json
• SQlite
• Settings
• Location
• Etc.
MvvmCross
MvvmCross
DÉMONSTRATION
MvvmCross
Conclusion
Ressources
• http://xamarin.com/getting-started
• Guide pour développer une app en 10mn
• http://docs.xamarin.com
• Docume...
Conclusion
• Partenariat Microsoft
• Intégration Visual Studio
• Prix pour les abonnés MSDN
• Accélérer les développements...
Conclusion
• Applications natives
• Look & feel
• Performances
• Le choix des armes
• Visual Studio
• Xamarin Studio
• Par...
Conclusion
• Oui mais …
• Bonnes connaissances en architecture d’application
• Paradigmes de chaque plateforme à apprendre...
DES QUESTIONS ?
DES RÉPONSES !
Cyril CATHALA
@CyrilCathala
http://cyril.cathala.org
Upcoming SlideShare
Loading in …5
×

Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril Cathala

4,503 views

Published on

Développer des applications iOS et Android avec C# grâce à Xamarin par Cyril Cathala

A l’ère des smartphones et tablettes, le développement multiplateforme se révèle être un challenge : quelle solution choisir et comment minimiser les coûts, tout en optimisant l’expérience utilisateur ?
Parmi les solutions disponibles sur le marché, Xamarin s’adresse aux développeurs C# pour la création d’applications compatibles avec Windows 8, iOS et Android. Son approche multiplateforme permet de développer des applications natives de qualité en mutualisant jusqu’à 75% de code entre les différents OS.
Ce petit déjeuner sera l’occasion de faire un tour d’horizon des outils du marché, d’apprécier toutes les possibilités offertes par Xamarin et d’en explorer les pistes pour aller plus loin.

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
4,503
On SlideShare
0
From Embeds
0
Number of Embeds
239
Actions
Shares
0
Downloads
0
Comments
0
Likes
7
Embeds 0
No embeds

No notes for slide

Développer des applications iOS et Android avec c# grâce à Xamarin par Cyril Cathala

  1. 1. Développer des applications iOS et Android avec C# grâce à Xamarin
  2. 2. Cyril CATHALA Expert .NET – Soat @CyrilCathala http://cyril.cathala.org Wallbase Quoties Movie Battle1 Indice 1 Mot 2048
  3. 3. Soat en bref • Veille technologique • Accompagnement technique • Formations • Audit • Réalisation de POC • Forfaits Windows 8 / Windows Phone IT • 270 consultants, 80 clients • .NET/JAVA • CDS, ATG, Forfait Agile • Audit • Accompagnement • Formation Experts • .NET • Java • Formations Département Expertise & Innovation
  4. 4. •Les enjeux de la mobilité •Solutions multiplateformes •Introduction à Xamarin •Comment ça marche Agenda •Design & UX •Partage de code •MvvmCross
  5. 5. Les enjeux de la mobilité
  6. 6. Marché du mobile
  7. 7. Marché du mobile
  8. 8. Fragmentation
  9. 9. Fragmentation
  10. 10. Fragmentation
  11. 11. Solutions multiplateformes
  12. 12. • Support multiplateforme (BYOD) • Expérience riche et native • Bonnes performances • Time-to-market rapide • Code facilement maintenable • Flexible aux évolutions • Coût raisonnable A la recherche du bonheur
  13. 13. Solutions multiplateformes Web Mobile Wrapper Natif Interprété Cross Compilation Natif Spécifique OS Outils multiplateformes • Fonctionnalités riches • Performances et expérience natives • Coût élevé • Complexité • Portabilité multiplateforme • Mises à jour simplifiées
  14. 14. Applications mobiles Android iOS Windows 5 versions d’OS x 8 Fabricants x 20 Langues x 27 Tailles d’écran 3 versions d’OS x 8 Devices x 20 Langues 2 versions d’OS x 17 Devices x 20 Langues
  15. 15. Outils multiplateformes Technologies Distribution Package Acteurs connus Mobile Browser HTML, CSS, JavaScript www Pages Web Safari – Chrome – IE Web Wrapper HTML, CSS, JavaScript App Store Package hybride PhoneGap Web-to-native Javascript App Store Package natif Titanium API JavaScript Native HTML, CSS, JavaScript App Store Package natif BlackBerry, Windows Cross compilation C# App Store Package natif Xamarin
  16. 16. Outils multiplateformes Coût Maintenabilité Performance UX Offline Capteurs Outils Mobile Browser Web Wrapper Web-to- native Cross compilation Natif
  17. 17. Les utilisateurs sont exigeants : ✓ Performances ✓ Look & feel ✓ Expérience utilisateur ✓ Fonctionnalités
  18. 18. Introduction à Xamarin
  19. 19. Approche en silos Android Java Eclipse iOS Objective-C XCode Windows C# Visual Studio
  20. 20. Même code partout
  21. 21. L’approche Xamarin
  22. 22. 100% des API couvertes
  23. 23. Windows
  24. 24. iOS
  25. 25. Android
  26. 26. Tout ce que vous pouvez faire en Objective-C ou Java peut être fait en C# et Visual Studio avec Xamarin
  27. 27. Performances natives Xamarin.iOS •Compilation AOT •Xamarin.Android •Compilation JIT
  28. 28. Toujours à jour
  29. 29. Toujours à jour • Support le même jour • iOS 5, iOS 6, iOS 6.1, iOS 7.0, iOS 7.1 • Nokia X • Android Wear • Google Glass (preview)
  30. 30. Développement .NET • Compétences réutilisées • C# 5.0 / .NET 4.5 • LINQ • async/await • .NET framework • Garbage collection • C# Libraries • SQLite, JSON.NET, SharpZipLib…
  31. 31. Outillage Xamarin Studio PC ou Mac Visual Studio 2013 Plugin
  32. 32. Outillage Visual Studio • Plugin • Compiler pour Android ou iOS • iOS via connexion à un Mac • Debug • Emulateur ou device
  33. 33. Outillage Xamarin Studio • Compatible PC ou Mac • IDE riche basé • Support de NuGet • Support de Git et SVN
  34. 34. Android Designer • Visual Studio • Xamarin Studio • UI Native • Fonctionnalités • Résolutions • Versions • Taille d’écran
  35. 35. iOS Designer • Beta • Xamarin Studio • Mac uniquement • UI Native • Gestion des storyboards
  36. 36. Environnement de dév OS Mac OS X Windows IDE Xamarin Studio Xamarin Studio Visual Studio iOS ✓ - ✓(1)(2) Android ✓ ✓ ✓(1) Windows Phone - - ✓(1) (1) License business minimum (2) Mac requis
  37. 37. 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
  38. 38. Prix Licences par développeur, par plateforme, par an • Starter – Gratuit, package limité • Indie - $299, Xamarin Studio Uniquement • Business - $999, Visual Studio, Support Mail • Enterprise - $1899, 1 jour SLA
  39. 39. Version d’essai • 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)
  40. 40. DÉMONSTRATION Création de projets
  41. 41. Comment ça marche
  42. 42. • Implémentation open source du framework .NET • Compatible avec Linux & Mac • Projet démarré en 2001 par Miguel de Icasa • Version 3.0 • Support de C# 5.0 • Fondation de Xamarin Mono
  43. 43. • Manifest de configuration • Compilation • ARM / IL • Mono runtime • Linked assemblies • Signature (device / store) Packaging
  44. 44. • Machines virtuelles • Mono + Dalvik • S’exécutent côte à côte • VM Mono plus rapide que Dalvik • Pont à 2 niveaux • Android Callable Wrapper • Managed Callable Wrapper Runtime Android
  45. 45. • Compilation en binaire ARM Runtime iOS
  46. 46. • SGen • Actuel GC de Mono • Non générationnel • Boehm • Ancien GC de Mono • Générationnel • Par défaut sur iOS Garbage collector
  47. 47. • Pont C# managé avec natif • https://github.com/mono/monotouch-bindings Bindings
  48. 48. • Debugger sur simulateur ou device • Xamarin Test Cloud • 100aine de devices • Fragmentation / Performance • Scripting Tests & debug
  49. 49. • http://docs.xamarin.com/ • Fondamentaux de chaque OS • Sujets avancés • Recettes • Exemples de code Documentation Xamarin
  50. 50. Design & UX
  51. 51. Expérience utilisateur
  52. 52. UX iOS != Android != Windows
  53. 53. Windows Phone iPhone Android
  54. 54. Navigation différente
  55. 55. • Téléphone != tablette • Form Factor • Capabilities • Différence d’UX • Approche développement différente Form factors
  56. 56. Partage de code
  57. 57. Partage de code Android iOS Mac WP
  58. 58. Architecture • 75% de code réutilisé (en moyenne) • Aucun partage d’UI File Linking Portable Class Library Shared Projects
  59. 59. File Linking
  60. 60. File Linking • Symboles prédéfinis #if __MOBILE__ #if __ANDROID__ #if __IOS__ #if WINDOWS_PHONE #if SILVERLIGHT • Pour en avoir plus : Build Settings
  61. 61. Portable Class Libraries • 1 assembly • Plusieurs plateformes • Xamarin.Android, Xamarin.iOS • Centralise le code partagé • Pas de symboles conditionnels
  62. 62. Shared Projects • Introduit avec les Universal Apps • Entre PCL et File Linking • Copie les fichiers à la compilation • Compatible avec les symboles conditionnels
  63. 63. Composants multiplateformes • Xamarin.Auth • Authentification Oauth • Xamarin.Social • Partage de statut • Xamarin.Mobile • Contacts • Géolocalisation • Caméra • Bientôt : compas, accéléromètre, notifications
  64. 64. Android - ContactsContentResolver 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(); }
  65. 65. iOS - ContactsABAddressBookRef 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);
  66. 66. 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); }
  67. 67. MonoTouch.Dialogpublic 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; }
  68. 68. Composants Xamarin • http://components.xamarin.com • Composants multiplateformes • UI • Services
  69. 69. Architecture Mono Implémentation cross-platform de .NET Bindings natifs sur les APIs iOS / Android Compilation native Performances au top Visual Studio Xamarin Studio Xamarin Components Store
  70. 70. MvvmCross
  71. 71. MVC
  72. 72. MVVM
  73. 73. Implémentation multiplateforme du pattern MVVM • Support du Data Binding • ValueConverter • ViewModels • Navigation • Cycle de vie • Inversion de contrôle • Simplification de l’UI MvvmCross en résumé
  74. 74. • Composants multiplateformes • Plugins • File • DownloadCache • Json • SQlite • Settings • Location • Etc. MvvmCross
  75. 75. MvvmCross
  76. 76. DÉMONSTRATION MvvmCross
  77. 77. Conclusion
  78. 78. 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
  79. 79. Conclusion • Partenariat Microsoft • Intégration Visual Studio • Prix pour les abonnés MSDN • Accélérer les développements • Microsoft Build 2014 • Keynote + session With Xamarin, developers combine all of the productivity benefits of C#, Visual Studio 2013 and Windows Azure with the flexibility to quickly build for multiple device targets.” S. Somasegar, Corporate Vice President, Microsoft
  80. 80. Conclusion • Applications natives • Look & feel • Performances • Le choix des armes • Visual Studio • Xamarin Studio • Partage de code • Communauté grandissante • 600 000+ développeurs
  81. 81. 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
  82. 82. DES QUESTIONS ? DES RÉPONSES ! Cyril CATHALA @CyrilCathala http://cyril.cathala.org

×