SlideShare una empresa de Scribd logo
1 de 111
iPhone & iOS

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

Fabrice Delhoste
@spifd
fabrice@delhoste.com
Déc. 2012
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
●
●
●

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).
Tendance globale

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

L'informatique personnelle est
en train de changer...
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 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/
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 vente, de l'OS, des "stores", etc...
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"
"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-
Fidélisation (US)

http://blogs.computerworld.com/ios/21055/why-are-apple-iphone-users-more-platform-loyal-android-users-are
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-smartphone-web-traffic-share-climbs-to-46-with-iphone-5-samsung-trails-at-17/
http://www.businessinsider.com/mobile-market-share-2012-11
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 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)
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
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
"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 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/
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 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.
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é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, ...
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.
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, ..
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)
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 compilé. Edition de liens.
Apple = "Think different".
Issu du rachat de NextSTEP OS pour:
○
○

Mac OS X
iOS
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)
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
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 thing = rectangle;
double surface = [thing surface];
thing = car;
[thing fillWithGas:45];
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.view.subviews) {
while (x < 10) {
...
}

...
}

break;
do {
...
} while (x < 10);

switch (value) {
case 0:
case 1:
...
break;
case 2:
...
break;
default:
break;
}

continue;
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
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
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
Strong vs Weak
ARC = Automatic Reference Counting
@property (strong, nonatomic) NSString* name;
@property (weak, nonatomic) NSString* name;
Readonly, Atomic/nonatomic

// Génère seulement le getter (self.name), pas le setter
@property (readonly, nonatomic) NSString* name;

@property (strong, atomic) NSString* name;
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.
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
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
...
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];
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];
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) {
// ...
}
@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];
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
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!");
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
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);
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
}
];
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
Les principaux
Frameworks
Les nombreuses API d'iOS
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.
Foundation - NSObject
La classe racine de toute classe.
NSObject (NS = NextSTEP)
description
copy
mutableCopy
...
Des méthodes d'introspection, d'archivage, etc...
Foundation - NSString
NSString
Utilisé partout dans iOS
NSMutableString
Peu utilisé (string modifiable).
NSString* maChaine = @"Hello world!";
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.
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:)];
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];
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];
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"];
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>
...
...
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)
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.
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 ()
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];
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 : 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 !
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ésentées les données (ex: l’écran)?
Contrôleur = UIViewController
Comment sont présentées les données?
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 ;-).
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 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.
Evènements des View Controllers
–
–
–
–
–
–
–
–

viewDidLoad
viewWillLayoutSubviews
viewDidLayoutSubviews
viewWillAppear:
viewDidAppear:
viewWillDisappear:
viewDidDisappear:
willRotateToInterfaceOrientation:duration:
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)
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é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.
XCode
L'environnement de développement Apple.
XCode > Interface Builder
Composition des storyboards (views)
Transitions entre les écrans (segues)
Liens avec le code source (outlets, actions)
XCode > Instruments
Performance, Fuite mémoire
XCode > Organizer
Gestion des projets
Gestion des devices
Gestion des repository Git
Gestion de la documentation
Gestion des archives (de la distribution des apps)
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.
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
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 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
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 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)
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.
raywenderlich.com
Nombreux tutoriels.
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, ...)
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
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 (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, ...)
Merci.

Más contenido relacionado

Destacado

Campagne TesterTout pour Uber
Campagne TesterTout pour UberCampagne TesterTout pour Uber
Campagne TesterTout pour UberTesterTout.com
 
Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)
Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)
Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)Mehdi Reghai
 
Exposé sur supply chain management
Exposé sur supply chain managementExposé sur supply chain management
Exposé sur supply chain managementyouness jabbar
 
Appli Iphone Uber
Appli Iphone UberAppli Iphone Uber
Appli Iphone UberJacques Shu
 
Operating Systems 1 (4/12) - Architectures (Windows)
Operating Systems 1 (4/12) - Architectures (Windows)Operating Systems 1 (4/12) - Architectures (Windows)
Operating Systems 1 (4/12) - Architectures (Windows)Peter Tröger
 
Alibaba le géant du e-commerce chinois
Alibaba le géant du e-commerce chinoisAlibaba le géant du e-commerce chinois
Alibaba le géant du e-commerce chinoisMbark Cherguia
 
Made in China - #1 : Alibaba
Made in China - #1 : AlibabaMade in China - #1 : Alibaba
Made in China - #1 : AlibabaFrenchWeb.fr
 
Operating system windows XP
Operating system windows XPOperating system windows XP
Operating system windows XPRohan Bhatkar
 
Jack Ma Presentation
Jack Ma PresentationJack Ma Presentation
Jack Ma Presentationmberran
 
Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...
Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...
Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...Stéphane Schultz
 
Features of windows operating system
Features of windows operating systemFeatures of windows operating system
Features of windows operating systemMohammad Alig
 
PPT on Microsoft Corporation
PPT on Microsoft CorporationPPT on Microsoft Corporation
PPT on Microsoft CorporationVijaykumar Nishad
 
Mes vacances de rêves
Mes vacances de rêvesMes vacances de rêves
Mes vacances de rêvesriadewilde
 

Destacado (20)

Campagne TesterTout pour Uber
Campagne TesterTout pour UberCampagne TesterTout pour Uber
Campagne TesterTout pour Uber
 
le tourisme aux Maldives
le tourisme aux Maldives le tourisme aux Maldives
le tourisme aux Maldives
 
Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)
Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)
Japon - Aspects et rayonnement culturels (ENSA le 15-05-2010)
 
Exposé sur supply chain management
Exposé sur supply chain managementExposé sur supply chain management
Exposé sur supply chain management
 
Appli Iphone Uber
Appli Iphone UberAppli Iphone Uber
Appli Iphone Uber
 
Operating Systems 1 (4/12) - Architectures (Windows)
Operating Systems 1 (4/12) - Architectures (Windows)Operating Systems 1 (4/12) - Architectures (Windows)
Operating Systems 1 (4/12) - Architectures (Windows)
 
Alibaba le géant du e-commerce chinois
Alibaba le géant du e-commerce chinoisAlibaba le géant du e-commerce chinois
Alibaba le géant du e-commerce chinois
 
Über - Stratégie Digitale
Über - Stratégie Digitale Über - Stratégie Digitale
Über - Stratégie Digitale
 
Made in China - #1 : Alibaba
Made in China - #1 : AlibabaMade in China - #1 : Alibaba
Made in China - #1 : Alibaba
 
Uber Sociologie du Consommateur
Uber Sociologie du ConsommateurUber Sociologie du Consommateur
Uber Sociologie du Consommateur
 
Jeff Bezos
Jeff BezosJeff Bezos
Jeff Bezos
 
Mobile operating systems
Mobile operating systemsMobile operating systems
Mobile operating systems
 
Jack ma
Jack maJack ma
Jack ma
 
Operating system windows XP
Operating system windows XPOperating system windows XP
Operating system windows XP
 
Jack Ma Presentation
Jack Ma PresentationJack Ma Presentation
Jack Ma Presentation
 
Marketing des services
Marketing des servicesMarketing des services
Marketing des services
 
Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...
Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...
Transportez-vous les uns les autres : découvrez les clés du succès de Blablac...
 
Features of windows operating system
Features of windows operating systemFeatures of windows operating system
Features of windows operating system
 
PPT on Microsoft Corporation
PPT on Microsoft CorporationPPT on Microsoft Corporation
PPT on Microsoft Corporation
 
Mes vacances de rêves
Mes vacances de rêvesMes vacances de rêves
Mes vacances de rêves
 

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

LOGIC INSTRUMENT Présentation Français - Jan. 2014
LOGIC INSTRUMENT Présentation Français - Jan. 2014LOGIC INSTRUMENT Présentation Français - Jan. 2014
LOGIC INSTRUMENT Présentation Français - Jan. 2014Daniel Schroeder
 
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)Stéphane Rouilly
 
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)Stéphane Rouilly
 
Smartphone : et l'informatique devint mobile...
Smartphone : et l'informatique devint mobile...Smartphone : et l'informatique devint mobile...
Smartphone : et l'informatique devint mobile...CARA_Lyon
 
Tk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android FrTk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android FrValtech
 
OpenPlug Elips Studio Flex Montpellier
OpenPlug Elips Studio Flex MontpellierOpenPlug Elips Studio Flex Montpellier
OpenPlug Elips Studio Flex MontpellierEmmanuel Niclot
 
LES MATERIELS ANDROID
LES MATERIELS ANDROIDLES MATERIELS ANDROID
LES MATERIELS ANDROIDTiyab K.
 
Presentation Android
Presentation AndroidPresentation Android
Presentation AndroidJean Collas
 
Android camp LOME with Archicamp 2012
Android camp LOME with Archicamp 2012Android camp LOME with Archicamp 2012
Android camp LOME with Archicamp 2012Tiyab K.
 
Introduction à Android - Mars 2012
Introduction à Android - Mars 2012Introduction à Android - Mars 2012
Introduction à Android - Mars 2012Aurélien Guillard
 
Les secrets du développement d'une application mobile
Les secrets du développement d'une application mobileLes secrets du développement d'une application mobile
Les secrets du développement d'une application mobileEutech SSII
 
1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy
1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy
1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - AlloyMeetup Mobile Montpellier
 
[FR] Ancienne présentation de PhoneGap
[FR] Ancienne présentation de PhoneGap[FR] Ancienne présentation de PhoneGap
[FR] Ancienne présentation de PhoneGapThomas Bassetto
 
"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
 
Web Mobile : quelles opportunités face aux apps ?
Web Mobile : quelles opportunités face aux apps ?Web Mobile : quelles opportunités face aux apps ?
Web Mobile : quelles opportunités face aux apps ?NiceToMeetYou
 
Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011jonasmonnier
 
Présentation smartphones
Présentation smartphonesPrésentation smartphones
Présentation smartphonesLo Teil
 

Similar a iPhone & iOS - Introduction au développement d'applications natives (20)

Programmation sous Android
Programmation sous AndroidProgrammation sous Android
Programmation sous Android
 
Intro Android
Intro AndroidIntro Android
Intro Android
 
LOGIC INSTRUMENT Présentation Français - Jan. 2014
LOGIC INSTRUMENT Présentation Français - Jan. 2014LOGIC INSTRUMENT Présentation Français - Jan. 2014
LOGIC INSTRUMENT Présentation Français - Jan. 2014
 
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
 
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
Cours mobiles du Mastère CPM 2011 (Telecom ParisTech/INA)
 
Smartphone : et l'informatique devint mobile...
Smartphone : et l'informatique devint mobile...Smartphone : et l'informatique devint mobile...
Smartphone : et l'informatique devint mobile...
 
Tk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android FrTk04 Iphone Vs Android Fr
Tk04 Iphone Vs Android Fr
 
OpenPlug Elips Studio Flex Montpellier
OpenPlug Elips Studio Flex MontpellierOpenPlug Elips Studio Flex Montpellier
OpenPlug Elips Studio Flex Montpellier
 
LES MATERIELS ANDROID
LES MATERIELS ANDROIDLES MATERIELS ANDROID
LES MATERIELS ANDROID
 
Presentation Android
Presentation AndroidPresentation Android
Presentation Android
 
Android camp LOME with Archicamp 2012
Android camp LOME with Archicamp 2012Android camp LOME with Archicamp 2012
Android camp LOME with Archicamp 2012
 
Introduction à Android - Mars 2012
Introduction à Android - Mars 2012Introduction à Android - Mars 2012
Introduction à Android - Mars 2012
 
Les secrets du développement d'une application mobile
Les secrets du développement d'une application mobileLes secrets du développement d'une application mobile
Les secrets du développement d'une application mobile
 
1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy
1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy
1er Meetup Mobile Montpellier - Présentation Appcelerator Titanium - Alloy
 
[FR] Ancienne présentation de PhoneGap
[FR] Ancienne présentation de PhoneGap[FR] Ancienne présentation de PhoneGap
[FR] Ancienne présentation de PhoneGap
 
"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
 
Web Mobile : quelles opportunités face aux apps ?
Web Mobile : quelles opportunités face aux apps ?Web Mobile : quelles opportunités face aux apps ?
Web Mobile : quelles opportunités face aux apps ?
 
Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011Retour d'expérience AdobeMC 2011
Retour d'expérience AdobeMC 2011
 
Présentation smartphones
Présentation smartphonesPrésentation smartphones
Présentation smartphones
 
Terminaux iOS
Terminaux iOSTerminaux iOS
Terminaux iOS
 

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

  • 1. iPhone & iOS Introduction au développement d'applications natives. http://www.slideshare.net/fabricedelhoste Fabrice Delhoste @spifd fabrice@delhoste.com Déc. 2012
  • 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).
  • 5. Evolution de la Téléphonie Mobile http://www.asymco.com/2012/11/14/google-vs-samsung/
  • 6. Tendance Fabricants Et les smartphones dans tout ça? http://www.asymco.com/2012/11/14/google-vs-samsung/
  • 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. Les smartphones sur 5 ans http://www.asymco.com/2012/11/14/google-vs-samsung/
  • 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. Part de marché des OS Android : près de 73% du marché iOS : environ 14% du marché Mais..........
  • 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-
  • 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
  • 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. 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. 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
  • 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. Une "app" pour qui? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  • 24. Une "app" dans quel domaine? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  • 25. Une "app" pour quel effort? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  • 26. Une "app" pour quel pays? http://www.visionmobile.com/blog/2012/11/which-apps-make-money/
  • 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. Environnement Logiciel et Matériel Les modèles et versions de l'iPhone et d'iOS
  • 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. 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. 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. 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. Objective C Le langage d'iOS et Mac OS X.
  • 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. 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. 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. Operators ++ Comme en C. == != -Cast: Vehicle* v = ...; < Car* c = ...; > v = (Car*) c; <= >= || && ! += -= *= /=
  • 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. Constantes communes Nil Pointeur vide "string" Type char* @"string" Type NSString YES or NO BOOL
  • 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. 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. 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. 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. Strong vs Weak ARC = Automatic Reference Counting @property (strong, nonatomic) NSString* name; @property (weak, nonatomic) NSString* name;
  • 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. 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. 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. 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. 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. 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. 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. @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. 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. 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. 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. 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. 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. 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
  • 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. Foundation - NSObject La classe racine de toute classe. NSObject (NS = NextSTEP) description copy mutableCopy ... Des méthodes d'introspection, d'archivage, etc...
  • 62. Foundation - NSString NSString Utilisé partout dans iOS NSMutableString Peu utilisé (string modifiable). NSString* maChaine = @"Hello world!";
  • 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Logging NSLog(@"The current date and time is: %@", [NSDate date]);
  • 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 !
  • 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. 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 ;-).
  • 79. UIView - Frame & Bounds CGFloat = un float CGPoint = (x, y) CGSize = (largeur, hauteur) CGRect = (x, y, largeur, hauteur)
  • 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. Evènements des View Controllers – – – – – – – – viewDidLoad viewWillLayoutSubviews viewDidLayoutSubviews viewWillAppear: viewDidAppear: viewWillDisappear: viewDidDisappear: willRotateToInterfaceOrientation:duration:
  • 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)
  • 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.
  • 89. XCode > Interface Builder Composition des storyboards (views) Transitions entre les écrans (segues) Liens avec le code source (outlets, actions)
  • 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. 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. 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. App Store La place de marché des applications.
  • 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. Visibilité des Apps Ref: http://blog.gaborcselle.com/2012/10/the-biggest-problem-in-app-discovery.html
  • 98. Quelle versions d'iOS? Sur iOS, les utilisateurs migrent rapidement.
  • 99. iOS 6 - Migration http://insights.chitika.com/2012/ios-6-adoption-one-month/
  • 100. Etat du parc (Amérique du nord) http://insights.chitika.com/2012/ios-6-adoption-one-month/
  • 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. 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.
  • 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. 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
  • 109. TestFlight, Bugsense, ... Environnement de tests, de distribution beta, de collecte des usages...
  • 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. Merci.