Post on 20-Jun-2015
description
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"