Desenvolvendo para iOS com Cocoa-Touch

7,239
-1

Published on

Apresentação dos primeiros passos para criação do seu primeiro aplicativo nativo para a plataforma iOS, um dos sistemas operacionais para ambientes móveis mais avançados do mundo, utilizando Cocoa-Touch.

Oficineiro: Bruno Bilescky

Desenvolvedor iOS e entusiasta de novas tecnologias e conceitos.

Published in: Technology
0 Comments
21 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
7,239
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
21
Embeds 0
No embeds

No notes for slide

Desenvolvendo para iOS com Cocoa-Touch

  1. 1. Desenvolvendo para iOS com CocoaTouch
  2. 2. Sumário• Documentação• Principais ferramentas de uso• Objective-C / Cocoa touch• Novidades do IOS 5• Design e imagens• Animações e edições de imagens• Rastreando o usuário
  3. 3. Documentação O primeiro grande passo
  4. 4. Documentação• https://developer.apple.com/library/ios/ipad/#home
  5. 5. Documentação• https://github.com/brunogb/DocSets-for-iOS
  6. 6. Documentação• HIG - Human interface guidelines
  7. 7. Principais ferramentas
  8. 8. Xcode
  9. 9. Xcode• Edição do código• Construção da interface• Ferramenta de depuração de código• Modelador de banco de dados
  10. 10. XcodeEditor de versão do códigoSuporte:
  11. 11. Interface Builder?
  12. 12. Interface Builder
  13. 13. Interface Builder • IBOutlets e IBActions diretamente da interface
  14. 14. Instruments
  15. 15. Instruments• Avaliação de performance, gargálos, memory leaks• Automação de navegação pelo aplicativo• Facilita encontrar bugs de programação• Analisador de OpenGL
  16. 16. Instruments
  17. 17. Instruments
  18. 18. Instruments
  19. 19. Objective-C
  20. 20. Sintaxe
  21. 21. Sintaxe
  22. 22. ARCAutomatic Reference Counting
  23. 23. ARCAutomatic Reference Counting• Não utilize os métodos dealloc, retain e release• Para arquivos que não devam ser compilados com ARC, utilize a flag <-fno-objc-arc>• Todos os métodos da sua classe devem estar especificados na interface
  24. 24. ARCAutomatic Reference Counting
  25. 25. ARCAutomatic Reference Counting @autoreleasepool { <seu código> }
  26. 26. Usando blocos com Objective-C E quais as vantagens em se utilizar blocos
  27. 27. Usando blocos com Objective-C Blocos são objetos que encapsulam um segmento de código a ser executado.
  28. 28. Usando blocos com Objective-C Adotado cada vez mais nos novos frameworks
  29. 29. Usando blocos com Objective-C Como remover uma view com fade
  30. 30. Usando blocos com Objective-C Transição "Flip" entre views
  31. 31. Definindo blocos
  32. 32. Definindo blocoshttps://github.com/brunogb/BlocksKitBlocksKit adiciona o suporte a blocos em diversosframeworks que ainda não tem esse suporte• Filtros em arrays e dicionários• Alertas e ActionSheets• Timers• Conexões de internet• Reconhecimento de gestos
  33. 33. Executando tarefas em background "nunca execute tarefas longas na thead principal"
  34. 34. Executando tarefas em background Tarefas com processamento paralisam a interface gráfica e passam a sensação de que o aplicativo não esta funcionando- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg
  35. 35. Executando tarefas em background Tarefas com processamento paralisam a interface gráfica e passam a sensação de que o aplicativo não esta funcionando - (void)performSelectorOnMainThread:(SEL)aSelector withObject:(id)arg waitUntilDone:(BOOL)wait
  36. 36. Novidades do iOS 5Novos métodos, frameworks, e possibilidades
  37. 37. NSJSONSerializationTraduzindo e gerando dados no formato JSON+ (id)JSONObjectWithData:(NSData *)data options:(NSJSONReadingOptions)opt error:(NSError **)error;+ (id)JSONObjectWithStream:(NSInputStream *)streamoptions:(NSJSONReadingOptions)opt error:(NSError **)error;+ (BOOL)isValidJSONObject:(id)obj;+ (NSData *)dataWithJSONObject:(id)obj options:(NSJSONWritingOptions)opt error:(NSError **)error;
  38. 38. UIKit
  39. 39. UIScreen Controlando o brilho da tela@property (nonatomic) CGFloat brightness;@property (nonatomic) BOOL wantsSoftwareDimming; ( Cuidado com essa propriedade, ela pode causar uma animação mais lenta se estiver habilitada )
  40. 40. UIScrollviewControlando o ponto de parada de um scroll- (void)scrollViewWillEndDragging:(UIScrollView *)svwithVelocity:(CGPoint)veltargetContentOffset:(inout CGPoint *)tCO; ( a variável tCO contem o possível ponto de parada dascrollView, e você pode altera-lo para o ponto que acharmelhor. Cuidado para não estraga a "física" da scrollView, ou o usuário pode ficar perdido)
  41. 41. UIReferenceLibraryViewControllerExibindo definições de palavras- (id)initWithTerm:(NSString *)term;+ (BOOL)dictionaryHasDefinitionForTerm:(NSString *)term;
  42. 42. UITableViewRegistrando UITableViewCell com um identifier- (void)registerNib:(UINib *)nibforCellReuseIdentifier:(NSString *)ident;Como recuperar um Nib UINib *nibFile = [UINib nibWithNibName:@"MyNib" bundle:nil];( Importante definir na UITableViewCell o mesmo identifier )
  43. 43. UIImageImagens animadas+ (UIImage*)animatedImageNamed:(NSString *)name duration:(NSTimeInterval)duration;Busca por name0, name1....+ (UIImage*)animatedImageWithImages:(NSArray *)imagesduration:(NSTimeInterval)duration;@property (nonatomic, readonly) NSArray *images;@property (nonatomic, readonly) NSTimeInterval duration;
  44. 44. UIImageImagens redimencionadas (tiles)- (UIImage*)resizableImageWithCapInsets:(UIEdgeInsets)i;duration:(NSTimeInterval)duration; {0, 1, 0, 1}
  45. 45. UIViewControllerContainer
  46. 46. UIViewControllerContainerContainer- (void)addChildViewController:(UIViewController *)cvc;- (void)removeFromParentViewController;@property (readonly) BOOL childViewControllers;Após executar o método <addChildViewController:> deve-se este método nocontrollers adicionado:- (void)didMoveToParentViewController:(UIViewController *)cvc;
  47. 47. UIViewControllerContainerTransição entre controllers- (void)transitionFromViewController:(UIViewController *)fvctoViewController:(UIViewController *)tvcduration:(NSTimeInterval)durationoptions:(UIViewAnimationOptions)optionsanimations:(void (^)(void))animationscompletion:(void (^)(BOOL finished))completion;
  48. 48. UIStepperControle para aumentar ou diminuir um valor@property (nonatomic) BOOL autorepeat;@property (nonatomic) double maximumValue;@property (nonatomic) double minimumValue;@property (nonatomic) double stepValue;@property (nonatomic) double value;
  49. 49. Twitter & Accounts "Single sign-on"
  50. 50. Twitter & Accounts "Single sign-on"TWRequest;Responsável por efetuar requisições para a API do Twitter. Casoseja um recurso protegido, basta definir a propriedade <account>. Saiba os métodos disponíveis em: http://dev.twitter.com/docs/apiTWTweetComposeViewControllerViewController que permite ao usuário enviar um tweet. Pode seradicionado uma imagem, ou url ao tweet antes de exibi-lo.
  51. 51. Twitter & Accounts "Single sign-on"Código para recuperar todas as contas disponíveis
  52. 52. UIStoryBoards
  53. 53. UIStoryBoardsFácil de criar e visualizar a navegação do aplicativo
  54. 54. UIStoryBoardUIViewController@property (readonly, retain) UIStoryBoard *storyboard;- (void)performSegueWithIdentifier:(NSString *)id sender:(id)sender;- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender;- (void)instantiateViewControllerWithIdentifier:(NSString *)identifier
  55. 55. UIStoryBoardUITableViewController Protótipo de células de tabelas dentro da própria tabela
  56. 56. UIStoryBoardUITableViewController Tabelas com conteúdo estático pre definido
  57. 57. Sincronização remota em tempo real entre aplicativos
  58. 58. Configurando iCloud em seu aplicativo• Habilitar o provisioning profile com permissão para iCloud• Atualizar provisioning profile no Xcode• Marcar o campo <entitlements> dentro do summary do aplicativo
  59. 59. Configurando iCloud em seu aplicativo
  60. 60. Configurando iCloud em seu aplicativo
  61. 61. NewsstandRevistas e jornais no seu iDevice
  62. 62. NewsstandRevistas e jornais no seu iDevice• Possibilita download de conteúdo em background• Possibilita que o aplicativo seja lançado em background via push notification• Possibilita downloads de itens separados do servidor em background.• Ícone do aplicativo pode ser alterado para refletir a última edição recebida.
  63. 63. Animações e edição básica de imagens Utilizando QuartzCore, CoreAnimation e CoreImage
  64. 64. CALayerToda UIView tem uma CALayer responsável por desenharo conteúdo na tela. Seus atributos podem ser animadosPara acessar a layer de uma UIView: UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer;
  65. 65. CALayer • cornerRadiusDeixa a view com borda arredondada.Caso a view possua conteúdos perto daborda, pode ser necessário utilizar apropriedade <clipToBounds> da viewpara que o conteúdo seja escondido UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer; layer.cornerRadius = 8;
  66. 66. CALayer • borderColor, borderWidthDefine cor e tamanho da borda da view.Acompanha o traçado do cornerRadius,se houver. A cor é definida com umareferencia do tipo CGColorRef. UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer; layer.borderWidth = 3; layer.borderColor = [UIColor redColor].CGColor;
  67. 67. CALayer • shadowOpacity, shadowRadius, shadowOffset, shadowColorDefine opacidade, radius, offset e cor dasombra da UIView. O offset é definidocomo um CGSize e determina a partirdo centro da view para qual direção asombra vai se deslocar. UIView *view = [[UIView alloc] init]; CALayer *layer = view.layer; layer.shadowOpacity = 0.8; layer.shadowColor = [UIColor redColor].CGColor; layer.shadowRadius = 2; layer.shadowOffset = CGSizeMake(0,1);
  68. 68. Design e imagens
  69. 69. Design e imagensRegra dos 44x44 pixels A área mínima de um controle que aceite um toque deve ser de 44x44 pixels.
  70. 70. Design e imagensRegra dos 44x44 pixels
  71. 71. Design e imagensRegra dos 44x44 pixels UINavigationBar tem 44px de altura, e apesar de seus botões interior terem 30px de altura, sua área de toque é estendida para os 44px
  72. 72. Design e imagensTamanho dos ícones do aplicativo• AppStore: 512x512px• iPad: 72x72px• Home screen: 57x57px• Home screen (Retina display): 114x114px
  73. 73. Design e imagensTamanho da tela e desenvolvendo para tela Retina• iPhone: 320x480• iPad: 768x1024• IPhone Retina: 640x960Importante notar que para desenvolver para tela retina basta multiplicar por 2o tamanho do objeto numa tela não retina. Ex: uma imagem 50x50 em telanormal, em tela retina seria 100x100. E para utilizar imagens em retina, bastaela ter o mesmo nome da normal acrescentada de @2x antes da extensão.
  74. 74. Design e imagensTamanho dos elementos internos• Status bar: 20px de altura• Navigation bar: 44px de altura• Tab bar: 49px de altura• Bar itens: 30x30 pixels
  75. 75. Rasteando o usuáriodentro do aplicativo Aprendendo com o usuário o que mais importante e o que funciona melhor
  76. 76. Rasteando o usuário dentro do aplicativo As melhores ferramentas disponíveis no momento são Google analytics e Flurry. Ambas são muito parecidas em termos de funcionalidades mas cada uma se destaca em uma área.
  77. 77. Flurry• Analytics para iOS, Android, Blackberry, Windows Phone, JavaME, HTML5.• Rastreia dados como sexo do usuário, idade e ID (desde que esses dados sejam fornecidos pelo programador)• Relatórios são mais simples porém.Google analytics• Analytics para iOS, Android e HTML.• Rastreia dados customizados definidos pelo desenvolvidor• Integração com ecommerce, e campanhas. Versão web• Relatórios detalhados, mesmo painel da versão web.
  78. 78. Mais informaçõesBruno Bilesckybruno.gondim@telefonicadigital.com.brbrunogb@gmail.com@bgondimDocumentação http://developer.apple.com

×