formacion en movilidad: conceptos de desarrollo en ios (i)

59
CCRTVi Formación en movilidad Conceptos de desarrollo en iOS 1

Upload: mobivery

Post on 15-May-2015

136 views

Category:

Technology


0 download

DESCRIPTION

En esta primera sesión formativa, impartida por Sergi Hernando, CTO de Mobivery, se trataron los siguientes conceptos: Lenguaje (propiedades y protocolos de Objective-C) y Herramientas (Xcode)

TRANSCRIPT

Page 1: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

CCRTViFormación en movilidad

Conceptos de desarrollo en iOS

1

Page 2: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

LenguajeHerramientas

HerramientasDel simulador al dispositivo

2

Page 3: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

iOS 6.1Xcode 4.6

3

Page 4: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

@interface Video : NSObject

- (void)play;- (void)pause;

@end

@implementation Video

- (void)play {}

@end

4

Page 5: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

@interface Video : NSObject

- (void)play;- (void)pause;

@end

@implementation Video

- (void)play {}

@end

Incomplete implementation

5

Page 6: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

[myVideo play];[myVideo pause];

6

Page 7: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Video pause]: unrecognized selector sent to instance 0x8334620'

[myVideo play];[myVideo pause]; Thread 1: signal SIGABRT

7

Page 8: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Video pause]: unrecognized selector sent to instance 0x8334620'

[myVideo play];[myVideo pause]; Thread 1: signal SIGABRT

“un objeto puede enviar un mensaje sin temor a producir errores en tiempo de ejecución”

Wikipedia

8

Page 9: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[Video pause]: unrecognized selector sent to instance 0x8334620'

[myVideo play];[myVideo pause]; Thread 1: signal SIGABRT

“un objeto puede enviar un mensaje sin temor a producir errores en tiempo de ejecución”

No en la runtime library de iOS

9

Page 10: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-C

10

Page 11: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CInitializers

Video *myVideo = [[Video alloc] init];// Es equivalente a:Video *myVideo = [Video new];

11

Page 12: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CInitializers

Video *myVideo = [[Video alloc] init];// Es equivalente a:Video *myVideo = [Video new];

Video *myVideo = [[Video alloc] initWithURL:theURL];

12

Page 13: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CInitializers

Video *myVideo = [[Video alloc] init];// Es equivalente a:Video *myVideo = [Video new];

NSString *theURL = @"http://youtu.be/THERgYM8gBM";Video *myVideo = [[Video alloc] initWithURL:theURL];

13

Page 14: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CInitializers

Video *myVideo = [[Video alloc] init];// Es equivalente a:Video *myVideo = [Video new];

NSString *theURL = @"http://youtu.be/THERgYM8gBM";Video *myVideo = [[Video alloc] initWithURL:theURL];

- (id)initWithURL:(NSString *)url {! self = [super init];! if(self) {! ! _url = url;! }! return self;}

14

Page 15: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Declaración

@interface Video : NSObject

@property NSString *title;@property NSString *url;

@end

15

Page 16: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Modificadores

@interface Video : NSObject

@property NSString *title;@property (readonly) NSString *url;

- (void)assignURL:(NSString *)url;

@end

16

Page 17: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Modificadores

#import "Video.h"

@implementation Video

- (void)assignURL:(NSString *)url { // validaciones...! self.url = url;}

@end

17

Page 18: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Modificadores

#import "Video.h"

@implementation Video

- (void)assignURL:(NSString *)url { // validaciones...! self.url = url;}

@end

Assignment to readonly property

18

Page 19: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Extensiones

#import "Video.h"

@interface Video ()

@property (readwrite) NSString *url;

@end

@implementation Video

- (void)assignURL:(NSString *)url { // validaciones...! self.url = url;}

@end

19

Page 20: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Modificadores cool

@interface Video : NSObject

@property (readonly) BOOL ready;

@end

if([myVideo ready]) {}

20

Page 21: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Modificadores cool

@interface Video : NSObject

@property (readonly, getter = isReady) BOOL ready;

@end

if([myVideo isReady]) {}

21

Page 22: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

Atomicidad

@interface Video : NSObject

@property (nonatomic) NSObject *whatever;

@end

22

Page 23: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

strong & weak references

23

Page 24: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

strong & weak references

24

Page 25: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProperties

strong & weak references

25

Page 26: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProtocols

@protocol Playable

- (void)play;- (void)pause;

@optional

- (void)fastForward:(int)times;

@end

26

Page 27: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProtocols

@interface Video : NSObject <Playable>@end

@implementation Video

#pragma mark - Playable

- (void)play {}

- (void)pause {}

- (void)fastForward:(int)times {}

@end

27

Page 28: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProtocols

@interface PhotoSequence : NSObject <Playable>@end

@implementation PhotoSequence

#pragma mark - Playable

- (void)play {}

- (void)pause {}

@end

28

Page 29: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CProtocols

@interface PhotoSequence : NSObject <Playable>@end

@implementation PhotoSequence

#pragma mark - Playable

- (void)play {}

- (void)pause {}

@end

29

Page 30: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Objective-CBlocks

Tareas asíncronas

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queue, ^{ // Long running task});

30

Page 31: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queue, ^{ // Long running task});

Objective-CBlocks

Tareas asíncronas

31

Page 32: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);

dispatch_async(queue, ^{ // Long running task});

Objective-CBlocks

Tareas asíncronas

32

Page 33: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Xcode

33

Page 34: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodeCommand Line Tools

Instalación

34

Page 35: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

RubyRuby Version Manager

Instalación$  export  LANG=en_US.UTF-­‐8

$  curl  -­‐L  https://get.rvm.io  |  bash  -­‐s  stable  -­‐-­‐autolibs=3  -­‐-­‐ruby

$  rvm  install  1.9.3

35

Page 36: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Coffee Break!

36

Page 37: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

RubyRuby Version Manager

Instalación$  rvm  use  1.9.3-­‐p392

$  ruby  -­‐vruby  1.9.3p392  (2013-­‐02-­‐22  revision  39386)  [x86_64-­‐darwin12.3.0]

37

Page 38: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Ruby + XcodeCocoaPods

Instalación$  gem  install  cocoapods

$  pod  setup...Setup  completed  (read-­‐only  access)

$  echo  'platform  :ios'  >  Podfile

$  pod  install...[!]  From  now  on  use  `Workshop.xcworkspace`.

38

Page 39: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Xcode

⇧⌘N

Master-Detail Application

39

Page 40: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Xcode

Use Storyboards, Core Data, ARCand include Unit Tests

40

Page 41: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Xcode

Create local git repository for this project

try.github.com41

Page 42: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Xcode

42

Page 43: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodeSchemes & Targets

“An scheme defines a collection of targets to build, a configuration to use when building, and

a collection of tests to execute”

* Only one scheme can be active at a time

“A target specifies a product to build and contains the instructions for building the

product from a set of files in a project or workspace”

* A product can be an app or a static library

43

Page 44: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodeWorkspaces & Projects

“A workspace is a document that groups projects and other documents so you can

work on them together”* Workspaces provide implicit and explicit relationships among the

included projects and their targets

“A project is a repository for all the files, resources, and information required to build

one or more software products”

* Projects define default build settings for all their targets

44

Page 45: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodeRelación entre unidades de trabajo

Workspace

Project

Project

Target

Target

Target

Scheme

45

Page 46: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePrimera ejecución

⌘R

46

Page 47: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePrimera ejecución

App simulada

47

Page 48: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Firma del código

Code Signing Identity: Don’t Code Sign

48

Page 49: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

Request a Certificate From a Certificate Authority...

49

Page 50: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

Request is: Saved to disk50

Page 51: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

51

Page 52: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

52

Page 53: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

CER (certificado)+ CSR (clave privada)

P12 (PKCS#12)53

Page 54: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

CER (certificado)+ CSR (clave privada)

P12 (PKCS#12)54

Page 55: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

Certificado y clave privada

55

Page 56: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

File Format: Personal Information Exchange (.p12)

56

Page 57: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodePreparando para dispositivo

Certificado de desarrollo

57

Page 58: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

XcodeGit

58

Page 59: Formacion en movilidad: Conceptos de desarrollo en iOS (I)

Próxima sesión...

59