![Page 1: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/1.jpg)
CCRTViFormación en movilidad
Conceptos de desarrollo en iOS
1
![Page 2: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/2.jpg)
LenguajeHerramientas
HerramientasDel simulador al dispositivo
2
![Page 3: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/3.jpg)
iOS 6.1Xcode 4.6
3
![Page 4: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/4.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/5.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/6.jpg)
Objective-C
[myVideo play];[myVideo pause];
6
![Page 7: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/7.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/8.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/9.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/10.jpg)
Objective-C
10
![Page 11: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/11.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/12.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/13.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/14.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/15.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/16.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/17.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/18.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/19.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/20.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/21.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/22.jpg)
Objective-CProperties
Atomicidad
@interface Video : NSObject
@property (nonatomic) NSObject *whatever;
@end
22
![Page 23: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/23.jpg)
Objective-CProperties
strong & weak references
23
![Page 24: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/24.jpg)
Objective-CProperties
strong & weak references
24
![Page 25: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/25.jpg)
Objective-CProperties
strong & weak references
25
![Page 26: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/26.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/27.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/28.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/29.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/30.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/31.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/32.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/33.jpg)
Xcode
33
![Page 34: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/34.jpg)
XcodeCommand Line Tools
Instalación
34
![Page 35: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/35.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/36.jpg)
Coffee Break!
36
![Page 37: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/37.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/38.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/39.jpg)
Xcode
⇧⌘N
Master-Detail Application
39
![Page 40: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/40.jpg)
Xcode
Use Storyboards, Core Data, ARCand include Unit Tests
40
![Page 41: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/41.jpg)
Xcode
Create local git repository for this project
try.github.com41
![Page 42: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/42.jpg)
Xcode
42
![Page 43: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/43.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/44.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/45.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/46.jpg)
XcodePrimera ejecución
⌘R
46
![Page 47: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/47.jpg)
XcodePrimera ejecución
App simulada
47
![Page 48: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/48.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/49.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/50.jpg)
XcodePreparando para dispositivo
Certificado de desarrollo
Request is: Saved to disk50
![Page 51: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/51.jpg)
XcodePreparando para dispositivo
Certificado de desarrollo
51
![Page 52: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/52.jpg)
XcodePreparando para dispositivo
Certificado de desarrollo
52
![Page 53: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/53.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/54.jpg)
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)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/55.jpg)
XcodePreparando para dispositivo
Certificado de desarrollo
Certificado y clave privada
55
![Page 56: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/56.jpg)
XcodePreparando para dispositivo
Certificado de desarrollo
File Format: Personal Information Exchange (.p12)
56
![Page 57: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/57.jpg)
XcodePreparando para dispositivo
Certificado de desarrollo
57
![Page 58: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/58.jpg)
XcodeGit
58
![Page 59: Formacion en movilidad: Conceptos de desarrollo en iOS (I)](https://reader033.vdocuments.us/reader033/viewer/2022052823/5555bfffd8b42afe5d8b5264/html5/thumbnails/59.jpg)
Próxima sesión...
59