SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
iOS & Android
le meilleur des deux mondes
                      Nicolas Klein - David Bonnet
                                   Novembre 2011
David Bonnet
  iOS Developer - Mobile fan - Android newbie




                  CarMusic
CarMusic




Sur Android en 2012
Nicolas Klein
            Développeur Android expert - iPhone intermédiaire


• Applications :
  • WishList
  • Aion Profile Viewer

• Framework :
  • DataDroid : gestion des donnees locales et distantes
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
L’environnement
Déploiement

Interne :                        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
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é accrue

Nécessité d’attendre la validation en cas de bug
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 piratage
Gestion du piratage

 • à la charge du développeur         • Licence Validation Library (LVL)

 • In App Purchase                    • In App Purchase
Cycle de vie de l’application

Statistiques                            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, langue
Rapports de crashs remontés               •
                                        Depuis 2.2, crashs remontés par les
automatiquement depuis iPhone OS 2.0
                                        utilisateurs
Commentaires 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
Cycle de vie de l’application

Statistiques                            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, langue
Rapports de crashs remontés               •
                                        Depuis 2.2, crashs remontés par les
automatiquement depuis iPhone OS 2.0
                                        utilisateurs
Commentaires 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
Cycle de vie de l’application

Statistiques                            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, langue
Rapports de crashs remontés               •
                                        Depuis 2.2, crashs remontés par les
automatiquement depuis iPhone OS 2.0
                                        utilisateurs
Commentaires 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
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
L’interface utilisateur
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
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
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
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
Simulateur et émulateur
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 !
Fragmentation sur Android
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
Le cœur du système
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
Nouveautés propre au système
                                android.nfc
   android.gesture
                                         android.telephony
                 android.location
android.opengl                                  android.widget
                              android.view                       ...




                     Nombreux ajouts en surcouche
Héritage de Cocoa

•   Les bases de CoreOS sont disponibles

    •   Exemples : CoreFoundation - CoreGraphics - CoreData -
        CoreNetwork - ...



                    Enrichissement des bases
                        CoreImage     GLKit     CoreBluetooth
Multi-tâches
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)
Notifications / Widgets
Ressources et Internationalisation
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)
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)
Bibliothèques tierces
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/)
La Gestion mémoire
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)
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;
    }
}
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)
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)
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)
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)
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)
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)
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)
Conclusion




  Arrivés à maturité, les deux systèmes sont
  désormais très proches tout en offrant une
       expérience utilisateur différente.
CocoaHeads #5                 julien@cocoaheads.fr
                http://cocoaheads.fr          thomas.dupont@cocoaheads.fr



iOS & Android
        Mail : nicolas@foxykeep.com
      Twitter : @foxykeep

  Framework : DataDroid
        App : Wishlist - Aion Profile Viewer

        Mail : david.bonnet85@gmail.com
      Twitter : @davidbonnet85

         App : CarMusic

Contenu connexe

Tendances

BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! Erwann Robin
 
Code flow - Cocoaheads paris
Code flow - Cocoaheads parisCode flow - Cocoaheads paris
Code flow - Cocoaheads parisCocoaHeads France
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOSCocoaHeads France
 
What’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariWhat’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariZenika
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontZenika
 
Booster votre application Windows Phone 8
Booster votre application Windows Phone 8Booster votre application Windows Phone 8
Booster votre application Windows Phone 8Microsoft
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8Microsoft
 
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL Microsoft
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetCocoaHeads France
 
Présentation de Carthage par Simone Civetta
Présentation de Carthage par Simone CivettaPrésentation de Carthage par Simone Civetta
Présentation de Carthage par Simone CivettaCocoaHeads France
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeadsRNS
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Microsoft
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSMicrosoft
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockNicolas Lourenço
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieArnaud Héritier
 

Tendances (20)

BlaBlaCar - Going Native !
BlaBlaCar - Going Native ! BlaBlaCar - Going Native !
BlaBlaCar - Going Native !
 
Code flow - Cocoaheads paris
Code flow - Cocoaheads parisCode flow - Cocoaheads paris
Code flow - Cocoaheads paris
 
Introduction to WebRTC on iOS
Introduction to WebRTC on iOSIntroduction to WebRTC on iOS
Introduction to WebRTC on iOS
 
What’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. FornaciariWhat’s Next Replay! Lyon 2011 - F. Fornaciari
What’s Next Replay! Lyon 2011 - F. Fornaciari
 
What’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. DarmontWhat’s Next Replay! Lyon 2011 - G. Darmont
What’s Next Replay! Lyon 2011 - G. Darmont
 
Booster votre application Windows Phone 8
Booster votre application Windows Phone 8Booster votre application Windows Phone 8
Booster votre application Windows Phone 8
 
10 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 810 tips pour améliorer les performances de vos applications Windows 8
10 tips pour améliorer les performances de vos applications Windows 8
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
Créer des jeux 3D pour le web et pour le Windows Store avec BabylonJS/WebGL
 
Apple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey BocquetApple Watch par Benoit Capallere et Joeffrey Bocquet
Apple Watch par Benoit Capallere et Joeffrey Bocquet
 
Meetup sencha
Meetup senchaMeetup sencha
Meetup sencha
 
Présentation de Carthage par Simone Civetta
Présentation de Carthage par Simone CivettaPrésentation de Carthage par Simone Civetta
Présentation de Carthage par Simone Civetta
 
Javaoop
JavaoopJavaoop
Javaoop
 
CocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nulsCocoaHeads Rennes #7 : Intégration continue pour les nuls
CocoaHeads Rennes #7 : Intégration continue pour les nuls
 
Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5Les nouveautés du Framework .NET 4.5
Les nouveautés du Framework .NET 4.5
 
Optimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJSOptimisation des applications Windows 8/HTML5/WinJS
Optimisation des applications Windows 8/HTML5/WinJS
 
La sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de BockLa sécurité sur iOS par Arnaud de Bock
La sécurité sur iOS par Arnaud de Bock
 
Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4Support developpement applications mobiles avec ionic v3 et v4
Support developpement applications mobiles avec ionic v3 et v4
 
FOSS - PoitouJUG
FOSS - PoitouJUGFOSS - PoitouJUG
FOSS - PoitouJUG
 
CRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - QuickieCRaSH @ JUGSummerCamp 2012 - Quickie
CRaSH @ JUGSummerCamp 2012 - Quickie
 

En vedette

Pre practica n2 daniel briceño
Pre practica n2 daniel briceñoPre practica n2 daniel briceño
Pre practica n2 daniel briceñoDascorp
 
Printable pictures
Printable picturesPrintable pictures
Printable picturescaitov05
 
Horarios de Centro de Negocios Personales Día de Corpus Christi
Horarios de Centro de Negocios Personales Día de Corpus ChristiHorarios de Centro de Negocios Personales Día de Corpus Christi
Horarios de Centro de Negocios Personales Día de Corpus ChristiBanco Popular
 
Tablas tercer periodo
Tablas tercer periodoTablas tercer periodo
Tablas tercer periodomateom1coloyo
 
Identifico el comerciante
Identifico el comercianteIdentifico el comerciante
Identifico el comercianteDaNii RiiVe
 
Caza del tesoro
Caza del tesoroCaza del tesoro
Caza del tesoroandretoni
 
Diseño+de..
Diseño+de..Diseño+de..
Diseño+de..arjen13
 
Slideshare
SlideshareSlideshare
SlidesharedavikOo
 
Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu...
 Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu... Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu...
Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu...segoleneroyal
 
Bestiaire d'animaux
Bestiaire d'animauxBestiaire d'animaux
Bestiaire d'animauxmilou92
 
Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...
Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...
Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...quiztian1101
 

En vedette (20)

Pre practica n2 daniel briceño
Pre practica n2 daniel briceñoPre practica n2 daniel briceño
Pre practica n2 daniel briceño
 
Printable pictures
Printable picturesPrintable pictures
Printable pictures
 
Presentación2q
Presentación2qPresentación2q
Presentación2q
 
Horarios de Centro de Negocios Personales Día de Corpus Christi
Horarios de Centro de Negocios Personales Día de Corpus ChristiHorarios de Centro de Negocios Personales Día de Corpus Christi
Horarios de Centro de Negocios Personales Día de Corpus Christi
 
Tablas tercer periodo
Tablas tercer periodoTablas tercer periodo
Tablas tercer periodo
 
Presentación1
Presentación1Presentación1
Presentación1
 
Identifico el comerciante
Identifico el comercianteIdentifico el comerciante
Identifico el comerciante
 
Caza del tesoro
Caza del tesoroCaza del tesoro
Caza del tesoro
 
Diseño+de..
Diseño+de..Diseño+de..
Diseño+de..
 
Informatica
InformaticaInformatica
Informatica
 
Slideshare
SlideshareSlideshare
Slideshare
 
Amistad
AmistadAmistad
Amistad
 
Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu...
 Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu... Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu...
Chapitre 16 et Annexe de la " Lettre à tous les résignés et indignés qui veu...
 
Los mejores momentos con los amigos
Los mejores momentos con los amigosLos mejores momentos con los amigos
Los mejores momentos con los amigos
 
Las redes sociales
Las redes socialesLas redes sociales
Las redes sociales
 
Tema 1
Tema 1Tema 1
Tema 1
 
Bestiaire d'animaux
Bestiaire d'animauxBestiaire d'animaux
Bestiaire d'animaux
 
Las etas
Las etasLas etas
Las etas
 
Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...
Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...
Ultima correccion desarrollo monica, angelica y martinRASGOS PSICOLÓGICOS DOM...
 
Lugares de asturias-33677
Lugares de asturias-33677Lugares de asturias-33677
Lugares de asturias-33677
 

Similaire à CocoaHeads Rennes #5 : iOS & Android

Passage aux applications mobiles
Passage aux applications mobilesPassage aux applications mobiles
Passage aux applications mobilesneuros
 
Conférence windows phone 7
Conférence windows phone 7Conférence windows phone 7
Conférence windows phone 7Arnaud Auroux
 
Strategies et developpements mobiles multi-plates-formes.
Strategies et developpements mobiles multi-plates-formes.Strategies et developpements mobiles multi-plates-formes.
Strategies et developpements mobiles multi-plates-formes.DocDoku
 
Tk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android FrTk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android FrValtech
 
Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?codedarmor
 
Développement mobile cross-plateform
Développement mobile cross-plateformDéveloppement mobile cross-plateform
Développement mobile cross-plateformStefan Cosquer
 
"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hoursLaurent MEURISSE
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobilesAbdoulaye Dieng
 
Windows Phone 8 for Business - Developer Talks
Windows Phone 8 for Business - Developer TalksWindows Phone 8 for Business - Developer Talks
Windows Phone 8 for Business - Developer TalksJean-Sébastien Dupuy
 
Firefox os appdays paris par tristan nitot: Hack, Learn, Celebrate
Firefox os appdays paris par tristan nitot: Hack, Learn, CelebrateFirefox os appdays paris par tristan nitot: Hack, Learn, Celebrate
Firefox os appdays paris par tristan nitot: Hack, Learn, CelebrateTristan Nitot
 
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...Christophe Porteneuve
 
Trucs et astuces sur le dévelopment Android
Trucs et astuces sur le dévelopment AndroidTrucs et astuces sur le dévelopment Android
Trucs et astuces sur le dévelopment AndroidThierry-Dimitri Roy
 
Coder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPad
Coder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPadCoder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPad
Coder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPadDavid MEKERSA
 
Introduction au développement Windows 8 et Windows Phone 8
Introduction au développement Windows 8 et Windows Phone 8Introduction au développement Windows 8 et Windows Phone 8
Introduction au développement Windows 8 et Windows Phone 8Microsoft
 

Similaire à CocoaHeads Rennes #5 : iOS & Android (20)

Passage aux applications mobiles
Passage aux applications mobilesPassage aux applications mobiles
Passage aux applications mobiles
 
Conférence windows phone 7
Conférence windows phone 7Conférence windows phone 7
Conférence windows phone 7
 
Strategies et developpements mobiles multi-plates-formes.
Strategies et developpements mobiles multi-plates-formes.Strategies et developpements mobiles multi-plates-formes.
Strategies et developpements mobiles multi-plates-formes.
 
Tk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android FrTk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android Fr
 
Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?Codedarmor 2012 - 03/04 - Android, What else?
Codedarmor 2012 - 03/04 - Android, What else?
 
Développement mobile cross-plateform
Développement mobile cross-plateformDéveloppement mobile cross-plateform
Développement mobile cross-plateform
 
Développement web mobile avec IONIC 2
Développement web mobile avec IONIC 2Développement web mobile avec IONIC 2
Développement web mobile avec IONIC 2
 
"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours"Introduction aux Developements iOS" in Three hours
"Introduction aux Developements iOS" in Three hours
 
Panorama des Technologies mobiles
Panorama des Technologies mobilesPanorama des Technologies mobiles
Panorama des Technologies mobiles
 
Windows Phone 8 for Business - Developer Talks
Windows Phone 8 for Business - Developer TalksWindows Phone 8 for Business - Developer Talks
Windows Phone 8 for Business - Developer Talks
 
Firefox os appdays paris par tristan nitot: Hack, Learn, Celebrate
Firefox os appdays paris par tristan nitot: Hack, Learn, CelebrateFirefox os appdays paris par tristan nitot: Hack, Learn, Celebrate
Firefox os appdays paris par tristan nitot: Hack, Learn, Celebrate
 
Apple - WWDC 2018
Apple - WWDC 2018Apple - WWDC 2018
Apple - WWDC 2018
 
Mioozic backfrommax
Mioozic backfrommaxMioozic backfrommax
Mioozic backfrommax
 
Android
AndroidAndroid
Android
 
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
Tirer parti des périphériques mobiles dans une application web : qui a dit qu...
 
REX react native
REX react nativeREX react native
REX react native
 
Trucs et astuces sur le dévelopment Android
Trucs et astuces sur le dévelopment AndroidTrucs et astuces sur le dévelopment Android
Trucs et astuces sur le dévelopment Android
 
Barcamp Degetel
Barcamp DegetelBarcamp Degetel
Barcamp Degetel
 
Coder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPad
Coder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPadCoder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPad
Coder des jeux en 2D ou 3D sur mobile Android, IPhone ou iPad
 
Introduction au développement Windows 8 et Windows Phone 8
Introduction au développement Windows 8 et Windows Phone 8Introduction au développement Windows 8 et Windows Phone 8
Introduction au développement Windows 8 et Windows Phone 8
 

Plus de CocoaHeadsRNS

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeadsRNS
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers TransitionsCocoaHeadsRNS
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeadsRNS
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeadsRNS
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeadsRNS
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeadsRNS
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeadsRNS
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeadsRNS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeadsRNS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeadsRNS
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeadsRNS
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeadsRNS
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeadsRNS
 

Plus de CocoaHeadsRNS (16)

CocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubsCocoaHeads Rennes #16: OHHTTPStubs
CocoaHeads Rennes #16: OHHTTPStubs
 
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 CocoaHeads Rennes #14: iOS7 Controllers Transitions CocoaHeads Rennes #14: iOS7 Controllers Transitions
CocoaHeads Rennes #14: iOS7 Controllers Transitions
 
CocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par CeledevCocoaHeads Rennes #14: Programmation Responsive par Celedev
CocoaHeads Rennes #14: Programmation Responsive par Celedev
 
CocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical RecordCocoaHeads Rennes #13 : Magical Record
CocoaHeads Rennes #13 : Magical Record
 
CocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPodsCocoaHeads Rennes #13 : CocoaPods
CocoaHeads Rennes #13 : CocoaPods
 
CocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock ObjectsCocoaHeads Rennes #10 : Mock Objects
CocoaHeads Rennes #10 : Mock Objects
 
CocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : NotificationsCocoaHeads Rennes #10 : Notifications
CocoaHeads Rennes #10 : Notifications
 
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expertCocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
CocoaHeads Rennes #9 : Gestion mémoire, du débutant à l'expert
 
CocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOSCocoaHeads Rennes #4 : Tests automatisés sur iOS
CocoaHeads Rennes #4 : Tests automatisés sur iOS
 
CocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOSCocoaHeads Rennes #4 : la rotation sur iOS
CocoaHeads Rennes #4 : la rotation sur iOS
 
Cocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOSCocoaheads Rennes #3 : Bien coder sur iOS
Cocoaheads Rennes #3 : Bien coder sur iOS
 
CocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOSCocoaHeads Rennes #3 : Bien débuter sur iOS
CocoaHeads Rennes #3 : Bien débuter sur iOS
 
CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4CocoaHeads Rennes #2 : Xcode 4
CocoaHeads Rennes #2 : Xcode 4
 
CocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératifCocoaHeads Rennes #2 : Pratiques de développement itératif
CocoaHeads Rennes #2 : Pratiques de développement itératif
 
CocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central DispatchCocoaHeads Rennes #1 : Grand Central Dispatch
CocoaHeads Rennes #1 : Grand Central Dispatch
 
CocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisationCocoaHeads Rennes #1 : internationalisation
CocoaHeads Rennes #1 : internationalisation
 

CocoaHeads Rennes #5 : iOS & Android

  • 1. iOS & Android le meilleur des deux mondes Nicolas Klein - David Bonnet Novembre 2011
  • 2. David Bonnet iOS Developer - Mobile fan - Android newbie CarMusic
  • 4. Nicolas Klein Développeur Android expert - iPhone intermédiaire • Applications : • WishList • Aion Profile Viewer • Framework : • DataDroid : gestion des donnees locales et distantes
  • 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
  • 7. Déploiement Interne : 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. 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é accrue Nécessité d’attendre la validation en cas de bug
  • 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 piratage Gestion du piratage • à la charge du développeur • Licence Validation Library (LVL) • In App Purchase • In App Purchase
  • 10. Cycle de vie de l’application Statistiques 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, langue Rapports de crashs remontés • Depuis 2.2, crashs remontés par les automatiquement depuis iPhone OS 2.0 utilisateurs Commentaires 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. Cycle de vie de l’application Statistiques 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, langue Rapports de crashs remontés • Depuis 2.2, crashs remontés par les automatiquement depuis iPhone OS 2.0 utilisateurs Commentaires 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. Cycle de vie de l’application Statistiques 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, langue Rapports de crashs remontés • Depuis 2.2, crashs remontés par les automatiquement depuis iPhone OS 2.0 utilisateurs Commentaires 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. 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
  • 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. 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. 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. 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
  • 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 !
  • 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. Le cœur du système
  • 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. Nouveautés propre au système android.nfc android.gesture android.telephony android.location android.opengl android.widget android.view ... Nombreux ajouts en surcouche
  • 26. Héritage de Cocoa • Les bases de CoreOS sont disponibles • Exemples : CoreFoundation - CoreGraphics - CoreData - CoreNetwork - ... Enrichissement des bases CoreImage GLKit CoreBluetooth
  • 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)
  • 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.
  • 33. 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)
  • 35. 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/)
  • 37. 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)
  • 38. 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; } }
  • 39. 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)
  • 40. 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)
  • 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 { 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)
  • 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 { 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)
  • 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. 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)
  • 45. 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)
  • 46. Conclusion Arrivés à maturité, les deux systèmes sont désormais très proches tout en offrant une expérience utilisateur différente.
  • 47. CocoaHeads #5 julien@cocoaheads.fr http://cocoaheads.fr thomas.dupont@cocoaheads.fr iOS & Android Mail : nicolas@foxykeep.com Twitter : @foxykeep Framework : DataDroid App : Wishlist - Aion Profile Viewer Mail : david.bonnet85@gmail.com Twitter : @davidbonnet85 App : CarMusic