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

948 views
906 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
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
948
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
19
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Just tell me why!!!\n
  • AV Foundation Framework\nIntroduced in iOS 2.2, the AV Foundation framework (AVFoundation.framework) contains Objective-C classes for playing audio content. You can use these classes to play file- or memory-based sounds of any duration. You can play multiple sounds simultaneously and control various playback aspects of each sound. In iOS 3.0 and later, this framework also includes support for recording audio and managing audio session information.\nIn iOS 4.0 and later, the services offered by this framework were expanded to include:\nMedia asset management\nMedia editing\nMovie capture\nMovie playback\nTrack management\nMetadata management for media items\nStereophonic panning\nPrecise synchronization between sounds\nAn Objective-C interface for determining details about sound files, such as the data format, sample rate, and number of channels\nIn iOS 5, the AV Foundation framework includes support for streaming audio and video content over AirPlay using the AVPlayer class. AirPlay support is enabled by default, but applications can opt out as needed.\nThe AV Foundation framework is a single source for recording and playing back audio and video in iOS. This framework also provides much more sophisticated support for handling and managing media items than higher-level frameworks.\nFor more information about the classes of the AV Foundation framework, see AV Foundation Framework Reference.\n
  • Just tell me why!!!\n
  • \n
  • \n
  • \n
  • \n
  • Palestra no self sp, bem fera sobre o assunto... tá nas interwebs mas não lembro aonde XD\n
  • \n
  • Mas se você for preguiçoso como eu e quiser usar o ARC\n
  • Just tell me why!!!\n
  • a medida em que os problemas evoluem...\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Palestra no self sp, bem fera sobre o assunto... tá nas interwebs mas não lembro aonde XD\n
  • Show me the code\n
  • Show me the code\n
  • Show me the code\n
  • Show me the code\n
  • É, eu fiz isso sim (url no slide).\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Dá para medir qualidade de código?\n
  • \n
  • É péssimo, mais uma pá conhecê, todos acha ruim, todos odeia!\n
  • É péssimo, mais uma pá conhecê, todos acha ruim, todos odeia!\n
  • \n
  • \n
  • O código é meio cru... muita coisa feita na unha.\n
  • O código é meio cru... muita coisa feita na unha.\n
  • O código é meio cru... muita coisa feita na unha.\n
  • Tem até os screenshots se der xabu.\nShow me the code.\n
  • Tem até os screenshots se der xabu.\nShow me the code.\n
  • Tem até os screenshots se der xabu.\nShow me the code.\n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Tá aí o código, já tá bão?\n
  • \n
  • motion create projeto\nrake #builda\nrake -T\nrake spec\n\napp/app_delegate.rb\n@window = UIWindow.alloc.initWithFrame UIScreen.mainScreen.bounds;\n@window.backgroundColor = UIColor.whiteColor\n@window.makeKeyAndVisible\n\nrake spec\n\ntv= UITableViewController.alloc.init\nnav= UINavigationController.alloc.initWithRootViewController tv\n@window.rootViewController= nav\n\nrake\n> a = Array.new\n> a.push "borba"\n> a.insertObject "xpto", atIndex:0\n\nCommand + mouse over\n\n> btn= UIBarButtonItem.alloc.init\n> btn.title= “opalhes”\n> self.nextResponder\n> self.nextResponder.navigationItem.rightBarButtonItem= btn\n
  • \n
  • \n
  • oh! cheiro de coisa boa!\n
  • \n
  • oh! cheiro de coisa boa!\n
  • \n
  • motion create projeto\nrake #builda\nrake -T\nrake spec\n\napp/app_delegate.rb\n@window = UIWindow.alloc.initWithFrame UIScreen.mainScreen.bounds;\n@window.backgroundColor = UIColor.whiteColor\n@window.makeKeyAndVisible\n\nrake spec\n\ntv= UITableViewController.alloc.init\nnav= UINavigationController.alloc.initWithRootViewController tv\n@window.rootViewController= nav\n\nrake\n> a = Array.new\n> a.push "borba"\n> a.insertObject "xpto", atIndex:0\n\nCommand + mouse over\n\n> btn= UIBarButtonItem.alloc.init\n> btn.title= “opalhes”\n> self.nextResponder\n> self.nextResponder.navigationItem.rightBarButtonItem= btn\n
  • \n
  • 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

    ×