CocoaHeads Rennes #5 : iOS & Android

4 023 vues

Publié le

Slides de la présentation "iOS & Android" de la session des CocoaHeads Rennais du 10 novembre 2011. Présentation assurée par David Bonnet et Nicolas Klein.

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

Aucun téléchargement
Vues
Nombre de vues
4 023
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2 949
Actions
Partages
0
Téléchargements
28
Commentaires
0
J’aime
1
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

CocoaHeads Rennes #5 : iOS & Android

  1. 1. iOS & Androidle meilleur des deux mondes Nicolas Klein - David Bonnet Novembre 2011
  2. 2. David Bonnet iOS Developer - Mobile fan - Android newbie CarMusic
  3. 3. CarMusicSur Android en 2012
  4. 4. Nicolas Klein Développeur Android expert - iPhone intermédiaire• Applications : • WishList • Aion Profile Viewer• Framework : • DataDroid : gestion des donnees locales et distantes
  5. 5. iOS & Android• Environnement • Ressources et Internationalisation• Interface utilisateur • Open Source• Fragmentation • Bibliothèques tierces• Le cœur du système • La gestion mémoire• Multi-tâches
  6. 6. L’environnement
  7. 7. DéploiementInterne : 3 types d’APK : AdHoc Enterprise APK de APK APK non développement signé signé Manuelle Over The Air Rapidité  de  valida,on  :Sortie : • Instantané - 10 min au max • Correction d’un bug rapidement Sous réserve de • Pas de contraintes bizarres validation • Post validation
  8. 8. Validation des applications Premier filtrage sur les applications Impose certaines contraintes de développement Consommation réseau maîtrisée Temps de validation considérablement raccourci Validation stricte Sécurité accrueNécessité d’attendre la validation en cas de bug
  9. 9. SécuritéiTunes Connect Android Market • Login/mdp du compte développeur • Login/mdp du compte développeur • Certificat et provisionning de • Keystore distribution Gestion du piratageGestion du piratage • à la charge du développeur • Licence Validation Library (LVL) • In App Purchase • In App Purchase
  10. 10. Cycle de vie de l’applicationStatistiques Statistiques • iTunes Connect Sales report très • Nombre téléchargements limité Totaux / Actifs + Courbe • Des outils tiers sauvent la mise • Répartition par version d’OS, terminal, pays, langueRapports de crashs remontés • Depuis 2.2, crashs remontés par lesautomatiquement depuis iPhone OS 2.0 utilisateursCommentaires et notes Commentaires et notes • Liés à la version de l’application • Bientôt possibilité de répondre • Notes sans commentaire possible • Pas par version
  11. 11. Cycle de vie de l’applicationStatistiques Statistiques • iTunes Connect Sales report très • Nombre téléchargements limité Totaux / Actifs + Courbe • Des outils tiers sauvent la mise • Répartition par version d’OS, terminal, pays, langueRapports de crashs remontés • Depuis 2.2, crashs remontés par lesautomatiquement depuis iPhone OS 2.0 utilisateursCommentaires et notes Commentaires et notes • Liés à la version de l’application • Bientôt possibilité de répondre • Notes sans commentaire possible • Pas par version
  12. 12. Cycle de vie de l’applicationStatistiques Statistiques • iTunes Connect Sales report très • Nombre téléchargements limité Totaux / Actifs + Courbe • Des outils tiers sauvent la mise • Répartition par version d’OS, terminal, pays, langueRapports de crashs remontés • Depuis 2.2, crashs remontés par lesautomatiquement depuis iPhone OS 2.0 utilisateursCommentaires et notes Commentaires et notes • Liés à la version de l’application • Bientôt possibilité de répondre • Notes sans commentaire possible • Pas par version
  13. 13. Catégories disponibles • Top New Free • Top New Paid• Top Grossing • Top Grossing• Top Free • Top Free• Top Paid • Top Paid• More from Developer • More from Developer • Super Developer• Apple week selection • Editor’s choice
  14. 14. L’interface utilisateur
  15. 15. Disposition des éléments• Absolu On est certain du On connait la disposition rendu final • Relatif des éléments et le rendu sur certains appareils• Résolution fixe (en points) sur iPhone • Multi-terminaux • Définition supérieure sur certains terminaux • Multi résolutions• Le futur ? S’adapter pour tirer • Gestion multi-résolution par multi- pleinement parti du périphérique fichier ou padding• Uniquement des Téléphones et Tablettes • de la Télévision au Téléphone en passant disponibles au développement par l’Auto-radio
  16. 16. Multi densité des écrans• Multiple entier de la résolution native de • Les multi densités sur Android sont l’iPhone original représentées par des dossiers : • iPhone : 320x480 • Drawable • iPhone Retina : 640x960 (x2) • Drawable-ldpi • Drawable-mdpi• Ajout du suffixe correspondant au • Drawable-hdpi multiple sur l’image • Drawable-xhdpi • image.png • image@2x.png
  17. 17. Gestion Portrait / Paysage• UIAutoresizingMask • Resizing automatique via les layout du SDK • Redimentionnement automatique des éléments • Suffisant dans la plupart des cas• Repositionnement via la • Possibilité d’avoir un fichier différent méthode layoutSubviews pour chaque orientation parfois nécessaire • Exemple : layout et layout-land • Géré automatiquement par le système
  18. 18. Liaison Fichier UI / Code• IBOutlet • findViewById • Syntaxe lourde • Accès simple à un élément de • Généré nativement par Xcode 4 l’interface • Accès via l’Activité parente• viewByTag • Problèmes : • Appel d’une vue par son tag sur la • Tout id défini est récupérable ! vue parente (superview) • Passage systématique par un cast • Peu conseillé • Nécessite d’être rigoureux
  19. 19. Simulateur et émulateur
  20. 20. Simulateur / Emulateur• Simule iOS sur une architecture x86 / • Emule le hardware sur une machine x86_64 virtuelle armv7• Permet de se « rendre compte » du • Attention : Lourd à exécuter ! rendu de l’application • Possibilité de snapshots• Attention : Environnement parfait !Il est important de tester sur le système réel !
  21. 21. Fragmentation sur Android
  22. 22. Fragmentation• Soit disant problème d’Android• Quasiment aucun impact sur le développement • Un problème remonté par la presse et le marketing• Problème sur les surcouches• OS pensé pour d’autres systèmes que les smartphones et tablettes contrairement à iOS • Google TV / Parrot Asteroid
  23. 23. Le cœur du système
  24. 24. Héritages de JAVA 5• Les bases de JAVA sont disponibles : • Exemples : java.lang - java.util- java.io - java.sql - java.net• Quelques surcouches Android : • Exemples : android.net - android.util - android.database
  25. 25. Nouveautés propre au système android.nfc android.gesture android.telephony android.locationandroid.opengl android.widget android.view ... Nombreux ajouts en surcouche
  26. 26. Héritage de Cocoa• Les bases de CoreOS sont disponibles • Exemples : CoreFoundation - CoreGraphics - CoreData - CoreNetwork - ... Enrichissement des bases CoreImage GLKit CoreBluetooth
  27. 27. Multi-tâches
  28. 28. Multi-tâches• Contrôle maîtrisé par le système • Tout est possible via les Services 1. Background Audio • Le développeur doit faire la part des choses 2. Voice over IP 3. Background location • Déclenchement 4. Push Notifications • via Intent 5. Local Notifications • à une date donnée 6. Task completion • à un évènement donné 7. Fast app switching (boot, connexion)
  29. 29. Notifications / Widgets
  30. 30. Ressources et Internationalisation
  31. 31. Ressources• Possiblité de créer des Bundles • Ressources externalisables dans des fichiers XML• Localisation avec un fichier strings : • strings / layouts / dimens / anims / ... • fr_FR.lproj/Localizable.string (en français) • Localisation en ajoutant des suffixes aux répertoires concernés : • en_US.lproj/Localizable.strings • values/strings.xml (par défaut) (en américain) • values-fr/strings.xml (en français) • Langue par défaut dans le info.plist • values-fr-CA/strings.xml (en québéquois)
  32. 32. Open Source• Bases Open Source • Totalement Open Source (AOSP : http://source.android.com/) • http://opensource.apple.com/ • http://developer.apple.com/ • Facilité pour débugger opensource/ • Permet de progresser• Certaines bibliothèques Apple sont Open • Cas spécial Honeycomb (3.0) Source • Code non optimal • Grand Central Dispath (GCD) • Non prévu pour Smartphone • WebKit • Résolu avec Ice Cream Sandwich • Bonjour / LLVM / Noyau Darwin (4.0)
  33. 33. Bibliothèques tierces
  34. 34. Bibliothèques tierces• Intégration de bibliothèques • Intégration de bibliothèques • Seulement des bibliothèques statiques ! • Tout est permis • Bibliothèques dynamiques réservées au • Intégration de .jar système (possible sur OS X) • Android Project Library• Utilisation des frameworks privés iOS • Utilisation des frameworks privés interdite et détectée à la validation Android via l’inclusion du code source• Chameleon project : reproduction UIKit sur OS X (http://chameleonproject.org/)
  35. 35. La Gestion mémoire
  36. 36. Gestion mémoire• Reference-counting • Garbage collector • Le développeur gère la mémoire de • Pas de gestion mémoire à réaliser son application par le développeur • Retain / Alloc / New / Copy (+1) • Imprévisible • Autorelease / Release (-1) • Bloque tout traitement dont l’UI• SDK 4.3 et inférieur • Avant 2.3 • Gestion de la mémoire • 100ms de pause pour le GC « manuellement » • Depuis 2.3• SDK 5.0 et supérieur • Parallel GC Quasi invisible • ARC (Automatic Reference Counting)
  37. 37. Ecrivons une pile...public class Stack<T> { private ArrayList<T> mList; public Stack() { mList = new ArrayList<T>(); } public void push(T x) { mList.add(x); } public T pop() { final T x = mList.get(mList.size() - 1); mList.remove(x); return x; }}
  38. 38. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [NSMutableArray array]; Tableau en autorelease ! return self; Le système peut s’en séparer à} n’importe quel moment- (void) push: (id) x { [_array addObject: x];}- (id) pop { id x = [_array lastObject]; [_array removeLastObject]; return x;}@end (WWDC 2011 : 323 Introduction to ARC)
  39. 39. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [[NSMutableArray array] retain]; return self;} Désormais il y a une- (void) push: (id) x { fuite mémoire ! [_array addObject: x]; Ajoutons une méthode dealloc}- (id) pop { id x = [_array lastObject]; [_array removeLastObject]; return x;}@end (WWDC 2011 : 323 Introduction to ARC)
  40. 40. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [[NSMutableArray array] retain]; return self;}- (void) push: (id) x { [_array addObject: x];}- (id) pop { x peut-être libéré à id x = [_array lastObject]; tout moment ! [_array removeLastObject]; Fonctionne seulement si x est return x; référencé ailleurs}- (void) dealloc { [_array release]; [super dealloc]; }@end (WWDC 2011 : 323 Introduction to ARC)
  41. 41. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [[NSMutableArray array] retain]; return self;}- (void) push: (id) x { [_array addObject: x];}- (id) pop { Désormais on retourne id x = [[_array lastObject] retain]; un pointeur retenu! [_array removeLastObject]; On viole la convention, une return x; fiute est à prévoir}- (void) dealloc { [_array release]; [super dealloc]; }@end (WWDC 2011 : 323 Introduction to ARC)
  42. 42. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [[NSMutableArray array] retain]; return self;}- (void) push: (id) x { [_array addObject: x];}- (id) pop { id x = [[_array lastObject] retain]; [_array removeLastObject]; return [x autorelease];}- (void) dealloc { [_array release]; [super dealloc]; }@end (WWDC 2011 : 323 Introduction to ARC)
  43. 43. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [[NSMutableArray array] retain]; return self;}- (void) push: (id) x { [_array addObject: x];}- (id) pop { id x = [[_array lastObject] retain]; [_array removeLastObject]; return [x autorelease];}- (void) dealloc { [_array release]; [super dealloc]; }@end (WWDC 2011 : 323 Introduction to ARC)
  44. 44. Ecrivons une pile...@implementation Stack { NSMutableArray *_array; }- (id) init { if (self = [super init]) _array = [NSMutableArray array]; return self;}- (void) push: (id) x { [_array addObject: x];}- (id) pop { id x = [_array lastObject]; [_array removeLastObject]; return x;}@end (WWDC 2011 : 323 Introduction to ARC)
  45. 45. Conclusion Arrivés à maturité, les deux systèmes sont désormais très proches tout en offrant une expérience utilisateur différente.
  46. 46. CocoaHeads #5 julien@cocoaheads.fr http://cocoaheads.fr thomas.dupont@cocoaheads.friOS & Android Mail : nicolas@foxykeep.com Twitter : @foxykeep Framework : DataDroid App : Wishlist - Aion Profile Viewer Mail : david.bonnet85@gmail.com Twitter : @davidbonnet85 App : CarMusic

×