Your SlideShare is downloading. ×
  • Like
Qcon SP 2012, 5 (ou mais) coisas que você gostaria de saber sobre o iOS e o Objective-C.
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Now you can save presentations on your phone or tablet

Available for both IPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

  • 785 views
Published

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 …

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
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
785
On SlideShare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
18
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    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

Transcript

  • 1. Cinco (ou mais) coisas que você gostaria de saber sobre iOS e Objective-C
  • 2. Algumas coisas marotas que você gostaria de saber sobre iOS e Objective-C
  • 3. RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, javascript, java, ios, web, agile
  • 4. DiegoChohfi@dchohfigithub.com/dchohfijava, ios, web, mío cozido...
  • 5. Sobre esse talk...
  • 6. Não é (muito) específico
  • 7. Nem (de longe) esgota os assuntos
  • 8. iOSCocoa TouchMedia LayerCore Services Core OS
  • 9. iOSCocoa TouchMedia LayerCore Services Core OS
  • 10. iOSSistema Operacional Cocoa Touch Media Layer Core Services Core OS
  • 11. iOS Media LayerGraphicAudioVideoAir Play
  • 12. Player de música
  • 13. om cPlayer de música do ks in ea g p a r r e e t w In po
  • 14. AV Foundation
  • 15. Objective-C:linguagem dinâmica
  • 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. Epa! Dinâmica!?
  • 18. Tipo... Runtime Stuff!?
  • 19. Tipo... Runtime Black Magic!?
  • 20. Let me kibar um slide...@dchohfigithub.com/dchohfi
  • 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. 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. NSString *str= @"EhBrinksNeh?"SEL sel= NSSelectorFromString(str);[self performSelector:sel withObject:@"OMGLoL"];
  • 24. ‘humans requiremore sophisticated tools to program’ Matz
  • 25. Ruby Builder
  • 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. 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. 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. 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. 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. outro kibado@dchohfigithub.com/dchohfi
  • 32. Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo: -(id)forwardingTargetForSelector:(SEL)selector;
  • 33. Você pode delegar a chamada do método paraoutro objeto, um atributo por exemplo: -(id)forwardingTargetForSelector:(SEL)selector; E o method_missing?
  • 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. 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. Post sobre o assuntohttp://www.akitaonrails.com/2010/12/06/objective-c-method-missing#.UBzm3KkhcXc
  • 37. Testes automatizados
  • 38. Testes automatizados ac e r f t e in d e
  • 39. Por que?
  • 40. Para ter certeza que funfa. XD
  • 41. Para ter certeza que funfa. XD
  • 42. CUIDADO!Proximidade de clichê detectada.
  • 43. UI Automation
  • 44. UI Automation
  • 45. JavaScript#TodosConhece#TodosPrograma#TodosAma
  • 46. JavaScript#TodosConhece#TodosPrograma#TodosAma
  • 47. JavaScript#TodosConhece#TodosPrograma#TodosOdía
  • 48. UI AutomationReference Collection
  • 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. 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. 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. 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. #PELAMORDEDEUS #PFVRMOSTRA CÓDIGO?
  • 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. 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. ow();varcontrols=window.segmentedControls();
  • 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. Ruby!
  • 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. RubyMotion
  • 61. RubyMotion
  • 62. Ruby + iOS = <3
  • 63. Ruby + iOS = <3
  • 64. Environment?
  • 65. Obrigado!RicardoValeriano@sr_valerianogithub.com/ricardovalerianoruby, javascript, java, ios, web, agile