Slide 1

Slide 1 text

Rubymotion Ruby <3 iOS Monday, 8 April 13

Slide 2

Slide 2 text

Tiago Bastos • @bastos • github/bastos • [email protected] Monday, 8 April 13

Slide 3

Slide 3 text

Monday, 8 April 13

Slide 4

Slide 4 text

Why? • Ruby • Ruby • Ruby • Nativo • Ferramentas Monday, 8 April 13

Slide 5

Slide 5 text

Why? • Ruby • Ruby • Ruby • Nativo • Ferramentas (VIM) Monday, 8 April 13

Slide 6

Slide 6 text

Nativo? Monday, 8 April 13

Slide 7

Slide 7 text

NATIVO Monday, 8 April 13

Slide 8

Slide 8 text

LLVM Monday, 8 April 13

Slide 9

Slide 9 text

Monday, 8 April 13

Slide 10

Slide 10 text

Runtime Unificada Monday, 8 April 13

Slide 11

Slide 11 text

Mais • Gerenciamento de memória ARC Like • Concorrência (GCD) • Rápido (já falei, nativo!) • App Store (TM) Safe Monday, 8 April 13

Slide 12

Slide 12 text

Ruby Monday, 8 April 13

Slide 13

Slide 13 text

Ruby • Módulos (Namespace) • Re exão e meta programação • O Ruby que você conhece, Menos Eval • DSLs Monday, 8 April 13

Slide 14

Slide 14 text

DSLs e Wrappers • Teacup • SugarCube • Bubblewrap Monday, 8 April 13

Slide 15

Slide 15 text

Monday, 8 April 13

Slide 16

Slide 16 text

class  MyController  <  UIViewController    stylesheet  :main_screen    layout  do        subview(UIButton,  :finished_button)    end end Monday, 8 April 13

Slide 17

Slide 17 text

Teacup::Stylesheet.new  :main_screen  do    style  :finished_button,        origin:  [10,  10],        title:  'Hi!' end Monday, 8 April 13

Slide 18

Slide 18 text

 [[UIApplication  sharedApplication]  openURL:[NSURL   URLWithString:  @"https://github.com"]]; Monday, 8 April 13

Slide 19

Slide 19 text

"https://github.com".nsurl.open Monday, 8 April 13

Slide 20

Slide 20 text

UIAlertView  *alert  =  [[UIAlertView  alloc]   initWithTitle:@"Do  you  want  to  say  hello?"   message:@"More  info..."  delegate:self   cancelButtonTitle:@"Cancel"   otherButtonTitles:@"Say  Hello",nil]; [alert  show];   -­‐  (void)alertView:(UIAlertView  *)alertView   didDismissWithButtonIndex:(NSInteger)buttonIndex  {        if  (buttonIndex  ==  0)  {                NSLog(@"Cancel  Tapped.");        }        else  if  (buttonIndex  ==  1)  {                NSLog(@"OK  Tapped.  Hello  World!");        } } Monday, 8 April 13

Slide 21

Slide 21 text

UIAlertView.alert  "Is  this  cool?",   buttons:  %w[No!  Sure!  Hmmmm],    message:  "No  going  back  now",    cancel:  proc  {  self.cancel  },    success:  proc  {  |pressed|  self.proceed  if  pressed  ==   "Sure!"  } Monday, 8 April 13

Slide 22

Slide 22 text

UIView.animation_chain  {    view.slide(:left,  20) }.and_then  {    view.slide(:up,  20) }.and_then  {    view.slide(:right,  20) }.and_then  {    view.slide(:down,  20) }.and_then  {    view.fade_out }.start Monday, 8 April 13

Slide 23

Slide 23 text

BW::Location.get  do  |result|    p  "From  Lat  #{result[:from].latitude},  Lng   #{result[:from].longitude}"    p  "To  Lat  #{result[:to].latitude},  Lng   #{result[:to].longitude}" end Monday, 8 April 13

Slide 24

Slide 24 text

Testes Monday, 8 April 13

Slide 25

Slide 25 text

button  =  UIButton.buttonWithType(UIButtonTypeRoundedRect) button.setTitle('Take  over  the  world',   forState:UIControlStateNormal) window.addSubview(button)   tap  'Take  over  the  world' Monday, 8 April 13

Slide 26

Slide 26 text

Mais! • Bootstrap Simples • Rubygems • Testes • Usar bibliotecas em Objective-C (não é bridge!) Monday, 8 April 13

Slide 27

Slide 27 text

Ferramentas • Terminal based • Rake • Debugging (GDB based) • Use seu Editor • CocoaPods Monday, 8 April 13

Slide 28

Slide 28 text

Monday, 8 April 13

Slide 29

Slide 29 text

Monday, 8 April 13

Slide 30

Slide 30 text

Monday, 8 April 13

Slide 31

Slide 31 text

   app.version  =  '1.0.0'    app.device_family  =  [:iphone]    app.interface_orientations  =  [:portrait]      app.files  +=  Dir.glob(File.join(app.project_dir,  'styles/**/*.rb'))      app.development  do        app.codesign_certificate  =  "iPhone  Developer:  Tiago  Bastos  da  Silva  (HL4267W8QH)"        app.provisioning_profile  =  File.expand_path("~/Library/MobileDevice/Provisioning  Profiles/CE5529C9-­‐0F02-­‐40BA-­‐ B2D9-­‐8A342757DBB9.mobileprovision")    end      app.libs  +=  %w(/usr/lib/libz.dylib  /usr/lib/libsqlite3.dylib)      app.pods  do        pod  'Facebook-­‐iOS-­‐SDK',  '~>  3.2.1'        pod  'MBProgressHUD'    end      app.frameworks  +=  [        'AudioToolbox',        'CFNetwork',        'CoreGraphics',        'CoreLocation',        'MobileCoreServices',        'QuartzCore',        'Security',        'StoreKit',        'SystemConfiguration',        'Accounts',        'AdSupport',        'Social' Monday, 8 April 13

Slide 32

Slide 32 text

Perguntas? Monday, 8 April 13

Slide 33

Slide 33 text

Perguntas? Não? Monday, 8 April 13

Slide 34

Slide 34 text

Perguntas? Não? Ok Monday, 8 April 13