Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

A primeira app iOS (a gente não esquece)

1,325 views

Published on

Talk apresentando originalmente no evento #devinsantos

Published in: Technology
  • Be the first to comment

A primeira app iOS (a gente não esquece)

  1. 1. A primeira app iOS ninguém esquece
  2. 2. A primeira app iOS ninguém esquece
  3. 3. @sr_valeriano• Ricardo Valeriano• Developer iOS, Java, Ruby e JavaScript• Instrutor iOS, Java, Ruby e JavaScript• github.com/ricardovaleriano
  4. 4. Como?• Básico, mesmo, mesmo• Base para pesquisar depois• Alguns conceitos... básicos• Algum código nos slides =(• Algum código ao vivo =)
  5. 5. NeXT Computer
  6. 6. NeXT Computer• 1985 - fundada por Jobs
  7. 7. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release
  8. 8. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release• 1990 - NeXTstation
  9. 9. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release• 1990 - NeXTstation
  10. 10. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release• 1990 - NeXTstation• 1990 - NeXTcube
  11. 11. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release• 1990 - NeXTstation• 1990 - NeXTcube
  12. 12. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release• 1990 - NeXTstation• 1990 - NeXTcube• 1993 - NeXTStep (S.O.)
  13. 13. NeXT Computer• 1985 - fundada por Jobs• 1988 - 1º NeXTStep Release• 1990 - NeXTstation• 1990 - NeXTcube• 1993 - NeXTStep (S.O.)
  14. 14. NeXTSTEP - S.O. 1988
  15. 15. NeXTSTEP - S.O. 1988
  16. 16. Steve Jobs e NeXTSTEP• Unix-like :: BSD• Objective-C runtime• O.O. application layer• Dock• GUI
  17. 17. OpenStep “OpenStep was an object-oriented applicationprogramming interface (API) specification for an object-oriented operating system that used a non-NeXTSTEP operating system as its core, principally developed by NeXT with Sun Microsystems.”
  18. 18. iPod Touch
  19. 19. iPhone OS 2007
  20. 20. iOS - SDK e apps 2008
  21. 21. iPad (iOS) 2010
  22. 22. iOS 4 - Multitasking 2010
  23. 23. iOS 5 2011
  24. 24. iOS 5 2011
  25. 25. iOSCocoa TouchMedia LayerCore Services Core OS
  26. 26. iOSCocoa TouchMedia LayerCore Services Core OS
  27. 27. iOSSistema Operacional Cocoa Touch Media Layer Core Services Core OS
  28. 28. iOSSistema Operacional Cocoa Touch Media Layer Core Services Core OS
  29. 29. iOS MultitaskingGestureViewNotification ServiceSystemPush ControllersApple Recognizers Cocoa Touch
  30. 30. iOS Cocoa TouchMultitaskingApple Push Notification ServiceGesture RecognizersSystem View Controllers
  31. 31. iOS MultitaskingGestureViewNotification ServiceSystemPush ControllersApple Recognizers Cocoa Touch
  32. 32. iOSAir PlayVideoGraphic Media LayerAudio
  33. 33. iOS Media LayerGraphicAudioVideoAir Play
  34. 34. iOSAir PlayVideoGraphic Media LayerAudio
  35. 35. iOSSQLiteIn-App CoreARC PurchaseiCloud StorageServices
  36. 36. iOS Core ServicesiCloud StorageARCIn-App PurchaseSQLite
  37. 37. iOSSQLiteIn-App CoreARC PurchaseiCloud StorageServices
  38. 38. iOSCore Bluetooth network, memory)System FrameworkExternal Accessory FrameworkSecurity(thread, OS Core
  39. 39. iOS Core OSCore BluetoothExternal Accessory FrameworkSecurity FrameworkSystem (thread, network, memory)
  40. 40. iOSCore Bluetooth network, memory)System FrameworkExternal Accessory FrameworkSecurity(thread, OS Core
  41. 41. Xcode, a IDE (para mac)
  42. 42. Show me!
  43. 43. Objective-C• Bizarro?• Esquizóide?• Obstáculo?
  44. 44. Objective-C• Orientado a Objetos• Dinâmico• Gerenciamento de memória é contigo!• Square Brackets prá dar e vender
  45. 45. BRACE YOURSELVESIT’S A C EXTENSION
  46. 46. Coisas em C?NSLog(@"Vamo que vamo-lhes!");
  47. 47. Coisas em C? Funçãozinha marota.NSLog(@"Vamo que vamo-lhes!");
  48. 48. Coisas em C? Funçãozinha marota.NSLog(@"Vamo que vamo-lhes!");
  49. 49. Coisas em C? Funçãozinha marota.NSLog(@"Vamo que vamo-lhes!");
  50. 50. Coisas em C?NSLog(@"Vamo que vamo-lhes!");
  51. 51. Classes• Header File >> Declaração• Implementation File >> Implementação XD
  52. 52. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end
  53. 53. Diretivas (*.h) Disponibiliza recursos e tipos básicos (como a classe NSString)#import <Foundation/Foundation.h>@interface Contato : NSObject@end
  54. 54. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end
  55. 55. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end Permite definir uma nova classe
  56. 56. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end
  57. 57. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end Nome da nova classe
  58. 58. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end
  59. 59. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end Herança
  60. 60. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end
  61. 61. Diretivas (*.h)#import <Foundation/Foundation.h>@interface Contato : NSObject@end É isso!
  62. 62. Diretivas (*.m)#import "Contato.h"@implementation Contato@end
  63. 63. Diretivas (*.m)Disponibiliza a declaração da classe #import "Contato.h" @implementation Contato @end
  64. 64. Diretivas (*.m) Poderia importar outros arquivos se preciso#import "Contato.h"@implementation Contato@end
  65. 65. Diretivas (*.m)#import "Contato.h"@implementation Contato@end Objective C, meu amigo, agora vamos implementar a classe
  66. 66. Diretivas (*.m)#import "Contato.h"@implementation Contato@end E o nome dessa classe é Contato
  67. 67. Diretivas (*.m)#import "Contato.h"@implementation Contato@end E terminamos!
  68. 68. Show me!
  69. 69. Instanciando Objetos Contato allocMétodo de classe, para alocar memória e otras cositas más...
  70. 70. Instanciando Objetos . Contato alloc Invocação de método?
  71. 71. Instanciando Objetos X . Contato alloc
  72. 72. Instanciando Objetos X . Contato alloc
  73. 73. Instanciando Objetosto *contato = [ Contato alloc init]; Na verdade é assim que se invoca!
  74. 74. Instanciando Objetosto *contato = [[Contato alloc init]; Contato alloc] Agora está completo.
  75. 75. Instanciando Objetosto *contato = [[Contato alloc] init]; Retorna uma “promessa”, queremos o Objeto (do tipo Contato)
  76. 76. Instanciando Objetosto *contato = [[Contato alloc] init]; Nova invocação de método!
  77. 77. Instanciando Objetosto *contato = [[Contato alloc] init]; O retorno é um objeto do tipo Contato.
  78. 78. Instanciando ObjetosContato *contato = [[Contato alloc] init]; contato Criando uma referência chamada contato para o novo objeto.
  79. 79. Instanciando ObjetosContato contato = [[Contato alloc] init]; Define o tipo da referência.
  80. 80. Instanciando ObjetosContato *contato = [[Contato alloc] init]; Por falar em referência
  81. 81. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome;
  82. 82. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome; Nome da propriedade
  83. 83. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome; Tipo referenciado por nome
  84. 84. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome; Por falar em referência...
  85. 85. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome; Gerenciamento de memória (como interefer no contador de referência)
  86. 86. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome; Gerenciamento de memória (como interefer no contador de referência)
  87. 87. Propriedades Declaração (*.h)@property ( nonatomic, strong ) NSString * nome; Acesso concorrente (threads)
  88. 88. Implementação (*.m) #import "Contato.h" @implementation Contato @synthesize nome; @end
  89. 89. Implementação (*.m) #import "Contato.h" @implementation Contato @synthesize nome; @end Agora sim: getter e setter
  90. 90. Propriedades • Métodos de acesso e atribuiçãoContato *contato = [[Contato alloc] init];[contato setNome:@"Ricardo Valeriano"];NSString *nome = [contato nome];
  91. 91. Propriedades • Métodos de acesso e atribuição • Podem ser acessadas via “dot notation”Contato *contato = [[Contato alloc] init];contato.nome = @"Ricardo Valeriano";NSString *nome = contato.nome;
  92. 92. Métodos-(void)cadastra:(Contato *)contato; cadastra
  93. 93. Métodos-(void)cadastra:(Contato *)contato; cadastra:(Contato Indica recebimento de parâmetro
  94. 94. Métodos-(void)cadastra:(Contato *)contato; cadastra:(Contato Tipo do parâmetro
  95. 95. Métodos-(void)cadastra:(Contato *)contato; cadastra:(Contato Nome da variável no método
  96. 96. Métodos(void)cadastra:(Contato *)contato;Tipo do retorno
  97. 97. Métodos-(void)cadastra:(Contato *)contato;
  98. 98. Métodos -(void)cadastra:(Contato *)contato; Método de instância.+ para método de classe.
  99. 99. Métodos-(void)cadastraNome:(NSString *)nome email:(NSString *)email;
  100. 100. Métodos -(void)cadastraNome:(NSString *)nome email:(NSString *)email;[cadastro cadastraNome:@"Ricardo" email:@"rv@caelum.com.br"];
  101. 101. VALERIANOY U NO FINISHES THE FORM?
  102. 102. Binding de Elementos• Declaração (*.h)• IBOutlet (propriedades)• Instâncias de UIView
  103. 103. Binding de Elementos• Declaração (*.h)• IBOutlet (propriedades)• Instâncias de UIView
  104. 104. Binding de Eventos• Declaração (*.h)• IBAction (métodos)• Instâncias de UIView
  105. 105. Binding de Eventos• Declaração (*.h)• IBAction (métodos)• Instâncias de UIView
  106. 106. Show me the code, now!
  107. 107. Integração nativa
  108. 108. Integração nativaNSURL *url = [NSURL URLWithString:appUrl];[[UIApplication sharedApplication] openURL:url];
  109. 109. Maps
  110. 110. MapsNSString *urlEndereco = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", @"Av. Ana costa"];
  111. 111. MapsNSString *urlEndereco = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", @"Av. Ana costa"];NSString *appUrl = [urlEnderecostringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
  112. 112. MapsNSString *urlEndereco = [NSStringstringWithFormat:@"http://maps.google.com/maps?q=%@", @"Av. Ana costa"];NSString *appUrl = [urlEnderecostringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];NSURL *url = [NSURL URLWithString:appUrl];[[UIApplication sharedApplication] openURL:url];
  113. 113. Telefone
  114. 114. TelefoneNSString *appUrl = @"tel:98761234";
  115. 115. TelefoneNSString *appUrl = @"tel:98761234";NSURL *url = [NSURL URLWithString:appUrl];[[UIApplication sharedApplication] openURL:url];
  116. 116. Frameworks
  117. 117. Frameworksif([MFMailComposeViewController canSendMail]){
  118. 118. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];
  119. 119. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self;
  120. 120. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self;
  121. 121. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self; [enviadorEmail
  122. 122. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self; [enviadorEmail setToRecipients:[NSArray arrayWithObject:@"ricardovaleriano@caelum"]];
  123. 123. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self; [enviadorEmail setToRecipients:[NSArray arrayWithObject:@"ricardovaleriano@caelum"]];! [enviadorEmail setSubject:@"Dev in Santos"];
  124. 124. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self; [enviadorEmail setToRecipients:[NSArray arrayWithObject:@"ricardovaleriano@caelum"]];! [enviadorEmail setSubject:@"Dev in Santos"];! [self presentModalViewController:enviadorEmail
  125. 125. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self; [enviadorEmail setToRecipients:[NSArray arrayWithObject:@"ricardovaleriano@caelum"]];! [enviadorEmail setSubject:@"Dev in Santos"];! [self presentModalViewController:enviadorEmail animated:YES];
  126. 126. Frameworksif([MFMailComposeViewController canSendMail]){! ! MFMailComposeViewController *enviadorEmail =[[MFMailComposeViewController alloc] init];! ! enviadorEmail.mailComposeDelegate = self; [enviadorEmail setToRecipients:[NSArray arrayWithObject:@"ricardovaleriano@caelum"]];! [enviadorEmail setSubject:@"Dev in Santos"];! [self presentModalViewController:enviadorEmail animated:YES];}
  127. 127. Frameworks- (void) mailComposeController:(MFMailComposeViewController*)controller didFinishWithResult:(MFMailComposeResult)resulterror:(NSError *)error{ [self dismissModalViewControllerAnimated:YES];}
  128. 128. Mandar um fax• Daquele de papel mesmo
  129. 129. Mandar um fax• Daquele de papel mesmo
  130. 130. Open Source?• Não é tão forte• Mas tem coisas bacanas
  131. 131. github.com/facebook
  132. 132. Diego, @dchohfi
  133. 133. github.com/caelum
  134. 134. Como?
  135. 135. Como?• Baixe o Xcode (ide) da Apple
  136. 136. Como?• Baixe o Xcode (ide) da Apple• Crie uma aplicação integrada com a câmera
  137. 137. Como?• Baixe o Xcode (ide) da Apple• Crie uma aplicação integrada com a câmera• Se puder ser social, melhor
  138. 138. Como?• Baixe o Xcode (ide) da Apple• Crie uma aplicação integrada com a câmera• Se puder ser social, melhor
  139. 139. Como?• Baixe o Xcode (ide) da Apple• Crie uma aplicação integrada com a câmera• Se puder ser social, melhor• Vá prá galera
  140. 140. Como?• Baixe o Xcode (ide) da Apple• Crie uma aplicação integrada com a câmera• Se puder ser social, melhor• Vá prá galera
  141. 141. IP-67
  142. 142. Obrigado@sr_valeriano

×