SlideShare une entreprise Scribd logo
1  sur  82
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 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
•Les enjeux de la mobilité
•Solutions multiplateformes
•Introduction à Xamarin
•Comment ça marche
Agenda
•Design & UX
•Partage de code
•MvvmCross
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 facilement maintenable
• Flexible aux évolutions
• Coût raisonnable
A la recherche du bonheur
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
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
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
Outils multiplateformes
Coût Maintenabilité Performance UX Offline Capteurs Outils
Mobile
Browser
Web
Wrapper
Web-to-
native
Cross
compilation
Natif
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 (preview)
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…
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)
Windows
Phone
- - ✓(1)
(1) License business minimum
(2) Mac requis
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
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
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)
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
• Version 3.0
• Support de C# 5.0
• Fondation de Xamarin
Mono
• Manifest de configuration
• Compilation
• ARM / IL
• Mono runtime
• Linked assemblies
• Signature (device / store)
Packaging
• 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
• 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 collector
• 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
Tests & debug
• 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 avoir plus : Build Settings
Portable Class Libraries
• 1 assembly
• Plusieurs plateformes
• Xamarin.Android, Xamarin.iOS
• Centralise le code partagé
• Pas de symboles conditionnels
Shared Projects
• Introduit avec les Universal Apps
• Entre PCL et File Linking
• Copie les fichiers à la compilation
• Compatible avec les symboles conditionnels
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
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();
}
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);
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);
}
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;
}
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
Performances au top
Visual Studio Xamarin Studio
Xamarin Components Store
MvvmCross
MVC
MVVM
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é
• 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
• Documentation, Recettes
• http://github.xamarin.com
• Exemples de code
• http://mvvmcross.blogspot.fr
• Documentation MvvmCross
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
Conclusion
• Applications natives
• Look & feel
• Performances
• Le choix des armes
• Visual Studio
• Xamarin Studio
• Partage de code
• Communauté grandissante
• 600 000+ développeurs
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
DES QUESTIONS ?
DES RÉPONSES !
Cyril CATHALA
@CyrilCathala
http://cyril.cathala.org

Contenu connexe

Tendances

rapport de stage
rapport de stagerapport de stage
rapport de stagespeedsales
 
Rapport stage 2012
Rapport stage 2012Rapport stage 2012
Rapport stage 2012Nam Phạm
 
A case on vodafone vs CIT
A case on vodafone vs CITA case on vodafone vs CIT
A case on vodafone vs CITJayesh Alwani
 
Rapport de stage radees medraoui allal
Rapport de stage radees medraoui allalRapport de stage radees medraoui allal
Rapport de stage radees medraoui allalMedraouiMedraoui
 
Rapport de stage suez environnement
Rapport de stage suez environnementRapport de stage suez environnement
Rapport de stage suez environnementS'team Management
 
Rapport de stage originale
Rapport de stage originaleRapport de stage originale
Rapport de stage originalesalma jarid
 
Rapport de stage (promoteur immobilier )
Rapport de stage (promoteur immobilier )Rapport de stage (promoteur immobilier )
Rapport de stage (promoteur immobilier )Aicha OUALLA
 
Courtier d'assurances maritimes
  Courtier d'assurances maritimes  Courtier d'assurances maritimes
Courtier d'assurances maritimesRabah HELAL
 
Republique_Tunisienne_Ministere_de_lEnse.pdf
Republique_Tunisienne_Ministere_de_lEnse.pdfRepublique_Tunisienne_Ministere_de_lEnse.pdf
Republique_Tunisienne_Ministere_de_lEnse.pdfAzizJenhani1
 
Rapport de stage de perfectionnement
Rapport de stage de perfectionnementRapport de stage de perfectionnement
Rapport de stage de perfectionnementbadouuur
 
Rapport Stage Alstom Otmane Douieb
Rapport Stage Alstom Otmane DouiebRapport Stage Alstom Otmane Douieb
Rapport Stage Alstom Otmane DouiebOtmaneDouieb
 
SOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMED
SOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMEDSOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMED
SOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMEDMohamed El mouatassim
 
Rapport de stage I. Falaize
Rapport de stage I. FalaizeRapport de stage I. Falaize
Rapport de stage I. FalaizeIxchel Falaize
 
Présentation Partenariat SNTL ASSURANCES - VG.pdf
Présentation Partenariat SNTL ASSURANCES - VG.pdfPrésentation Partenariat SNTL ASSURANCES - VG.pdf
Présentation Partenariat SNTL ASSURANCES - VG.pdfchakib17
 
Rapport de stage ad industries
Rapport de stage ad industriesRapport de stage ad industries
Rapport de stage ad industriesAmaniFarhati
 
Rapport de stage de perfectionnement - Mahmoudi Mohamed Amine
Rapport de stage de perfectionnement - Mahmoudi Mohamed AmineRapport de stage de perfectionnement - Mahmoudi Mohamed Amine
Rapport de stage de perfectionnement - Mahmoudi Mohamed AmineMohamed Amine Mahmoudi
 
Mr. Narayan Murthy- A living legend!
Mr. Narayan Murthy- A living legend!Mr. Narayan Murthy- A living legend!
Mr. Narayan Murthy- A living legend!Anuja Chavan
 

Tendances (20)

rapport de stage
rapport de stagerapport de stage
rapport de stage
 
Rapport stage 2012
Rapport stage 2012Rapport stage 2012
Rapport stage 2012
 
Chap2act4
Chap2act4Chap2act4
Chap2act4
 
A case on vodafone vs CIT
A case on vodafone vs CITA case on vodafone vs CIT
A case on vodafone vs CIT
 
Rapport de stage radees medraoui allal
Rapport de stage radees medraoui allalRapport de stage radees medraoui allal
Rapport de stage radees medraoui allal
 
Rapport de stage suez environnement
Rapport de stage suez environnementRapport de stage suez environnement
Rapport de stage suez environnement
 
Rapport de stage originale
Rapport de stage originaleRapport de stage originale
Rapport de stage originale
 
Rapport de stage (promoteur immobilier )
Rapport de stage (promoteur immobilier )Rapport de stage (promoteur immobilier )
Rapport de stage (promoteur immobilier )
 
Courtier d'assurances maritimes
  Courtier d'assurances maritimes  Courtier d'assurances maritimes
Courtier d'assurances maritimes
 
Republique_Tunisienne_Ministere_de_lEnse.pdf
Republique_Tunisienne_Ministere_de_lEnse.pdfRepublique_Tunisienne_Ministere_de_lEnse.pdf
Republique_Tunisienne_Ministere_de_lEnse.pdf
 
Rapport de stage de perfectionnement
Rapport de stage de perfectionnementRapport de stage de perfectionnement
Rapport de stage de perfectionnement
 
Rapport Stage Alstom Otmane Douieb
Rapport Stage Alstom Otmane DouiebRapport Stage Alstom Otmane Douieb
Rapport Stage Alstom Otmane Douieb
 
SOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMED
SOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMEDSOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMED
SOUTENANCE DE STAGE - AMS-IFMIAC - EL MOUATASSIM MOHAMED
 
Rapport de stage I. Falaize
Rapport de stage I. FalaizeRapport de stage I. Falaize
Rapport de stage I. Falaize
 
Présentation de la caat
Présentation de la caatPrésentation de la caat
Présentation de la caat
 
rapport de stage final
rapport de stage finalrapport de stage final
rapport de stage final
 
Présentation Partenariat SNTL ASSURANCES - VG.pdf
Présentation Partenariat SNTL ASSURANCES - VG.pdfPrésentation Partenariat SNTL ASSURANCES - VG.pdf
Présentation Partenariat SNTL ASSURANCES - VG.pdf
 
Rapport de stage ad industries
Rapport de stage ad industriesRapport de stage ad industries
Rapport de stage ad industries
 
Rapport de stage de perfectionnement - Mahmoudi Mohamed Amine
Rapport de stage de perfectionnement - Mahmoudi Mohamed AmineRapport de stage de perfectionnement - Mahmoudi Mohamed Amine
Rapport de stage de perfectionnement - Mahmoudi Mohamed Amine
 
Mr. Narayan Murthy- A living legend!
Mr. Narayan Murthy- A living legend!Mr. Narayan Murthy- A living legend!
Mr. Narayan Murthy- A living legend!
 

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

Xamarin : DevOps Cloud, Re-Build et retour d'expérience
Xamarin : DevOps Cloud, Re-Build et retour d'expérienceXamarin : DevOps Cloud, Re-Build et retour d'expérience
Xamarin : DevOps Cloud, Re-Build et retour d'expérienceEdwige Seminara
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesMichael Laguerre
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#SOAT
 
Tech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTelecomValley
 
L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8Microsoft
 
Architecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinArchitecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinThierry Buisson
 
Let's Go dans l'univers mobile multiplateforme avec Xamarin
Let's Go dans l'univers mobile multiplateforme avec Xamarin Let's Go dans l'univers mobile multiplateforme avec Xamarin
Let's Go dans l'univers mobile multiplateforme avec Xamarin Christian Hissibini
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8davrous
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsThomas Bassetto
 
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...Microsoft Technet France
 
[XamarinDay] Deep dive des produits Xamarin part 1
[XamarinDay] Deep dive des produits Xamarin part 1[XamarinDay] Deep dive des produits Xamarin part 1
[XamarinDay] Deep dive des produits Xamarin part 1Cellenza
 
Carnet de Route du Développeur - ENSIMAG 2012
Carnet de Route du Développeur - ENSIMAG 2012Carnet de Route du Développeur - ENSIMAG 2012
Carnet de Route du Développeur - ENSIMAG 2012Alexandre Morgaut
 
Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuMicrosoft
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Arnaud Auroux
 
Aspectize meetup
Aspectize meetupAspectize meetup
Aspectize meetupAspectize
 
[XamarinDay] Développez de manière 100% native avec Xamarin
[XamarinDay] Développez de manière 100% native avec Xamarin[XamarinDay] Développez de manière 100% native avec Xamarin
[XamarinDay] Développez de manière 100% native avec XamarinCellenza
 
Ingénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdfIngénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdfJEANCLAUDECAMARA
 
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...IBM France Lab
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projetjollivetc
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...ENSIBS
 

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

Xamarin : DevOps Cloud, Re-Build et retour d'expérience
Xamarin : DevOps Cloud, Re-Build et retour d'expérienceXamarin : DevOps Cloud, Re-Build et retour d'expérience
Xamarin : DevOps Cloud, Re-Build et retour d'expérience
 
Tech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobilesTech Conf n°1 - Développement natif d'applications mobiles
Tech Conf n°1 - Développement natif d'applications mobiles
 
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 Xamarin et le développement natif d’applications Android, iOS et Windows en C# Xamarin et le développement natif d’applications Android, iOS et Windows en C#
Xamarin et le développement natif d’applications Android, iOS et Windows en C#
 
Tech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobilesTech conf1 développement_natif_applications_mobiles
Tech conf1 développement_natif_applications_mobiles
 
L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8L'histoire d'HTML5 pour les développeurs Windows Phone 8
L'histoire d'HTML5 pour les développeurs Windows Phone 8
 
Architecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et XamarinArchitecturez vos applications mobiles avec Azure et Xamarin
Architecturez vos applications mobiles avec Azure et Xamarin
 
Let's Go dans l'univers mobile multiplateforme avec Xamarin
Let's Go dans l'univers mobile multiplateforme avec Xamarin Let's Go dans l'univers mobile multiplateforme avec Xamarin
Let's Go dans l'univers mobile multiplateforme avec Xamarin
 
L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8L'histoire d'html5 pour les développeurs windows phone 8
L'histoire d'html5 pour les développeurs windows phone 8
 
L'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objetsL'Open Web en tant que pierre angulaire du développement multi-objets
L'Open Web en tant que pierre angulaire du développement multi-objets
 
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
[AzureCamp 24 Juin 2014] Interactions en "temps réel" pour les applications W...
 
[XamarinDay] Deep dive des produits Xamarin part 1
[XamarinDay] Deep dive des produits Xamarin part 1[XamarinDay] Deep dive des produits Xamarin part 1
[XamarinDay] Deep dive des produits Xamarin part 1
 
Carnet de Route du Développeur - ENSIMAG 2012
Carnet de Route du Développeur - ENSIMAG 2012Carnet de Route du Développeur - ENSIMAG 2012
Carnet de Route du Développeur - ENSIMAG 2012
 
Uwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieuUwp + Xamarin : Du nouveau en terre du milieu
Uwp + Xamarin : Du nouveau en terre du milieu
 
Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8Réutilisation de code entre windows 8 et windows phone 8
Réutilisation de code entre windows 8 et windows phone 8
 
Aspectize meetup
Aspectize meetupAspectize meetup
Aspectize meetup
 
[XamarinDay] Développez de manière 100% native avec Xamarin
[XamarinDay] Développez de manière 100% native avec Xamarin[XamarinDay] Développez de manière 100% native avec Xamarin
[XamarinDay] Développez de manière 100% native avec Xamarin
 
Ingénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdfIngénieur étude et développement JAVA JEE.pdf
Ingénieur étude et développement JAVA JEE.pdf
 
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
IBM Bluemix Paris Meetup #22-20170315 Meetup @VillagebyCA- Bluemix, présent &...
 
Du JavaScript dans mon projet
Du JavaScript dans mon projetDu JavaScript dans mon projet
Du JavaScript dans mon projet
 
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
Agile Tour Paris 2014 : Ma stack d'outils Agiles, tout un programme !, Cedric...
 

Plus de SOAT

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018SOAT
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libéréeSOAT
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !SOAT
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseSOAT
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESSOAT
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-DurandSOAT
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-DurandSOAT
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-DurandSOAT
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido SOAT
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotSOAT
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014SOAT
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...SOAT
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014SOAT
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soatSOAT
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014SOAT
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)SOAT
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatSOAT
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesSOAT
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSOAT
 
Présentation spring data Matthieu Briend
Présentation spring data  Matthieu BriendPrésentation spring data  Matthieu Briend
Présentation spring data Matthieu BriendSOAT
 

Plus de SOAT (20)

Back from Microsoft //Build 2018
Back from Microsoft //Build 2018Back from Microsoft //Build 2018
Back from Microsoft //Build 2018
 
L'entreprise libérée
L'entreprise libéréeL'entreprise libérée
L'entreprise libérée
 
Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !Amélioration continue, c'est l'affaire de tous !
Amélioration continue, c'est l'affaire de tous !
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entreprise
 
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUESARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
ARCHITECTURE MICROSERVICE : TOUR D’HORIZON DU CONCEPT ET BONNES PRATIQUES
 
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
3/3 : The path to CDI 2.0 - Antoine Sabot-Durand
 
1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand1/3 : introduction to CDI - Antoine Sabot-Durand
1/3 : introduction to CDI - Antoine Sabot-Durand
 
2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand2/3 : CDI advanced - Antoine Sabot-Durand
2/3 : CDI advanced - Antoine Sabot-Durand
 
Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido Angular JS - Paterne Gaye-Guingnido
Angular JS - Paterne Gaye-Guingnido
 
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu ParisotDans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
Dans l'enfer du Web Mobile - un retour d'expérience - Mathieu Parisot
 
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
RxJava, Getting Started - David Wursteisen - 16 Octobre 2014
 
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
L'impact du Responsive Web Design sur vos équipes projet - Mathieu Parisot - ...
 
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014Nio sur Netty par Mouhcine Moulou - 3 avril 2014
Nio sur Netty par Mouhcine Moulou - 3 avril 2014
 
20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat20140123 java8 lambdas_jose-paumard-soat
20140123 java8 lambdas_jose-paumard-soat
 
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014Amazon Web Service par Bertrand Lehurt - 11 mars 2014
Amazon Web Service par Bertrand Lehurt - 11 mars 2014
 
ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)ASP.Net Web API - Léonard Labat (18 février 2014)
ASP.Net Web API - Léonard Labat (18 février 2014)
 
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - SoatA la découverte du Responsive Web Design par Mathieu Parisot - Soat
A la découverte du Responsive Web Design par Mathieu Parisot - Soat
 
MongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de donnéesMongoDB : la base NoSQL qui réinvente la gestion de données
MongoDB : la base NoSQL qui réinvente la gestion de données
 
Soirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVCSoirée 3T Soat - Asp.net MVC
Soirée 3T Soat - Asp.net MVC
 
Présentation spring data Matthieu Briend
Présentation spring data  Matthieu BriendPrésentation spring data  Matthieu Briend
Présentation spring data Matthieu Briend
 

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

  • 1. Développer des applications iOS et Android avec C# grâce à Xamarin
  • 2. Cyril CATHALA Expert .NET – Soat @CyrilCathala http://cyril.cathala.org Wallbase Quoties Movie Battle1 Indice 1 Mot 2048
  • 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. •Les enjeux de la mobilité •Solutions multiplateformes •Introduction à Xamarin •Comment ça marche Agenda •Design & UX •Partage de code •MvvmCross
  • 5. Les enjeux de la mobilité
  • 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. 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. 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. 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. Outils multiplateformes Coût Maintenabilité Performance UX Offline Capteurs Outils Mobile Browser Web Wrapper Web-to- native Cross compilation Natif
  • 17. Les utilisateurs sont exigeants : ✓ Performances ✓ Look & feel ✓ Expérience utilisateur ✓ Fonctionnalités
  • 22. 100% des API couvertes
  • 24. iOS
  • 26. Tout ce que vous pouvez faire en Objective-C ou Java peut être fait en C# et Visual Studio avec Xamarin
  • 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. 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. Outillage Xamarin Studio PC ou Mac Visual Studio 2013 Plugin
  • 32. Outillage Visual Studio • Plugin • Compiler pour Android ou iOS • iOS via connexion à un Mac • Debug • Emulateur ou device
  • 33. Outillage Xamarin Studio • Compatible PC ou Mac • IDE riche basé • Support de NuGet • Support de Git et SVN
  • 34. Android Designer • Visual Studio • Xamarin Studio • UI Native • Fonctionnalités • Résolutions • Versions • Taille d’écran
  • 35. iOS Designer • Beta • Xamarin Studio • Mac uniquement • UI Native • Gestion des storyboards
  • 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. 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. 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. 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)
  • 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. • Manifest de configuration • Compilation • ARM / IL • Mono runtime • Linked assemblies • Signature (device / store) Packaging
  • 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. • Compilation en binaire ARM Runtime iOS
  • 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. • Pont C# managé avec natif • https://github.com/mono/monotouch-bindings Bindings
  • 48. • Debugger sur simulateur ou device • Xamarin Test Cloud • 100aine de devices • Fragmentation / Performance • Scripting Tests & debug
  • 49. • http://docs.xamarin.com/ • Fondamentaux de chaque OS • Sujets avancés • Recettes • Exemples de code Documentation Xamarin
  • 52. UX iOS != Android != Windows
  • 55. • Téléphone != tablette • Form Factor • Capabilities • Différence d’UX • Approche développement différente Form factors
  • 58. Architecture • 75% de code réutilisé (en moyenne) • Aucun partage d’UI File Linking Portable Class Library Shared Projects
  • 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. Portable Class Libraries • 1 assembly • Plusieurs plateformes • Xamarin.Android, Xamarin.iOS • Centralise le code partagé • Pas de symboles conditionnels
  • 62. Shared Projects • Introduit avec les Universal Apps • Entre PCL et File Linking • Copie les fichiers à la compilation • Compatible avec les symboles conditionnels
  • 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. 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. 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. 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. 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. Composants Xamarin • http://components.xamarin.com • Composants multiplateformes • UI • Services
  • 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
  • 71. MVC
  • 72. MVVM
  • 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. • Composants multiplateformes • Plugins • File • DownloadCache • Json • SQlite • Settings • Location • Etc. MvvmCross
  • 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. 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. Conclusion • Applications natives • Look & feel • Performances • Le choix des armes • Visual Studio • Xamarin Studio • Partage de code • Communauté grandissante • 600 000+ développeurs
  • 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. DES QUESTIONS ? DES RÉPONSES ! Cyril CATHALA @CyrilCathala http://cyril.cathala.org