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.
Cinco (ou mais) coisas que você gostaria de      saber sobre   iOS e Objective-C
Algumas coisas marotas  que você gostaria de      saber sobre   iOS e Objective-C
RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, javascript, java, ios, web, agile
DiegoChohfi@dchohfigithub.com/dchohfijava, ios, web, mío cozido...
Sobre esse talk...
Não é (muito) específico
Nem (de longe) esgota os       assuntos
iOSCocoa TouchMedia LayerCore Services  Core OS
iOSCocoa TouchMedia LayerCore Services  Core OS
iOSSistema Operacional      Cocoa Touch      Media Layer      Core Services        Core OS
iOS           Media LayerGraphicAudioVideoAir Play
Player de música
om                   cPlayer de música do ks                in ea               g p              a r             r e      ...
AV Foundation
Objective-C:linguagem dinâmica
Objective-C:                      o            ”linguagem dinâmica ot          in                                  g      ...
Epa! Dinâmica!?
Tipo... Runtime Stuff!?
Tipo... Runtime Black Magic!?
Let me kibar um slide...@dchohfigithub.com/dchohfi
Tipagem dinâmica,      Podemos chamar um método que não está            declarado na sua interface. Pato* patoFeio = [[Pat...
Tipagem dinâmica,      Podemos chamar um método que não está            declarado na sua interface. Pato* patoFeio = [[Pat...
NSString *str= @"EhBrinksNeh?"SEL sel= NSSelectorFromString(str);[self performSelector:sel           withObject:@"OMGLoL"];
‘humans requiremore sophisticated tools            to program’                   Matz
Ruby Builder
require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({            target: STDOUT, indent: 2 })builder.person do...
require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({            target: STDOUT, indent: 2 })builder.person do...
require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({            target: STDOUT, indent: 2 })builder.person do...
require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({            target: STDOUT, indent: 2 })builder.person do...
require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({            target: STDOUT, indent: 2 })builder.person do...
outro kibado@dchohfigithub.com/dchohfi
Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo:                    -(id)forwardingTargetF...
Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo:                    -(id)forwardingTargetF...
Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo:                                 -(id)forw...
Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo:                                 -(id)forw...
Post sobre o assuntohttp://www.akitaonrails.com/2010/12/06/objective-c-method-missing#.UBzm3KkhcXc
Testes automatizados
Testes automatizados ac    e                       r f                    t e                 in             d e
Por que?
Para ter certeza que funfa. XD
Para ter certeza que funfa. XD
CUIDADO!Proximidade de clichê detectada.
UI Automation
UI Automation
JavaScript#TodosConhece#TodosPrograma#TodosAma
JavaScript#TodosConhece#TodosPrograma#TodosAma
JavaScript#TodosConhece#TodosPrograma#TodosOdía
UI AutomationReference Collection
LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:2...
LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:2...
LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:2...
LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:2...
#PELAMORDEDEUS     #PFVRMOSTRA CÓDIGO?
var   target= UIATarget.localTarget();var   app= target.frontMostApp();var   window= app.mainWindow();var   controls= wind...
var   target= UIATarget.localTarget();var   app= target.frontMostApp();var   window= app.mainWindow();var   controls= wind...
ow();varcontrols=window.segmentedControls();
var   target= UIATarget.localTarget();var   app= target.frontMostApp();var   window= app.mainWindow();var   controls= wind...
Ruby!
o vo”Ruby!              e ti                  n a                io er               t t              o n            yM “i...
RubyMotion
RubyMotion
Ruby + iOS = <3
Ruby + iOS = <3
Environment?
Obrigado!RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, javascript, java, ios, web, agile
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Upcoming SlideShare
Loading in …5
×

Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.

1,094 views

Published on

Aplicações famosas como o Instagram, Draw Something e WhatsApp, utilizam diversos recursos que muitas das vezes não fazemos ideia de que existem e estão disponíveis. Esses recursos podem ser tanto do próprio iOS, como da linguagem, influenciando no código escrito. Venha conhecer alguns desses recursos interessante que você poderá aproveitar para o seu próximo projeto!

Published in: Technology
  • Be the first to comment

  • Be the first to like this

Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.

  1. 1. Cinco (ou mais) coisas que você gostaria de saber sobre iOS e Objective-C
  2. 2. Algumas coisas marotas que você gostaria de saber sobre iOS e Objective-C
  3. 3. RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, javascript, java, ios, web, agile
  4. 4. DiegoChohfi@dchohfigithub.com/dchohfijava, ios, web, mío cozido...
  5. 5. Sobre esse talk...
  6. 6. Não é (muito) específico
  7. 7. Nem (de longe) esgota os assuntos
  8. 8. iOSCocoa TouchMedia LayerCore Services Core OS
  9. 9. iOSCocoa TouchMedia LayerCore Services Core OS
  10. 10. iOSSistema Operacional Cocoa Touch Media Layer Core Services Core OS
  11. 11. iOS Media LayerGraphicAudioVideoAir Play
  12. 12. Player de música
  13. 13. om cPlayer de música do ks in ea g p a r r e e t w In po
  14. 14. AV Foundation
  15. 15. Objective-C:linguagem dinâmica
  16. 16. Objective-C: o ”linguagem dinâmica ot in g r s a i s m m o d e o t h e “ m
  17. 17. Epa! Dinâmica!?
  18. 18. Tipo... Runtime Stuff!?
  19. 19. Tipo... Runtime Black Magic!?
  20. 20. Let me kibar um slide...@dchohfigithub.com/dchohfi
  21. 21. Tipagem dinâmica, Podemos chamar um método que não está declarado na sua interface. Pato* patoFeio = [[Pato alloc] init]; [patoFeio late]; -> warning, não error.
  22. 22. Tipagem dinâmica, Podemos chamar um método que não está declarado na sua interface. Pato* patoFeio = [[Pato alloc] init]; OMG [patoFeio late]; -> warning, não error.
  23. 23. NSString *str= @"EhBrinksNeh?"SEL sel= NSSelectorFromString(str);[self performSelector:sel withObject:@"OMGLoL"];
  24. 24. ‘humans requiremore sophisticated tools to program’ Matz
  25. 25. Ruby Builder
  26. 26. require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({ target: STDOUT, indent: 2 })builder.person do |x| x.name("Jim") x.phone("555-1234")end## Prints:# <person># <name>Jim</name># <phone>555-1234</phone># </person>
  27. 27. require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({ target: STDOUT, indent: 2 })builder.person do |x| x.name("Jim") x.phone("555-1234")end## Prints:# <person># <name>Jim</name># <phone>555-1234</phone># </person>
  28. 28. require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({ target: STDOUT, indent: 2 })builder.person do |x| x.name("Jim") x.phone("555-1234")end## Prints:# <person># <name>Jim</name># <phone>555-1234</phone># </person>
  29. 29. require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({ target: STDOUT, indent: 2 })builder.person do |x| x.name("Jim") x.phone("555-1234")end## Prints:# <person># <name>Jim</name># <phone>555-1234</phone># </person>
  30. 30. require rubygemsrequire builderbuilder = Builder::XmlMarkup.new({ target: STDOUT, indent: 2 })builder.person do |x| x.name("Jim") x.phone("555-1234")end## Prints:# <person># <name>Jim</name># <phone>555-1234</phone># </person>
  31. 31. outro kibado@dchohfigithub.com/dchohfi
  32. 32. Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo: -(id)forwardingTargetForSelector:(SEL)selector;
  33. 33. Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo: -(id)forwardingTargetForSelector:(SEL)selector; E o method_missing?
  34. 34. Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo: -(id)forwardingTargetForSelector:(SEL)selector; E o method_missing? - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;NSMethodSignature é a compilação do SEL
  35. 35. Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo: -(id)forwardingTargetForSelector:(SEL)selector; E o method_missing? - (NSMethodSignature *)methodSignatureForSelector:(SEL)aSelector;NSMethodSignature é a compilação do SEL -(void)forwardInvocation:(NSInvocation *)anInvocation; forwardInvocation é o nosso method_missing :P
  36. 36. Post sobre o assuntohttp://www.akitaonrails.com/2010/12/06/objective-c-method-missing#.UBzm3KkhcXc
  37. 37. Testes automatizados
  38. 38. Testes automatizados ac e r f t e in d e
  39. 39. Por que?
  40. 40. Para ter certeza que funfa. XD
  41. 41. Para ter certeza que funfa. XD
  42. 42. CUIDADO!Proximidade de clichê detectada.
  43. 43. UI Automation
  44. 44. UI Automation
  45. 45. JavaScript#TodosConhece#TodosPrograma#TodosAma
  46. 46. JavaScript#TodosConhece#TodosPrograma#TodosAma
  47. 47. JavaScript#TodosConhece#TodosPrograma#TodosOdía
  48. 48. UI AutomationReference Collection
  49. 49. LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:200});if (field.rect()["origin"]["y"] == position)! UIALogger.logPass("ok");else! UIALogger.logFail("Nok");
  50. 50. LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:200});if (field.rect()["origin"]["y"] == position)! UIALogger.logPass("ok");else! UIALogger.logFail("Nok");
  51. 51. LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:200});if (field.rect()["origin"]["y"] == position)! UIALogger.logPass("ok");else! UIALogger.logFail("Nok");
  52. 52. LogFail? LogPass?var target = UIATarget.localTarget();UIALogger.logStart("go to original position");target.tap({x:100, y:200});if (field.rect()["origin"]["y"] == position)! UIALogger.logPass("ok");else! UIALogger.logFail("Nok");
  53. 53. #PELAMORDEDEUS #PFVRMOSTRA CÓDIGO?
  54. 54. var target= UIATarget.localTarget();var app= target.frontMostApp();var window= app.mainWindow();var controls= window.segmentedControls();var segmented= controls[0];segmented.buttons()[0].tap();
  55. 55. var target= UIATarget.localTarget();var app= target.frontMostApp();var window= app.mainWindow();var controls= window.segmentedControls();var segmented= controls[0];segmented.buttons()[0].tap();
  56. 56. ow();varcontrols=window.segmentedControls();
  57. 57. var target= UIATarget.localTarget();var app= target.frontMostApp();var window= app.mainWindow();var controls= window.segmentedControls();var segmented= controls[0];segmented.buttons()[0].tap();
  58. 58. Ruby!
  59. 59. o vo”Ruby! e ti n a io er t t o n yM “i b r u o R ad u l im
  60. 60. RubyMotion
  61. 61. RubyMotion
  62. 62. Ruby + iOS = <3
  63. 63. Ruby + iOS = <3
  64. 64. Environment?
  65. 65. Obrigado!RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, javascript, java, ios, web, agile

×