"Introduction aux Developements iOS" in Three hours

Post on 20-Jun-2015

1.129 views 0 download

Tags:

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.

Transcript of "Introduction aux Developements iOS" in Three hours

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

➡ 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

PDF

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

...

27

h,p://p,rns.com/

➡ 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"