iPhone & iOS

Introduction au développement
d'applications natives.
http://www.slideshare.net/fabricedelhoste

Fabrice Del...
La téléphonie mobile
Quelques chiffres
Un téléphone?
Mobile Phones (dumb phone)
●
●

Appel et SMS
Généralement gratuit dans le contrat opérateur

Feature Phones
...
Tendance globale

http://www.businessinsider.com/mobile-market-share-2012-11

L'informatique personnelle est
en train de c...
Evolution de la Téléphonie Mobile

http://www.asymco.com/2012/11/14/google-vs-samsung/
Tendance Fabricants

Et les smartphones dans tout ça?
http://www.asymco.com/2012/11/14/google-vs-samsung/
Les smartphones
Etat du marché
La part des smartphones

Une énorme part du gâteau reste à prendre !
Les US font partie des pays où la pénétration des sma...
Les smartphones sur 5 ans

http://www.asymco.com/2012/11/14/google-vs-samsung/
Compétition: Samsung vs Apple

Guerre des brevets, des innovations, de la capacité de production, marketing,
du modèle de ...
Part de marché des OS

Android : près de 73% du marché
iOS : environ 14% du marché
Mais..........
Revenus & marges
Analyst (attention: prédiction!):
"One in every two smartphones sold in
2017 will be priced below US$150"...
Fidélisation (US)

http://blogs.computerworld.com/ios/21055/why-are-apple-iphone-users-more-platform-loyal-android-users-a...
Compétition: Fragmentation Android

http://www.businessinsider.com/mobile-market-share-2012-11
Web Traffic
Les utilisateurs iPhone utilisent et consomment plus.

http://techcrunch.com/2012/10/17/apples-total-smartphon...
L'iPhone
Une révolution. Et aujourd'hui?
L'iPhone, c'est quoi ?
Un smartphone "high-end" au design épuré, léger et bien fini.
Vendu par Apple, première capitalisat...
Modèle d'iPhone

iPhone

La "vraie"
révolution

iPhone 3G

3G, App Store

iPhone 3GS
iPhone 4

Retina

iPhone 4S
iPhone 5
...
Versions d'iOS
Juin 2007

1.x

iPhone

Juillet 2008

2.x

iPhone 3G

Juin 2009

3.x

iPhone 3GS

Juin 2010

4.x

iPhone 4
...
"Fragmentation" iPhone

http://www.localytics.com/blog/2012/new-ipads-combine-for-4-of-all-apple-tablets-in-november/
Les applications mobiles
Développer une "app"
Only 1 in 10 apps gets any reasonable traction at all.
Only 1 in 1000 manages to get to the top 10 of the App
Store. For n...
Une "app" pour qui?

http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
Une "app" dans quel domaine?

http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
Une "app" pour quel effort?

http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
Une "app" pour quel pays?

http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
Une "app" utilisée?

the average amount of time, in
seconds, a user of a device
spends with an app open every
time he or s...
Environnement
Logiciel et Matériel
Les modèles et versions de l'iPhone et d'iOS
iOS
Un OS: support matériel et logiciel.
Propriétaire et protégé.
●
●

On ne peut pas publier d'applications sans être dév...
iOS
Un Store applicatif (unique): l'AppStore
Toutes les apps sont d'abord approuvées.
Qualité de l'app, API respectées
Fon...
Structure d'iOS
Cocoa Touch
Multi-touch, Core Motion, Camera, Map Kit, Controls, …

Media Services
Quartz, Core Animation,...
Compatibilité
Compatibilité ascendante assurée.
iOS 6 disponible sur toute la gamme jusqu'au 3GS (!)
Avec quelques ajustem...
Objective C
Le langage d'iOS et Mac OS X.
Le Langage
Sur-ensemble orienté objet de C.
En Objective C, on peut écrire du C.
Dérivé de SmallTalk.

Natif. Langage comp...
Built-in Types & Variables
char

un caractère sur 1 octet (signé -128 à 127)

short

un entier sur 2 octets (signé)

int

...
Built-in Types & Variables
enum Type { kRed, kGreen, kBlue };
énuméré

un type

typedef enum { kCircle, kRectangle, kSquar...
Operators
++

Comme en C.
==
!=

-Cast:
Vehicle* v = ...;

<

Car* c = ...;

>

v = (Car*) c;

<=
>=
||
&&
!
+=
-=
*=
/=
Type Id
Comme void* de C mais l'appel de méthode est
supportée!
Exemple:
Rectangle* rectangle = ...;
Car* car = ...;
id th...
Constantes communes
Nil

Pointeur vide

"string"

Type char*

@"string"

Type NSString

YES or NO

BOOL
Structures de contrôle
if (x < 10) {
...
} else {
...
}

for (int i = 0; i < 100; i++) {
...
}

for (UIView* view in self....
Interface et Implémentation
Car.h

Inclure un autre fichier
source (header)

#import "Vehicle.h"

@interface Car : Vehicle...
Visibilité des variables d'instance
Car.h

Car.m

#import "Vehicle.h"

#import "Car.h"

@interface Car : Vehicle {

@inter...
Propriétés
@interface Car : Vehicle {
// Déclaration de propriété
@property (strong, nonatomic) NSString* name;
}
[self se...
Strong vs Weak
ARC = Automatic Reference Counting
@property (strong, nonatomic) NSString* name;
@property (weak, nonatomic...
Readonly, Atomic/nonatomic

// Génère seulement le getter (self.name), pas le setter
@property (readonly, nonatomic) NSStr...
Synthesize
@synthesize name = _name;

Génère l'implémentation des getters et setters.
Seulement s'ils ne sont pas déjà déf...
Messages
// Méthode d'instance
int nb = [book numberOfPages ];
// Méthode de classe
Book* book = [Book createBookWithTitle...
Attention !
En Objective C, on peut appeler une méthode
sur ........ Nil !?!
Car* myCar = Nil;
[myCar fillWithGas]; // Ne ...
Self & super
self : représente l'instance de la classe
super : représente l'instance de la super classe
Exemples:
[self pe...
Création d'objets
L'allocation et l'initialisation sont séparées.
● Alloc alloue l'espace mémoire pour l'instance
● Init
i...
Introspection
Dans la classe NSObject (la classe racine de quasiment tout objet)
+(Class) class
-(BOOL) isKindOfClass: cla...
@selector & SEL
Exemple:
- (void)myTimerCallback:(NSTimer*)timer {
// Code...
if( timerShouldEnd ) {
[timer invalidate];
}...
Protocols
Héritage multiple de spécifications (pas implémentation).
Très utilisé pour le pattern Delegate dans iOS.
@proto...
Protocols - Exemple
@interface ViewController : UIViewController <UIActionSheetDelegate>

// ...

Le protocole à implément...
Categories
Extension d'une classe - Maintenabilité
(ex: librairie dont on n'est pas l'auteur)
Convention sur le nom du fic...
Blocks
Un bloc == un fragment de code:
^{
// Du code
}

Exemple de déclaration:
typedef int (^IntegerComparisonBlock)(int ...
Blocks - Autre exemple
Facilite le développement asynchrone.
Code plus efficace : le thread courant peut continuer.
[self....
Namespace... no!
Pas de "namespace" == collision possible de noms.
:-(
Convention: préfixer ses classes, ses #define, ses
...
Les principaux
Frameworks
Les nombreuses API d'iOS
Frameworks
Plus de 50 frameworks:
● Foundation: les classes de bases
● UIKit : interface graphique
● MapKit: gestion des c...
Foundation - NSObject
La classe racine de toute classe.
NSObject (NS = NextSTEP)
description
copy
mutableCopy
...
Des méth...
Foundation - NSString
NSString
Utilisé partout dans iOS
NSMutableString
Peu utilisé (string modifiable).
NSString* maChain...
Foundation Framework
NSNumber

NSData

Un "wrapper" pour un int, float,
double, BOOL, etc...

Sauver/restaurer/transmettre...
Tableau
Collection ordonné (pas trié!) d'objets.
NSArray
NSMutableArray

NSArray *arr = [[NSArray alloc] initWithObjects:@...
Dictionnaire (Hashtable)
Association clé-valeur.
NSDictionary
NSMutableDictionary

NSDictionary *dictionary = [[NSDictiona...
Ensemble
Collection non ordonné d'objets distincts.
NSSet
NSMutableSet
NSOrderedSet
NSMutableOrderedSet
NSSet *mySet;
NSDa...
NSUserDefaults
Stockage de PropertyList.
Pas une base de données mais un moyen
simple de lire/écrire de l'information pers...
Property List
Collection of collections / configuration files
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLI...
NSNotificationCenter
Recevoir des notifications
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector
...
Grand Central Dispatch
GCD = Une API de programmation concurrente
○ Tâche = block ou fonction
○ Queue d'exécution synchron...
Grand Central Dispatch
dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue",
0);

dispatch_async (myQu...
NSOperation & NSOperationQueue
Légèrement moins performant que GCD.
Mais encore un niveau d'abstraction au dessus.
Exemple...
Logging

NSLog(@"The current date and time is: %@", [NSDate date]);
Et de nombreux autres frameworks
MapKit : gestion des cartes
CoreLocation : gestion de la géolocalisation
CoreData : frame...
Interface Graphique
Les premières bases
MVC
Dans iOS, c'est le pattern MVC.
Même du MVC de MVC de MVC...
Modèle
Quelles sont vos données?
Vue = UIView
Où sont pré...
UIViews
Une UIView = une surface rectangulaire dans laquelle on
peut dessiner et gérer des évènements.
Hiérarchique: une v...
UIView
UIView - Frame & Bounds
CGFloat = un float
CGPoint = (x, y)
CGSize = (largeur, hauteur)
CGRect = (x, y, largeur, hauteur)
Storyboard
Storyboard
Défini sous forme graphique la composition
des vues et l'association des controleurs.
●

Outlets: propriétés du...
Evènements des View Controllers
–
–
–
–
–
–
–
–

viewDidLoad
viewWillLayoutSubviews
viewDidLayoutSubviews
viewWillAppear:
...
Segues
C'est une transition entre 2 view controllers.
Push segue pousse le "destination view controller" sur navigation co...
Navigation Controller
Tab Bar Controller
Widgets
UIButton
UITableView
UITextField
UITextView
UIImageView
UIToolbar
UIWebView
UIScrollView
Etc...etc...
Un vaste sujet...trop pour ce cours !
Auto layout
Adaptation automatique à la taille d'écran de l'iPhone.
Basé sur de la d...
XCode
L'environnement de développement Apple.
XCode > Interface Builder
Composition des storyboards (views)
Transitions entre les écrans (segues)
Liens avec le code sou...
XCode > Instruments
Performance, Fuite mémoire
XCode > Organizer
Gestion des projets
Gestion des devices
Gestion des repository Git
Gestion de la documentation
Gestion d...
XCode > Debugger
LLDB (ou GDB au choix)
Exécution pas à pas, etc...
Points d'arrêt.
Inspection des variables.
Vue des queu...
XCode > Simulator
Simulation *presque* complète:
● des différents modèles d'iphone
● des différentes versions d'OS
Il manq...
App Store
La place de marché des applications.
Processus de publication
1.
2.

3.
4.

5.
6.
7.

S'enregistrer à l'Apple Developer Program : 80€ pour iOS.
Générer toutes ...
Visibilité des Apps

Ref: http://blog.gaborcselle.com/2012/10/the-biggest-problem-in-app-discovery.html
Catégorie d'Apps
Quelle versions d'iOS?
Sur iOS, les utilisateurs migrent rapidement.
iOS 6 - Migration

http://insights.chitika.com/2012/ios-6-adoption-one-month/
Etat du parc (Amérique du nord)

http://insights.chitika.com/2012/ios-6-adoption-one-month/
Compléments
Autres outils et alternatives.
developer.apple.com
SDK
Tutos
Exemples
Vidéos (WWDC)
Forums
github.com
Basé sur outil de gestion des versions "git".
Gestion des bugs, des branches, etc...
Outil social.
Vitrine. CV ...
stackoverflow.com
Foire aux questions.
Notification, gratification, etc...
Communauté iOS très active.
Impressionnant nive...
raywenderlich.com
Nombreux tutoriels.
Alternatives à XCode et Objective C
HTML 5 bien sûr (le mobile web).
Pro:
● portabilité
● coût
● formation (réutilisation ...
Alternatives à XCode et Objective C
Hybride: HTML5 + Natif
Phonegap, Titanium, ...
Pro:
● visibilité sur l'AppStore
● accè...
Suivi des compétiteurs
www.appannie.com
TestFlight, Bugsense, ...
Environnement de tests, de distribution beta,
de collecte des usages...
Parse, Stackmob, Kinvey, ...
Optimiser le développement d'app, en particulier le serveur.
Fourniture d'un backend serveur ...
Merci.
Upcoming SlideShare
Loading in...5
×

iPhone & iOS - Introduction au développement d'applications natives

1,374

Published on

Une introduction sans prétention au développement d'applications natives pour iPhone. N'hésitez pas à me faire part de vos commentaires s'il y a des erreurs, c'est ma première.

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

No Downloads
Views
Total Views
1,374
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

iPhone & iOS - Introduction au développement d'applications natives

  1. 1. iPhone & iOS Introduction au développement d'applications natives. http://www.slideshare.net/fabricedelhoste Fabrice Delhoste @spifd fabrice@delhoste.com Déc. 2012
  2. 2. La téléphonie mobile Quelques chiffres
  3. 3. Un téléphone? Mobile Phones (dumb phone) ● ● Appel et SMS Généralement gratuit dans le contrat opérateur Feature Phones ● ● ● Entre le mobile phone et le smartphone Certaines "features" telle que caméra, web browsing, ... Généralement 0 à 100€ sur des contrats opérateurs de 2 ans. Smartphones ● ● ● Comparable à un ordinateur portable, avec des capteurs supplémentaires (GPS, gyroscope, ...). Les plus chers sont autour de 600-800€ hors offre opérateur. Il y aura probablement de plus en plus d'offres "aggressives" en cours autour de 200-300€ (ex: Google Nexus 4).
  4. 4. Tendance globale http://www.businessinsider.com/mobile-market-share-2012-11 L'informatique personnelle est en train de changer...
  5. 5. Evolution de la Téléphonie Mobile http://www.asymco.com/2012/11/14/google-vs-samsung/
  6. 6. Tendance Fabricants Et les smartphones dans tout ça? http://www.asymco.com/2012/11/14/google-vs-samsung/
  7. 7. Les smartphones Etat du marché
  8. 8. La part des smartphones Une énorme part du gâteau reste à prendre ! Les US font partie des pays où la pénétration des smartphones est la plus importante. En déc 2011, plus de 45% des mobiles vendus en Europe étaient des smartphones. http://www.asymco.com/page/3/
  9. 9. Les smartphones sur 5 ans http://www.asymco.com/2012/11/14/google-vs-samsung/
  10. 10. Compétition: Samsung vs Apple Guerre des brevets, des innovations, de la capacité de production, marketing, du modèle de vente, de l'OS, des "stores", etc...
  11. 11. Part de marché des OS Android : près de 73% du marché iOS : environ 14% du marché Mais..........
  12. 12. Revenus & marges Analyst (attention: prédiction!): "One in every two smartphones sold in 2017 will be priced below US$150" "The expensive smartphones will find their market share shrinking from 85% of total smartphones sold in 2011 to 33% in 2017. In contrast, the low-end smartphones will gain enormous amount of market share over the years to account for just over half (52%) of the smartphones sold in 2017." http://www.asymco.com/2012/11/14/google-vs-samsung/ be-priced-below-us150/ http://blogs.informatandm.com/6575/press-release-one-in-every-two-smartphones-sold-in-2017-will-
  13. 13. Fidélisation (US) http://blogs.computerworld.com/ios/21055/why-are-apple-iphone-users-more-platform-loyal-android-users-are
  14. 14. Compétition: Fragmentation Android http://www.businessinsider.com/mobile-market-share-2012-11
  15. 15. Web Traffic Les utilisateurs iPhone utilisent et consomment plus. http://techcrunch.com/2012/10/17/apples-total-smartphone-web-traffic-share-climbs-to-46-with-iphone-5-samsung-trails-at-17/ http://www.businessinsider.com/mobile-market-share-2012-11
  16. 16. L'iPhone Une révolution. Et aujourd'hui?
  17. 17. L'iPhone, c'est quoi ? Un smartphone "high-end" au design épuré, léger et bien fini. Vendu par Apple, première capitalisation boursière mondiale. Processeur (A6 pour l'iPhone 5) très performant Un système d'exploitation: iOS Support réseau: EDGE/CDMA/3G/LTE/4G, Wifi, Bluetooth GPS Ecran multi-touch Caméra avant et arrière photo et vidéo Audio in / out Gyroscope Accéléromètre Capteur de luminosité ambiante Etc... Un produit de luxe, inutilement cher, pour certains. Un produit incontournable pour d'autres. Comme en cuisine, c'est souvent une question de goût ! (no troll)
  18. 18. Modèle d'iPhone iPhone La "vraie" révolution iPhone 3G 3G, App Store iPhone 3GS iPhone 4 Retina iPhone 4S iPhone 5 4 pouces, 4G
  19. 19. Versions d'iOS Juin 2007 1.x iPhone Juillet 2008 2.x iPhone 3G Juin 2009 3.x iPhone 3GS Juin 2010 4.x iPhone 4 Oct. 2011 5.x iPhone 4S Sept. 2012 6.x iPhone 5
  20. 20. "Fragmentation" iPhone http://www.localytics.com/blog/2012/new-ipads-combine-for-4-of-all-apple-tablets-in-november/
  21. 21. Les applications mobiles Développer une "app"
  22. 22. Only 1 in 10 apps gets any reasonable traction at all. Only 1 in 1000 manages to get to the top 10 of the App Store. For non-games, only 1 in 1690 reaches the top. 50% of revenue generated by iOS and Android apps goes to just 25 developers (US). 24 are games ! http://build.developereconomics.com/appsfire-infographic-illustrates-once-more-difficulty-to-get-to-the-top/ http://venturebeat.com/2012/12/05/half-of-revenue-generated-by-ios-and-android-apps-goes-to-just-25-developers/
  23. 23. Une "app" pour qui? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  24. 24. Une "app" dans quel domaine? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  25. 25. Une "app" pour quel effort? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  26. 26. Une "app" pour quel pays? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  27. 27. Une "app" utilisée? the average amount of time, in seconds, a user of a device spends with an app open every time he or she launches it http://www.localytics.com/blog/2012/new-ipads-combine-for-4-of-all-apple-tablets-in-november/ This metric shows how many app sessions on average a user initiated over a given period of time – in this case the month of November.
  28. 28. Environnement Logiciel et Matériel Les modèles et versions de l'iPhone et d'iOS
  29. 29. iOS Un OS: support matériel et logiciel. Propriétaire et protégé. ● ● On ne peut pas publier d'applications sans être développeur enregistré. Le "jailbreak" consiste à casser la sécurité d'iOS pour permettre ça. Des apps de base: ● Téléphonie, Messaging, Contacts, Calendar, Photo, Plans, ... Des tonnes de frameworks: ● iCloud, UIKit, PassKit, MapKit, StoreKit, Notifications, iAd, ...
  30. 30. iOS Un Store applicatif (unique): l'AppStore Toutes les apps sont d'abord approuvées. Qualité de l'app, API respectées Fonctions disjointes avec Apple Règles éthiques Sandbox : cloisonnement des applications Une app s'exécute indépendamment des autres apps (mémoire, ...). Il existe quelques moyens pour le partage inter-app.
  31. 31. Structure d'iOS Cocoa Touch Multi-touch, Core Motion, Camera, Map Kit, Controls, … Media Services Quartz, Core Animation, Open GL ES, … Core Services Collections, Address Book, Threading, Core Location… Core OS Kernel, Filesystem, Security, Sockets, Certificates, ..
  32. 32. Compatibilité Compatibilité ascendante assurée. iOS 6 disponible sur toute la gamme jusqu'au 3GS (!) Avec quelques ajustements: ● ● ● ● Gestion Retina (x 2) Gestion du 3.5 et 4 pouces depuis l'iPhone 5 Frameworks ○ API suivant modèle (ex: gyroscope) ○ Obsolescence de certains Frameworks ou API ARC, gestion mémoire améliorée, au choix (recommandée)
  33. 33. Objective C Le langage d'iOS et Mac OS X.
  34. 34. Le Langage Sur-ensemble orienté objet de C. En Objective C, on peut écrire du C. Dérivé de SmallTalk. Natif. Langage compilé. Edition de liens. Apple = "Think different". Issu du rachat de NextSTEP OS pour: ○ ○ Mac OS X iOS
  35. 35. Built-in Types & Variables char un caractère sur 1 octet (signé -128 à 127) short un entier sur 2 octets (signé) int un entier sur 4 octets (signé) long un entier sur 4 octets (signé) long long un entier sur 8 octets (signé) unsigned ___ pour ces mêmes types non signés (ex: unsigned int) float un décimal sur 4 octets double un décimal sur 8 octets BOOL un booléen (typedef signed char)
  36. 36. Built-in Types & Variables enum Type { kRed, kGreen, kBlue }; énuméré un type typedef enum { kCircle, kRectangle, kSquare } ShapeType; un typedef (C) Exemples de déclaration: int foo = 32; // une variable entière int* ptr = &foo; // un pointeur vers entier (en C) CGPoint point; UIView* view; // une variable de type CGPoint (structure C) // un pointeur vers une vue
  37. 37. Operators ++ Comme en C. == != -Cast: Vehicle* v = ...; < Car* c = ...; > v = (Car*) c; <= >= || && ! += -= *= /=
  38. 38. Type Id Comme void* de C mais l'appel de méthode est supportée! Exemple: Rectangle* rectangle = ...; Car* car = ...; id thing = rectangle; double surface = [thing surface]; thing = car; [thing fillWithGas:45];
  39. 39. Constantes communes Nil Pointeur vide "string" Type char* @"string" Type NSString YES or NO BOOL
  40. 40. Structures de contrôle if (x < 10) { ... } else { ... } for (int i = 0; i < 100; i++) { ... } for (UIView* view in self.view.subviews) { while (x < 10) { ... } ... } break; do { ... } while (x < 10); switch (value) { case 0: case 1: ... break; case 2: ... break; default: break; } continue;
  41. 41. Interface et Implémentation Car.h Inclure un autre fichier source (header) #import "Vehicle.h" @interface Car : Vehicle { Car.m #import "Car.h" @interface Car () float fillLevel; L'interface peut être étendue en privé ici. } @end // Déclaration des méthodes publiques @implementation Car - (void) addGas; // Implémentation des méthodes privées et publiques @end - (void) addGas { Fin de déclaration // Code pour ajouter de l'essence } @end
  42. 42. Visibilité des variables d'instance Car.h Car.m #import "Vehicle.h" #import "Car.h" @interface Car : Vehicle { @interface Car () @protected float fillLevel; @end @private @implementation Car float time; } // Déclaration des méthodes publiques // Implémentation des méthodes privées et publiques - (void) addGas { // Code pour ajouter de l'essence - (void) addGas; } @end @end
  43. 43. Propriétés @interface Car : Vehicle { // Déclaration de propriété @property (strong, nonatomic) NSString* name; } [self setName:@"Peugeot 5008"]; // Fixer la valeur self.name = @"Peugeot 5008"; // Equivalent NSLog(@"The car is %@", [self name]); // Lire la valeur NSLog(@"The car is %@", self.name); // Equivalent
  44. 44. Strong vs Weak ARC = Automatic Reference Counting @property (strong, nonatomic) NSString* name; @property (weak, nonatomic) NSString* name;
  45. 45. Readonly, Atomic/nonatomic // Génère seulement le getter (self.name), pas le setter @property (readonly, nonatomic) NSString* name; @property (strong, atomic) NSString* name;
  46. 46. Synthesize @synthesize name = _name; Génère l'implémentation des getters et setters. Seulement s'ils ne sont pas déjà définis (surcharge). A partir de XCode 4.4, ils sont auto-générés. Plus besoin de @synthesize.
  47. 47. Messages // Méthode d'instance int nb = [book numberOfPages ]; // Méthode de classe Book* book = [Book createBookWithTitle :@"Game of Thrones" author:@"George R. R. Martin"]; Comment déclarer ces méthodes? Nom de la méthode - (int) numberOfPages; Type du paramètre + createBookWithTitle:(NSString*)title author:(NSString*)author; + pour méthode de classe - pour méthode d'instance Nom du paramètre
  48. 48. Attention ! En Objective C, on peut appeler une méthode sur ........ Nil !?! Car* myCar = Nil; [myCar fillWithGas]; // Ne fait rien ! Dans d'autres langages, on aurait obtenu: un plantage un NullPointerException ...
  49. 49. Self & super self : représente l'instance de la classe super : représente l'instance de la super classe Exemples: [self performSegueWithIdentifier:@"MySegue" sender:sender]; [super viewWillAppear:animated];
  50. 50. Création d'objets L'allocation et l'initialisation sont séparées. ● Alloc alloue l'espace mémoire pour l'instance ● Init initialise l'instance NSArray* rolls = [[NSArray alloc] initWithObjects:@"California Roll", @"Tuna Roll", @"Salmon Roll", @"Unagi Roll", @"Philadelphia Roll", @"Rainbow Roll", @"Vegetable Roll", @"Spider Roll", @"Shrimp Tempura Roll", @"Cucumber Roll", @"Yellowtail Roll", @"Spicy Tuna Roll", @"Avocado Roll", @"Scallop Roll", nil];
  51. 51. Introspection Dans la classe NSObject (la classe racine de quasiment tout objet) +(Class) class -(BOOL) isKindOfClass: classObj -(BOOL) isMemberOfClass: -(BOOL) respondsToSelector: +(BOOL) instancesRespondToSelector: -(id) performSelector:selector Exemples: if ([vehicle isMemberOfClass:[Car class]] == YES ) { // ... } if ( [vehicle respondsToSelector:@selector(setFillLevel:)] == YES) { // ... }
  52. 52. @selector & SEL Exemple: - (void)myTimerCallback:(NSTimer*)timer { // Code... if( timerShouldEnd ) { [timer invalidate]; } } SEL mySelector = @selector(myTimerCallback:); [NSTimer scheduleTimerWithTimeInterval:30.0 target:obj selector:mySelector userInfo:nil repeats:YES];
  53. 53. Protocols Héritage multiple de spécifications (pas implémentation). Très utilisé pour le pattern Delegate dans iOS. @protocol Printing @required - (void)print; @optional - (void)printColor @end @interface HPPrinter: NSObject <Printing> //... @end
  54. 54. Protocols - Exemple @interface ViewController : UIViewController <UIActionSheetDelegate> // ... Le protocole à implémenter. - (void)viewDidLoad { [super viewDidLoad]; UIActionSheet *actionSheet = [[UIActionSheet alloc] L'instance du protocole (nous même) initWithTitle:@"Delegate Example" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Destructive Button" otherButtonTitles:@"Other Button",nil [actionSheet showInView:self.view]; } La méthode du delegate à implémenter. - (void) actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { NSLog(@"hello world!");
  55. 55. Categories Extension d'une classe - Maintenabilité (ex: librairie dont on n'est pas l'auteur) Convention sur le nom du fichier source : Car+TrailerSupport.h @interface Car (TrailerSupport) - (void)attach:(Trailer*)trailer; @end @implementation Car (TrailerSupport) - (void)attach:(Caravan*)trailer { } @end Une catégorie ne supporte pas l'ajout d'une variable d'instance !!! Contournement: objc_setAssociatedObject obc_getAssociatedObject
  56. 56. Blocks Un bloc == un fragment de code: ^{ // Du code } Exemple de déclaration: typedef int (^IntegerComparisonBlock)(int i, int j); IntegerComparisonBlock whichIsGreaterBlock = ^ int (int i, int j) { return i > j ? i : j; }; Exemple d'utilisation: int val = whichIsGreaterBlock(10, 15);
  57. 57. Blocks - Autre exemple Facilite le développement asynchrone. Code plus efficace : le thread courant peut continuer. [self.client postPath:@"/getMeSomething" parameters:params success:^(Response* response) { // Success code } failure:(^Response* response) { // Failure code } ];
  58. 58. Namespace... no! Pas de "namespace" == collision possible de noms. :-( Convention: préfixer ses classes, ses #define, ses constantes, ... par un trigram de votre produit. Exemple: @interface PRJMaClasse // ... @end
  59. 59. Les principaux Frameworks Les nombreuses API d'iOS
  60. 60. Frameworks Plus de 50 frameworks: ● Foundation: les classes de bases ● UIKit : interface graphique ● MapKit: gestion des cartes géographiques ● CoreLocation: géolocalisation ● CoreMotion: gyroscope, accéléromètre ● Social: Facebook, Twitter, ... ● ... Bien sûr, impossible de tous les connaître. Néanmoins, leur fonctionnement, leur conception, sont souvent identiques.
  61. 61. Foundation - NSObject La classe racine de toute classe. NSObject (NS = NextSTEP) description copy mutableCopy ... Des méthodes d'introspection, d'archivage, etc...
  62. 62. Foundation - NSString NSString Utilisé partout dans iOS NSMutableString Peu utilisé (string modifiable). NSString* maChaine = @"Hello world!";
  63. 63. Foundation Framework NSNumber NSData Un "wrapper" pour un int, float, double, BOOL, etc... Sauver/restaurer/transmettre des données NSValue NSDate Un "wrapper" pour les types nonobjet (ex: struct C) Un point unique dans le temps.
  64. 64. Tableau Collection ordonné (pas trié!) d'objets. NSArray NSMutableArray NSArray *arr = [[NSArray alloc] initWithObjects:@"Eddard", @"Arya", @"Tyrion", nil]; NSMutableArray *mutable = [[NSMutableArray alloc] init]; [mutable addObject: @"Tywin"]; [mutable addObjectsFromArray:arr]; [mutable sortUsingSelector:@selector(caseInsensitiveCompare:)];
  65. 65. Dictionnaire (Hashtable) Association clé-valeur. NSDictionary NSMutableDictionary NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys: @"one", [NSNumber numberWithInt: 1], @"two", [NSNumber numberWithInt: 2], @"three", [NSNumber numberWithInt: 3], nil]; NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init]; [mutable setObject:[NSNumber numberWithInt:4] forKey: @"four"]; mutable[@"five] = [NSNumber numberWithInt:5];
  66. 66. Ensemble Collection non ordonné d'objets distincts. NSSet NSMutableSet NSOrderedSet NSMutableOrderedSet NSSet *mySet; NSData *someData = [NSData dataWithContentsOfFile:aPath]; NSValue *aValue = [NSNumber numberWithInteger:5]; NSString *aString = @"a string"; mySet = [NSSet setWithObjects:someData, aValue, aString, nil];
  67. 67. NSUserDefaults Stockage de PropertyList. Pas une base de données mais un moyen simple de lire/écrire de l'information persistante. NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; [prefs setObject:@"TextToSave" forKey:@"keyToLookupString"]; NSString *myString = [prefs stringForKey:@"keyToLookupString"];
  68. 68. Property List Collection of collections / configuration files <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple. com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Lincoln</key> <dict> <key>DOB</key> <date>1809-02-12T09:18:00Z</date> <key>Name</key> <string>Abraham Lincoln</string> <key>Scores</key> <array> <integer>8</integer> <real>4.9000000953674316</real> <integer>9</integer> </array> ... ...
  69. 69. NSNotificationCenter Recevoir des notifications [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector (receiveEvent:) name:@"SomeEvent" object:nil]; - (void)receiveEvent:(NSNotification *)notification { // Handle event } [[NSNotificationCenter defaultCenter] removeObserver:self name:@"SomeEvent" object: nil]; Envoyer des notifications [[NSNotificationCenter defaultCenter] postNotificationName:@"SomeOtherEvent" object:nil]; Pratique mais à minimiser (spaghetti pattern)
  70. 70. Grand Central Dispatch GCD = Une API de programmation concurrente ○ Tâche = block ou fonction ○ Queue d'exécution synchrone ou asynchrone ○ Annulation de tâche ○ Groupes d'exécution ○ Synchronisation lecture/écriture ○ Bien sûr, il y a des threads derrière Plus facile que la programmation bas niveau multithread.
  71. 71. Grand Central Dispatch dispatch_queue_t myQueue = dispatch_queue_create("com.mycompany.myqueue", 0); dispatch_async (myQueue, ^{ // Exécution asynchrone: on n'attend pas la fin. }); dispatch_sync (queue, ^{ // Exécution synchrone: on attend la fin. }); La queue principale (thread principal): dispatch_get_main_queue ()
  72. 72. NSOperation & NSOperationQueue Légèrement moins performant que GCD. Mais encore un niveau d'abstraction au dessus. Exemple: @interface PageLoadOperation : NSOperation { @property(retain) NSURL *targetURL; - (id)initWithURL:(NSURL*)url; @end NSOperationQueue* queue = [[NSOperationQueue alloc] init]; PageLoadOperation *plo = [[PageLoadOperation alloc] initWithURL:url]; [queue addOperation:plo];
  73. 73. Logging NSLog(@"The current date and time is: %@", [NSDate date]);
  74. 74. Et de nombreux autres frameworks MapKit : gestion des cartes CoreLocation : gestion de la géolocalisation CoreData : framework de persistence (dans SQLLite) Notification Center : une plateforme de notifications Bien plus que l'exemple précédent ! Etc... découvrez par vous-même au fil des besoins !
  75. 75. Interface Graphique Les premières bases
  76. 76. MVC Dans iOS, c'est le pattern MVC. Même du MVC de MVC de MVC... Modèle Quelles sont vos données? Vue = UIView Où sont présentées les données (ex: l’écran)? Contrôleur = UIViewController Comment sont présentées les données?
  77. 77. UIViews Une UIView = une surface rectangulaire dans laquelle on peut dessiner et gérer des évènements. Hiérarchique: une vue a 1 supervue et des sous-vues. Construite dans XCode graphiquement (Storyboard). Ou dans le code directement (pour les vrais ;-).
  78. 78. UIView
  79. 79. UIView - Frame & Bounds CGFloat = un float CGPoint = (x, y) CGSize = (largeur, hauteur) CGRect = (x, y, largeur, hauteur)
  80. 80. Storyboard
  81. 81. Storyboard Défini sous forme graphique la composition des vues et l'association des controleurs. ● Outlets: propriétés du code source liés à un élement de l'interface (ex: un bouton) ● Actions: les messages quand un évènement se produit (ex: une "touche" sur le bouton). C'est en fait un fichier XML maintenu par Interface Builder.
  82. 82. Evènements des View Controllers – – – – – – – – viewDidLoad viewWillLayoutSubviews viewDidLayoutSubviews viewWillAppear: viewDidAppear: viewWillDisappear: viewDidDisappear: willRotateToInterfaceOrientation:duration:
  83. 83. Segues C'est une transition entre 2 view controllers. Push segue pousse le "destination view controller" sur navigation controller’s stack. Modal segue présente le "destination view controller" (modal = bloquant jusqu'à "dismiss"). Popover segue affiche le "destination view controller" dans un popover (affichage par dessus). Ipad uniquement. Custom segue permet de définir une transition personalisée (ex: avec une animation)
  84. 84. Navigation Controller
  85. 85. Tab Bar Controller
  86. 86. Widgets UIButton UITableView UITextField UITextView UIImageView UIToolbar UIWebView UIScrollView Etc...etc...
  87. 87. Un vaste sujet...trop pour ce cours ! Auto layout Adaptation automatique à la taille d'écran de l'iPhone. Basé sur de la définition de contraintes. Programmable. Auto rotation Adaptation des éléments à la rotation de l'écran (mode portrait / paysage). Gestures Swipe, Pinch, etc... tous les gestes d'utilisation du multitouch. Définis dans le storyboard par drag&drop sur un composant.
  88. 88. XCode L'environnement de développement Apple.
  89. 89. XCode > Interface Builder Composition des storyboards (views) Transitions entre les écrans (segues) Liens avec le code source (outlets, actions)
  90. 90. XCode > Instruments Performance, Fuite mémoire
  91. 91. XCode > Organizer Gestion des projets Gestion des devices Gestion des repository Git Gestion de la documentation Gestion des archives (de la distribution des apps)
  92. 92. XCode > Debugger LLDB (ou GDB au choix) Exécution pas à pas, etc... Points d'arrêt. Inspection des variables. Vue des queues d'exécution vs threads. Du classique pour un IDE.
  93. 93. XCode > Simulator Simulation *presque* complète: ● des différents modèles d'iphone ● des différentes versions d'OS Il manque certaines fonctions liées au matériel: ● la caméra ● le gyroscope ● ... Mais il y en a certaines: ● orientation de l'écran ● GPS
  94. 94. App Store La place de marché des applications.
  95. 95. Processus de publication 1. 2. 3. 4. 5. 6. 7. S'enregistrer à l'Apple Developer Program : 80€ pour iOS. Générer toutes les clés/certificats (PKI) nécessaires: a. Développeur : pour soi b. Adhoc : pour des devices d'une flotte de tests c. Distribution : pour la distribution sur l'AppStore Activer le développement sur son iPhone et l'enregistrer (UDID) chez Apple Enregistrer l'app sur iTunes Connect a. Accepter les contrats Apple b. Prix, Données administratives, Contacts, Compte bancaire, Mots clés, Icônes, etc, etc... Soumettre l'app (ou sa mise à jour) : 5 à 10 jours en moyenne pour la validation d'Apple. Un fois validée, autoriser la distribution de l'app Récupérer la monnaie: 70% des ventes (30% pour Apple) http://developer.apple. com/library/ios/#documentation/ToolsLanguages/Conceptual/YourFirstAppStoreSubmission/AboutYourFirstAppStoreSubmission/AboutYourFirstAppStoreSubmi
  96. 96. Visibilité des Apps Ref: http://blog.gaborcselle.com/2012/10/the-biggest-problem-in-app-discovery.html
  97. 97. Catégorie d'Apps
  98. 98. Quelle versions d'iOS? Sur iOS, les utilisateurs migrent rapidement.
  99. 99. iOS 6 - Migration http://insights.chitika.com/2012/ios-6-adoption-one-month/
  100. 100. Etat du parc (Amérique du nord) http://insights.chitika.com/2012/ios-6-adoption-one-month/
  101. 101. Compléments Autres outils et alternatives.
  102. 102. developer.apple.com SDK Tutos Exemples Vidéos (WWDC) Forums
  103. 103. github.com Basé sur outil de gestion des versions "git". Gestion des bugs, des branches, etc... Outil social. Vitrine. CV réel du développeur. Et surtout nombreuses librairies et exemples pour iOS. Ne réinventez pas la roue: ● cherchez & utilisez pour vos besoins ○ Vérifiez toujours les licences ● "forkez" puis améliorer/personaliser (si besoin)
  104. 104. stackoverflow.com Foire aux questions. Notification, gratification, etc... Communauté iOS très active. Impressionnant niveau d'expertise de certains membres. Qualité des réponses. Faîtes une recherche avant de poser votre question.
  105. 105. raywenderlich.com Nombreux tutoriels.
  106. 106. Alternatives à XCode et Objective C HTML 5 bien sûr (le mobile web). Pro: ● portabilité ● coût ● formation (réutilisation compétences) Cons: ● pas de visibilité sur l'AppStore ● expérience utilisateur (suivant la réalisation) ● performance (exemple récent: Facebook) ● peu d'accès aux API natives (ex: contacts, photos, ...)
  107. 107. Alternatives à XCode et Objective C Hybride: HTML5 + Natif Phonegap, Titanium, ... Pro: ● visibilité sur l'AppStore ● accès aux API natives ● portabilité ● coût ● formation Cons: ● expérience utilisateur (ça dépend) ● performance (ça dépend) ● pérennité ● accès incomplet aux API natives
  108. 108. Suivi des compétiteurs www.appannie.com
  109. 109. TestFlight, Bugsense, ... Environnement de tests, de distribution beta, de collecte des usages...
  110. 110. Parse, Stackmob, Kinvey, ... Optimiser le développement d'app, en particulier le serveur. Fourniture d'un backend serveur (PAAS - Platform as a Service): Stockage des données et fichiers Gestion des utilisateurs (signup/signin + réseaux sociaux) API REST & versioning Gestion notifications push Analytics Sécurité des échanges API Clientes: iOS, Android, W8, Javascript, REST, ... Intégration avec partenaires (envoi SMS, ...)
  111. 111. Merci.

×