Upload
laurent-meurisse
View
1.129
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Après le succès de la première séance, je présente avec Mélanie Bessagnet (@mbessagnet) pour la deuxième fois la session "Introduction au développement iOS" organisée par iConcept à Toulouse et ekito.La présentation permettra en 3 heures d'aborder de nombreux thèmes, aussi bien pratiques que techniques sur le développement d'application iOS (iPhone et iPad). Elle est destinée à la fois aux néophytes, mais aussi aux développeurs (java, web, php) ... car une séance de 45 minutes sera du code pure (et donc du pure bonheur ;).Voici le programme :Succès d'IOSiOSl'excellence ErgonomiqueApp Store (en quoi consiste la publication sur l'app store ? nous expliquerons aussi en détail les différentes licences développeurs)DévelopperConcevoir (avec Story Boarding)Profiles et CertificatsBeta TestingMDM (nous expliquerons comment est géré une flotte de terminaux (iPhone, iPad) gràce au Mobile Device Management)CoderL'environnement de développement XCodeObjective-C en 15 minutesLes nouveautés du SDK iOS 5 (ARC, iCloud, Apparearence, ...)Coding (Pratique)il s'agit de coder une première (petite) application. Le code de l'application sera disponible en début de séance.
Citation preview
2
3
Laurent Meurisse•Conception et la validation d’une application iPhone pour une grande entreprise•Dev d’une application trafficWave•Coaching agile (entreprise & mobile)
twitter @laurentmeurisse
Mélanie BessagnetConception et développement d’applications iPhone ou iPad.
Smartsy, FidelPass, L’Oréal.twitter @mbessagnet
ekito /offre mobilité
★ Accompagnement dans toutes les phases des projets
➡ Définition de stratégie et spécifications
➡ Ergonomie & design
➡ Architecture & développement
➡ Distribution
★ Multi plateforme
➡ iOS (iPhone & iPad), Android, Windows Phone, web mobile
★ Intégration dans l’entreprise
➡ Sécurité, gestion de flotte, intégration SI
4
ekito /Projets d’entreprise
★ Application iPad pour un grand acteur de l’aéronautique
➡ Consultation de documents marketing pour les visiteurs de salons
➡ Conseils, conception & développement
★ Application iPad pour un opérateur téléphonique
➡ Le management avait besoin d’un « dashboard » pour consulter l’état du réseau avec +80.000 antennes
➡Conseils, conception, ergonomie/design & développement
5
ekito /Projets grand public
★ « Smartsy » (iPhone, iPad & Android)➡Applications réalité augmentée pour
consulter du contenu multimédia en accompagnement de support physique
➡ Reconnaissance d’images, site web, API
➡Distribution dans l’App Store d’Apple et le Market de Google
★ « Fidelpass » (iPhone)
➡Solution de carte de fidélité virtuelle pour smartphone
➡Mode déconnecté, génération de codes
6
Partage de la connaissance
7
Toulouse 8 mars 2012 – ARC et Storyboards
➡ introduction
8
➡ licence développeur
➡ un iPhone ou iPad
➡ un Mac
➡ La dernière version du SDK
9
que me faut t'il pour démarrer ?
➡ être habile en design IHM
➡ avoir des bonnes idées
➡ avoir quelques soirées de disponibles
➡ constituer une communauté d’early adopters
10
qu'est ce que je dois savoir faire ?
partie 1
11
➡ iOS
➡ excellence ergonomique
➡App Store
succès d’iOS
➡ iOS
12
partie 1
13
★ Système d’exploitation de l’iPhone/iPod Touch/iPad
★ Basé sur Mac OS X
★ Offre de nombreuses possibilités d’applications
★ Nécessite aucune notion préalable du développement Mac OS X
14
★ Architecture iOS
15
OSX kernelpower
management
Core OS
réseau
Collection Core Location
Core Services
Carnet d'adresse
threading file system preference
SQLite
Core Audio JPEG/PNG...
Media layer
Video Quartz
Multi-touch Webkit
Cocoa Touch
accéléomètre
localisationappareil photo
baseBand bootLoader firmware
16
ça à l'air très compliqué !!!
➡ excellence ergonomique
17
partie 1
➡ le doigt est roi
18
le doigt est roi
★ iOS est déployé sur des plateformes tactiles.
➡ De nombreuses possibilités de gestes.
➡ Une application trop complexe n’est pas utilisable
➡ L’ergonomie doit être l’une des préoccupations principales.
19
le doigt est roi
★ L’iOS est une rupture par rapport aux modèles ergonomiques traditionnels
20
➡ patterns utilisateur
21
★ Qu’est ce qu’un pattern utilisateur ? ➡ ex. : Possibilité de naviguer dans une
structure hiérarchique, en revenant au départ facilement
➡ ex. : possibilité de naviguer entre différentes partie sans perdre le focus
22
➡ les principaux éléments
23
Navigation par onglet
24
Les listes
25
La navigation entre vues
26
➡ La règle des 44 pixels
28
La règle des 44 pixels
29
➡ la gestuelle
30
31
➡ Native ou WebApp ?
32
★ Application native
➡ Application conçue spécifiquement pour une plateforme en utilisant le SDK propre à celle ci.
★ Web app
➡ Application réalisée via un site Web optimisé pour mobile
33
WebApp
34
Quels sont les avantages ?
➡ Indépendance à Apple.
➡ Indépendance à la plateforme.
➡Mise à jour facilitée.
➡Coût de développement.
➡Transaction e-commerce
WebApp
35
➡Moins de visibilité.
➡Difficile à monnayer.
➡Dépendance à la connectivité.
➡ Expérience utilisateur.
➡Consommation des ressources.
Quels sont les inconvéniants ?
iOS Human interface Guideline
http://developer.apple.com/library/IOS/documentation/UserExperience/Conceptual/MobileHIG/MobileHIG.pdf
36
Quelques principes de base
➡ Minimiser la quantité d’information.
➡ Respecter la fluidité de l’appareil.
➡ Ne pas offrir trop de réglages à l’utilisateur.
➡ Demander de sauvegarder seulement quand c’est nécessaire
➡ Eviter les écrans «modals».
➡ Démarrer rapidement
★ Toujours faire au plus simple !37
➡ Respecter les gestes de bases.
➡ utiliser des gestes compliqués comme «raccourcis», mais en permettant d’effectuer l’action autrement.
➡ sur iPad, possibilité d’utiliser plusieurs doigts
➡ en général éviter de définir des nouveaux gestes
38
➡ Programme, Certificat, Profile
39
partie 1
40
iOS Programmes
★ iOS developer program (99$)• 100 devices (dev, tests)
➡ individuelle• nom de la personne sur l’AppStore
• un seul développeur
➡Company• nom de l’entreprise (justification nécessaire)
• nombre illimité de développeurs
• 3 rôles (agent, admin, member)
➡ attention on ne peut pas basculer d’une option à l’autre
41
iOS Programmes
★ iOS enterprise program (299 $)➡ inHouse deployment
➡Mobile Device Management• gestion de la flote des devices iOS
➡ impossibilité de déployer sur l’AppStore
42
Certificats
★ Certificats➡Certificat développeur
• unique pour chaque développeur
• lié à une machine
➡Certificat de distribution• un seul par programme
43
Profiles
★ Profile de développement➡ lié à l’appli (AppId)
➡ lié à un certif de dev (pour chaque dév)
➡ lié aux devices
➡ un seul par développeur
★ Profile de distribution
➡ lié à l’appli
➡ lié à un certif de distribution
➡deux modes de distribution• app store
• adhoc
• entreprise 44
➡ publication
45
AppStore
➡ Il y a t’il de la place par rapport à mon application?
➡ quel prix pour les applications concurrentes ?
➡ Version gratuite / Version Payante
➡ Baisse de prix d’application (ou gratuite) .. 2h à 4h
➡ le nombre de téléchargement influes sur le classement
46
sur l’AppStore
★ Pour publier son application, trois étapes :➡ Rédaction des détails de l’application.
➡Upload de l’exécutable.
➡Validation par Apple.
➡ La période de validation passe par un certain nombre d’états, variables suivant les cas.
★ Si l’application n’est pas validée, le développeur reçoit automatiquement un e-mail d’explications.
47
★ De nombreuses règles sont à respecter pour qu’une application soit validée par Apple. En voici les plus courantes :
➡ Aucun crash.
➡ Pas de fuite mémoire.
➡ Description conforme à l’application.
➡ Révéler toute fonctionnalité cachée à la validation.
➡ Respecter les droits d’auteur.
➡ Uniquement utiliser les classes documentées d’Apple.
➡ Notifier les changements d’état du réseau.
➡ Apple Human Interface Guidelines.
48
★ Attention, respecter les Guideline Apple
➡ beta testing
49
Tester
★ Audience / Logging➡ Flurry
➡TestFlyApp• Session
• Questions in-App
• Crash reports
• Checkpoints
• Remote logging
• in-App updates
50
pour tester
★ Autre solution pour distribuer une application iOS, la distribution Ad Hoc.
➡ Échelle réduite (maximum 100 appareils).
➡ Aucune validation par Apple.
➡ Inscription à l’iOS Developer Program également obligatoire.
51
➡ MDM
52
53
54
55
56
➡ iTunes Connect
57
58
partie 2
59
➡Concevoir
➡ L’environnementde developpement
➡ Bases de l’objective-C
➡ Les nouveautes d’iOS 5
développer
➡ concevoir
60
partie 2
61
je vais devoir tailler mon crayon !!
h,p://iphonemockup.lkmc.ch
62
Quelques Mockup
★ balsamiq
★ omniGraffle
★ Adobe Illustrator
★ le post it iphone
63
➡ développement agile
64
Développements Agiles
➡ deux tendances à connaitre
• lean startup
• scrum
65
lean startup
66
Développements Agiles
➡ ne pas surdimentioner la richesse de l’application (priorisation par la valeur), faire des user stories
➡ faire des livraisons et des tests souvent
➡ si on doit s’interfacer : bien définir ! (prévoir un niveau d’information minimal)
67
68
USERSTORY
USERSTORY
scrum
69
J'enregistre une réservation (carte d'embarquement)
Je consulte l'actualité d'un vol AF
Je me connecte via le n° FlyingBlue
Je consulte la liste de mes réservations
Je consulte le détail d'une réservation
Je consulte les passagers d'une réservation
70
USERSTORY
quelle est
sa valeur
métier?
pour quel
effort à
fournir?
13
89
71
13 1448 233
34 23355 5589 144
144 89
ordr
e de
dev
Je consulte le détail d'une réservation
J'enregistre une réservation (carte d'embarquement)
Je consulte la liste de mes réservations
Je me connecte via le n° FlyingBlue
Je consulte l'actualité d'un vol AF
Je consulte les passagers d'une réservation
72
RELEASE 1 RELEASE 2
SP
RIN
T 1
SP
RIN
T 2
SP
RIN
T 3
SP
RIN
T 4
SP
RIN
T 5
SP
RIN
T 6
PRODPROD
TESTSTESTS
TESTS TESTS
DE
MO
SP
RIN
T 1
DE
MO
SP
RIN
T 2
DE
MO
SP
RIN
T 3
TESTS
DE
MO
SP
RIN
T 4
DE
MO
SP
RIN
T 5
➡ base de l’Objective C
73
partie 2
➡ écrire une classe, une méthode, un protocol
74
écrire une classe
75
➡ implémentation➡ interface
#import <Foundation/Foundation.h>
@interface Voiture : NSObject { //déclaration des variables NSString *immat; NSInteger *gear; NSInteger *speed; }-(int)multiply:(int)a to:(int)b ;-(int)square:(int)a ;
//déclaration des méthodes@end
#import "Voiture.h"
@implementation Voiture
// implémentation des méthodes
@end
écrire une classe
76
écrire une méthode
77
-(int)multiply:(int)a to:(int)b { return a*b;}
-(int)square:(int)a { return [self multiply:a to:a];}
➡ [object doSomething]; au lieu de object.doSomething();
écrire un protocol
78
#import <Foundation/Foundation.h>
@protocol Vehicule <NSObject>
@optional
-(void)klaxonner;-(void)baisserVitre;-(void)leverVitre;
@required
-(void) demarrer ;-(void) arreter;
@end
réaliser un protocol
79
#import <Foundation/Foundation.h>#include "Vehicule.h"
@interface Voiture : NSObject <Vehicule> { //déclaration des variables NSString *immat; NSInteger *gear; NSInteger *speed; }-(int)multiply:(int)a to:(int)b ;-(int)square:(int)a ;-(void) demarrer ;
//déclaration des méthodes@end
#import "Voiture.h"
@implementation Voiture
// implémentation des méthodes
-(int)multiply:(int)a to:(int)b { return a*b;}
-(int)square:(int)a { return [self multiply:a to:a];}
-(void) demarrer { NSLog(@"Vrooum");}
-(void) arreter { NSLog(@"...");}
@end
➡ Cocoa Fondation
80
Cocoa Fondation
➡ Framework de base pour le développement Mac OS X et iOS.
➡ Importation dans un projet :
➡ (Par défaut dans un nouveau projet Xcode)
81
#import <Foundation/Foundation.h>
Cocoa Foundation
★ Objets de base :
➡ NSString : Chaîne de caractères.
➡ NSArray : Tableau non modifiable.
➡ NSDictionnary : Structure fixe d’objets référencés par une clé unique.
➡ Mot clé Mutable : Indique si une instance de classe peut être modifiée après création.
➡Exemple : NSMutableArray et NSMutableDictionnary.
82
➡ gestion de la mémoire
83
★ Destruction d’un objet :➡ L’objet créé peut être détruit de deux
façons différentes.
➡ Autolibération : La libération de la mémoire allouée est gérée par le système. (autorealease)
➡ Libération : la libération est laissée aux soins de l’utilisateur. (release).
84
Allocation, destruction, autolibération★ Par défaut, l’utilisateur doit s’occuper de la
libération des objets qu’il alloue :
★ Des fois, il est indispensable de laisser le système s’en occuper :
➡ retain, release et autorelease sont des méthodes de NSObject
★85
-(void)direBonjour{ NSString *maPhrase = [[NSString alloc] initWithString:@"bonjour"]; NSLog(@"%@",maPhrase);! [maPhrase release];}
-(NSString *)creerBonjour{! NSString *maPhrase = [[[NSString alloc] initWithString:@"bonjour"] autorelease];! return maPhrase;}
Variable d’instance
★ Prototypage des variables d’instance :➡ Ajoute une couche d’abstraction pour la
gestion de la mémoire.
➡ Réduit le nombre de lignes de code.
➡ Garantie l'intégrité des données.
★ Dans l’interface :
★ Dans l’implémentation :
86
@property (nonatomic, retain) Moteur *moteur;
@synthesize moteur;
➡retain;
➡assign :
retain, assign
87
★ La règle du comptage par référence est la suivante :
➡ On incrémente le compteur lorsque l’on fait appel aux méthodes +alloc, -retain ou -copy de l’objet.
➡ On décrémente le compteur lorsque l’on fait appel à la méthode - release de l’objet.
➡ Lorsque le compteur atteint 0, l’objet et donc son espace mémoire alloué sont libérés automatiquement.
88
➡ UIKit
89
UIKit
➡ Framework supplémentaire pour le développement iOS. Ajoute les fonctions nécessaires pour l’interaction tactile.
➡ Importation dans un projet :
➡ (Par défaut dans un nouveau projet Xcode)
90
#import <UIKit/UIKit.h>
91
UIButton
➡ Connections Synchrone et Asynchrone
92
★ Requête synchrone➡ application en attente du résultat
➡ application non réactive, figée
urlString = [NSString stringWithFormat:@"http://webaddress/trafficservlet?sendTagWave=1&id=%@&posLo=%@&posLa=%@&version=1&course=%@&idSession=%@", ! ! ! ! [userId stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],! ! ! ! [textLongitude stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],! ! ! ! [textLatitude stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding],! ! ! ! ! ! ! ! [textCourse stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]! ,! ! ! ! [textIdSession stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]! ! ! ! ];!! NSString *locationString = [NSString stringWithContentsOfURL:[NSURL URLWithString:urlString]];
93
★ Requête asynchrone
- (void)viewDidLoad {[super viewDidLoad];
! // Effectuer la requête dans un autre thread ! [NSThread detachNewThreadSelector:@selector (chargerXML) toTarget:self withObject:nil]; }- (void)chargerXML { ! NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; ! // Faire la requête ! [self effectuerRequete]; ! // Notifier le thread principal que l’on a fini ! [self performSelectorOnMainThread:@selector (chargementFini) withObject:nil waitUntilDone:NO]; ! [pool release]; }
94
➡ notifications Push
95
notification Push
➡ Il permet d’afficher des badges, alertes et sons sans que l’application ne tourne
➡ Il ne nécessite pas de grosses infrastructures serveur
➡ Il préserve la durée de vie de la batterie (par rapport aux connections TCP/IP)
96
➡ Cartographie et géolocalisation
97
★ Pouvoir localiser sa position et son orientation sur une carte nécessite l’utilisation de deux frameworks :➡ CoreLocation — permettant d'utiliser les
capacités de géolocalisation de l’iPhone
➡ MapKit — permettant d’insérer des cartes géographiques complètes dans une application.
98
CoreLocation
★ Framework pour gérer la localisation et l’orientation. ➡CLLocation
➡CLLocationManager
★ Pas d’interface utilisateur.
★ Utilise trois approches pour se situer.
➡GPS
➡Wifi
➡ Réseau Téléphonique
★ Plus la localisation se veut précise, plus elle est coûteuse en énergie.
99
CLLocationManagerDelegate
★ // Répond aux changements de position - (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;
100
➡ pattern delegate
101
102
delegation
103
➡ développement serveur
104
exemple de plan d’architecture global
105
serveur BACKEND
cron
cache
parser
xml
rss
...
23
connecteur
eSite
14services
notification
push
json
5
➡ L’environnement de développement XCode
106
partie 2
107
Paramètres de compilaBon
Projet
108
➡ Nouveautés d’iOS 5
109
partie 2
Nouveautés iOS 5
★ ARC
★ Storyboards
★ UIKit Customization
★ iCloud
★ Twitter Integration
★ Nombreux changements dans les APIs
110
ARC (Automatic Reference Counting)
➡ARC s'occupe des libérations mémoire à la place du développeur, plus de gestion manuelle de la mémoire.
➡ Le code est allégé et la tâche du développeur est simplifié.
➡Avec ARC activé, le compilateur insère automatiquement les méthodes de retain, release et autorelease à la bonne place dans le code.
111
StoryBoards
112
UIKit Customization
➡ Pour sortir du lot, une application, en plus d'être fonctionnelle, doit avoir un design attrayant.
➡ La plupart des applications majeures de l'AppStore utilisent des éléments d'interfaces customisés.
➡ Avant la sortie d'iOS 5, la tâche n'était pas du tout aisée. Il fallait très souvent de nombreuses lignes de code pour changer l'apparence d'un élément standard.
➡ A présent, Apple a donné accès à de nouvelles méthodes qui facilitent ce travail.
113
partie 3
114
➡Hello World
pratique
code de l’appli
115
h,p://db.,/pbEhiProbasé sur le tutoriel officiel d'Apple "Your first iOS app"