Upload
others
View
3
Download
0
Embed Size (px)
Citation preview
Développement iOSAlexandre Hamez - LAAS/OLC - 21/02/11
Matériels et logiciels nécessaires
• Xcode + iOS SDK‣ developer.apple.com‣ gratuit
•Mac Intel‣ moins gratuit
• iPhone, iPod touch ou iPad‣ un peu moins moins gratuit‣ simulateur avec Xcode
2
App Store
3
App Store
3
Distribution (1)
• Seulement les applications signées‣ droit d’entrée à payer
• App store‣ 30% du prix de vente‣ pas d’autres frais
• Ad-hoc (100 maximum)
• In-House
4
Distribution (2)
5
Programmes
6
Standard Entreprise Université Enregistré
Dev.
Test
Ad-hoc
App store
In-House
Coût
✓ ✓ ✓ ✓
✓ ✓ ✓
✓ ✓
✓
✓
99$ / an 299$ / an gratuit gratuit
Programmes
6
Standard Entreprise Université Enregistré
Dev.
Test
Ad-hoc
App store
In-House
Coût
✓ ✓ ✓ ✓
✓ ✓ ✓
✓ ✓
✓
✓
99$ / an 299$ / an gratuit gratuit
200 étudiants
GPL / Licences libres
• GPL incompatible avec la licence de l’App Store‣ GNU Go, VLC
•Open Source et App Store‣ clause 3.3.20
•Distribution des sources?‣ il faut toutefois payer pour déployer
7
Interdictions
• Télécharger du code
• Piloter automatiquement, gérer des flottes de véhicule ou autres
• Son et vidéo: limitations sur la consommation de bande-passante
• Roulette russe!
•∞
8
Pré-requis
9
Pré-requis
9
intmain(){ return 42;}
Pré-requis
9
intmain(){ return 42;}
Flux de travail
10
Flux de travail
10
Xcode
Flux de travail
10
Xcode
Interface Builder
Flux de travail
10
Xcode
iPhone SimulatorInterface Builder
Flux de travail
10
Xcode
iPhone SimulatorInterface Builder Instruments
Flux de travail
10
Xcode
iPhone SimulatorInterface Builder Instruments
iPhone
Flux de travail
10
Xcode
iPhone SimulatorInterface Builder Instruments
x86
iPhone
ARM
Matériel & capteurs
CPU RAM Gyro. Accel. GPS Boussole
iPhone 3GS
iPhone 4
iPad WIFI/3G
iPod touch
ARM Cortex A8 @600MHz
256 Mo ✕ ✓ ✓ ✓
ARM Cortex A8 @?
512 Mo ✓ ✓ ✓ ✓
ARM Cortex A8 @1GHz
256 Mo ✕ ✓ ✕ / ✓ ✓
ARM Cortex A8 @800MHz
256 Mo ✓ ✓ ✕ ✕
11
Frameworks
12
Cocoa Touch
Media
Core Services
Core OS
Frameworks
12
UIKit
MessageUI
AddresBookUI
EventKitUI
GameKit
iAd
MapKit
Cocoa Touch
Media
Core Services
Core OS
Frameworks
12
Assets
OpenGL ES
OpenAL
QuartzCore
Core Graphics
Core MIDI
Core Text
Media Player
Cocoa Touch
Media
Core Services
Core OS
Address Book
CFNetwork
Core Data
Core Telephony
Core Foundation
StoreKit
System Configuration
Core Location
Frameworks
12
Cocoa Touch
Media
Core Services
Core OS
Frameworks
12
Accelerate
External Accessory
Security
System
Cocoa Touch
Media
Core Services
Core OS
Achats “In App”
• Vendre du contenu digital
•Ne pas vendre des biens réels
•Débloquer des fonctionnalités
•Ne gère que les paiements
• Et toujours les 30%
• Attention au moment de l’enregistrement de l’identifiant de l’application!
13
“Multi-tâches”
• Vrai multi-tâches‣ Audio‣ Géo-localisation‣ VoIP
•Demander une grâce de temps raisonnable‣ finir une tâche en cours‣ sauvegarder
•Notifications
14
Notifications “Push”
15
Notifications “Push”
15
Notifications “Push”
15
Notifications “Push”• Trois types de notification‣ pastille, message, son
• Format JSON, taille maximale: 256 octets
• Centralisées
• Pas de garantie de livraison, file d’attente de taille un
• Vérifier régulièrement les appareils invalides
• Attention au moment de l’enregistrement de l’identifiant de l’application!
15
Objective-C 2.0• Langage objet
• Sur-ensemble strict du C
• Un objet racine NSObject
• Héritage simple
• Protocoles
• Faiblement typé
• void* = id
• Pointeur nul: nil
• Envoi de messages (pas d’invocation de méthodes)
• Runtime
• Pas d’espaces de nommage
16
Quelques facilités
• Garbage collector
• Énumération rapide (for … in)
• Génération des accesseurs (@property)
• Possibilité de rajouter dynamiquement des méthodes et attributs à une classe (catégories, extensions et références associatives)
17
Messages
18
Messages
•[rect display];
18
Messages
•[rect display];
•[rect setLength:42];
18
Messages
•[rect display];
•[rect setLength:42];
•[rect setLength:42 andWidth:24];
18
Messages
•[rect display];
•[rect setLength:42];
•[rect setLength:42 andWidth:24];
•setLength:andWidth:‣ nom de la méthode‣ “sélecteur”
18
Messages
•[rect display];
•[rect setLength:42];
•[rect setLength:42 andWidth:24];
•setLength:andWidth:‣ nom de la méthode‣ “sélecteur”
•[nil foo];‣ aucun effet
18
Classes - définition
19
@interface Foo : NSObject{ int bar;}
-(void)setBar : (int)x;-(int)bar;+(int)theBar;
@end
Classes - définition
19
@interface Foo : NSObject{ int bar;}
-(void)setBar : (int)x;-(int)bar;+(int)theBar;
@end
méthode d’instance
Classes - définition
19
@interface Foo : NSObject{ int bar;}
-(void)setBar : (int)x;-(int)bar;+(int)theBar;
@end
méthode d’instance
méthode de classe
Classes - implémentation
20
#import “Foo.h”
@implementation Foo
-(void)setBar : (int)x{ bar = x;}
-(int)bar{ return bar;}
+(int)theBar{return 42;
}
@end
Classes - implémentation
20
#import “Foo.h”
@implementation Foo
-(void)setBar : (int)x{ bar = x;}
-(int)bar{ return bar;}
+(int)theBar{return 42;
}
@end
gestion des inclusions multiples
#import “Foo.h”
@implementation Foo@synthesize bar;@end
Propriétés (1)
21
@interface Foo : NSObject{}
@property (readwrite) int bar;
@end
#import “Foo.h”
@implementation Foo@synthesize bar;@end
Propriétés (1)
21
@interface Foo : NSObject{}
@property (readwrite) int bar;
@end“copy”, “nonatomic”, etc.
#import “Foo.h”
@implementation Foo@synthesize bar;@end
Propriétés (1)
21
@interface Foo : NSObject{}
@property (readwrite) int bar;
@end
Propriétés (2)
22
[foo setBar:42]; foo.bar = 42;=
x = [foo bar]; x = foo.bar;=
Vie et mort d’une classe (1)
23
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
Vie et mort d’une classe (1)
23
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
allocation mémoire
Vie et mort d’une classe (1)
23
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
allocation mémoire
initialisation
Vie et mort d’une classe (1)
23
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
plus d’intérêt pour f
allocation mémoire
initialisation
Vie et mort d’une classe (2)
24
-(id) initWithValue : (int)x{ self = [super init]; if( self ) { value = x; } return self;}
-(id) init{ return [self initWithValue:17];}
-(void) dealloc{[super dealloc];
}
Gestion de la mémoire (1)
• Garbage collector pour MacOS X, pas iOS
• Comptage de référence manuel‣ retain, release‣ autorelease(éviter autant que possible)
• Suppression dès que refcount == 0
•Des conventions de nommage à respecter
• @property: code adéquat généré
25
Gestion de la mémoire (2)
26
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
Gestion de la mémoire (2)
26
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
1
Gestion de la mémoire (2)
26
- (void) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release];}
1
0
Gestion de la mémoire (3)
27
- (void) baz{ Foo* f = bar.f;
[f retain];
// do nasty stuff with f [f release];}
Gestion de la mémoire (3)
27
- (void) baz{ Foo* f = bar.f;
[f retain];
// do nasty stuff with f [f release];}
?
Gestion de la mémoire (3)
27
- (void) baz{ Foo* f = bar.f;
[f retain];
// do nasty stuff with f [f release];}
+1
?
Gestion de la mémoire (3)
27
- (void) baz{ Foo* f = bar.f;
[f retain];
// do nasty stuff with f [f release];}
+1
-1
?
- (Foo*) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f autorelease]; return f;}
- (Foo*) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release]; return f;}
Gestion de la mémoire (4)
28
- (Foo*) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f autorelease]; return f;}
- (Foo*) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f release]; return f;}
Gestion de la mémoire (4)
28
f est effacé!
- (Foo*) bar{ Foo* f = [[Foo alloc] init];
// do nasty stuff with f [f autorelease]; return f;}
Gestion de la mémoire (4)
28
Protocoles (1)
29
@protocol Plan9
@required-(Deads*)awakeDeads;
@optional-(BOOL)conquerEarthWith:(Deads*)deads;
@end
Protocoles (2)
30
#import “Plan9.h”#import “Alien.h”
@interface Invaders : Alien {}
@end
Délégation
31
• Utilisation très fréquente du design pattern “délégation”
• À l’aide des protocoles‣ [aManager setDelegate:self]
• Protocoles parfois implicites‣ APIs < MacOS X 10.5
Délégation
31
• Utilisation très fréquente du design pattern “délégation”
• À l’aide des protocoles‣ [aManager setDelegate:self]
• Protocoles parfois implicites‣ APIs < MacOS X 10.5
• Grand Central Dispatch‣ vue par tâches‣ gestion des threads au niveau de l’OS
• À l’ancienne‣ surcouche des threads POSIX
• Blocks‣ lambdas‣ extension C (proposée à la normalisation)
Parallélisme
32
• Grand Central Dispatch‣ vue par tâches‣ gestion des threads au niveau de l’OS
• À l’ancienne‣ surcouche des threads POSIX
• Blocks‣ lambdas‣ extension C (proposée à la normalisation)
#include
intmain(){ std::cout
• Grand Central Dispatch‣ vue par tâches‣ gestion des threads au niveau de l’OS
• À l’ancienne‣ surcouche des threads POSIX
• Blocks‣ lambdas‣ extension C (proposée à la normalisation)
#include
intmain(){ std::cout
“Hello, world!\n”
33
Géo-localisation (1)
34
Géo-localisation (2)
• Changements “significatifs”‣ à l’arrière-plan
• Localisation continue‣ au premier-plan‣ à l’arrière-plan
35
Autres langages
• GUI en Objective-C, appels à des bibliothèques‣ Python, Haskell, OCaml, Lua
• Cocoa complètement exporté‣ Lua
• Cross-compilation‣ armv[6|7]-apple-darwin
• Frameworks multi-plateforme‣ très souvent orientés jeux
36
En résumé
37
En résumé
• Payant
37
En résumé
• Payant
• Pas d’accès très bas niveau
37
En résumé
• Payant
• Pas d’accès très bas niveau
• Encadrement strict
37
En résumé
• Payant
• Pas d’accès très bas niveau
• Encadrement strict‣ déploiement fastidieux
37
En résumé
• Payant
• Pas d’accès très bas niveau
• Encadrement strict‣ déploiement fastidieux
•Mon avis
37
En résumé
• Payant
• Pas d’accès très bas niveau
• Encadrement strict‣ déploiement fastidieux
•Mon avis‣ (vraiment très) simple
37
En résumé
• Payant
• Pas d’accès très bas niveau
• Encadrement strict‣ déploiement fastidieux
•Mon avis‣ (vraiment très) simple‣ $, € et £
37
En résumé
• Payant
• Pas d’accès très bas niveau
• Encadrement strict‣ déploiement fastidieux
•Mon avis‣ (vraiment très) simple‣ $, € et £‣ peu adapté à la recherche
37
Lectures conseillées
• The Objective-C 2.0 Programming Language - Apple
• iPhone Programming - Joe Conway & AAron Hillegass
•Documentation Xcode
38