rubymotion release version

37
RubyConf Taiwan RubyMotion HACK YOUR IOS APP LIKE NEVER BEFORE

Upload: joseph-ku

Post on 28-Oct-2014

54 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: RubyMotion Release Version

RubyCo

nf Taiw

an

RubyMotionHACK YOUR IOS APP LIKE NEVER BEFORE

Page 2: RubyMotion Release Version

Who Am I?

Page 3: RubyMotion Release Version

古傑芳

Page 4: RubyMotion Release Version

@josephku

Page 5: RubyMotion Release Version
Page 6: RubyMotion Release Version

WHAT’S RUBYMOTION?

A Ruby toolchain for iOS

Develop and test native iOS app in Ruby

Based on MacRuby

Laurent Sansonetti (@lrz)

Page 7: RubyMotion Release Version

Why RubyMotion?

Page 8: RubyMotion Release Version
Page 9: RubyMotion Release Version

Objective-C

Objective-C Runtime

iOS SDK

Foundation Framework

Page 10: RubyMotion Release Version

Objective-C

Objective-C Runtime

iOS SDK

Foundation Framework

RubyMotion

Page 11: RubyMotion Release Version
Page 12: RubyMotion Release Version
Page 13: RubyMotion Release Version
Page 14: RubyMotion Release Version

WHY RUBYMOTION?

100% native code

Keep your editor

App Store compliant

Page 15: RubyMotion Release Version

Babe, Let’s Rock!!

Page 16: RubyMotion Release Version

Dirty

Page 17: RubyMotion Release Version

Dirty

Page 18: RubyMotion Release Version

The Last Mile

Page 19: RubyMotion Release Version

DEPLOYMENT

Deploy your app to beta testers by TestFlight

Deploy to App Store

$ rake archive:distribution

$ gem install motion-testflight

$ rake testflight notes='Orz'

Page 20: RubyMotion Release Version

// Foo.h@interface Foo: NSObject{}@property (nonatomic, strong) NSString *bar;@end

// Foo.m#import “Foo.h”@implementation Foo@synthesize bar = _bar;@end

class Foo attr_accessor :barend

Objective-C

RubyMotion

Page 21: RubyMotion Release Version

outputImageProviderFromBufferWithPixelFormat:pixelsWide:pixelsHigh:baseAddress:bytesPerRow:releaseCallback:releaseContext:colorSpace:shoul

dColorMatch:

WTF!!

Page 22: RubyMotion Release Version

NSDictionary *rules = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber NumberWithBool:TRUE],"RubyIsAwesome",nil];

Objective-C

RubyMotionrules = { RubyIsAwesome: 1 }

What’s the magic??

Page 23: RubyMotion Release Version

Babe, Rock Again!!

Page 24: RubyMotion Release Version

LIMITATIONS

require

eval

define_method

Proc#binding

Regular gems don’t work

Page 25: RubyMotion Release Version

PROS & CONS

One-time fee of $199

Growing faster and faster

Apple’s attitude

Page 26: RubyMotion Release Version

Is RubyMotion the future?

Page 27: RubyMotion Release Version

DSL

Page 28: RubyMotion Release Version

App.alert("BubbleWrap is awesome!")App.run_after(0.5) { p "It's #{Time.now}" }App.open_url("http://rubyconf.tw/2012/")

Device.iphone?Device.ipad?Device.front_camera?

BW::Media.play_modal("http://www.hrupin.com/wp-content/uploads/mp3/testsong_20_sec.mp3")

EM.add_timer 1.0 do puts "Great scott!"end

Page 29: RubyMotion Release Version
Page 30: RubyMotion Release Version
Page 31: RubyMotion Release Version

RubyMine

Page 32: RubyMotion Release Version
Page 33: RubyMotion Release Version
Page 34: RubyMotion Release Version

IS THE RUBYMOTION THE FUTURE?

DSL

Well-known editor and IDE Support

Active community

Page 35: RubyMotion Release Version

C’mon, it’s Ruby!!

Page 36: RubyMotion Release Version

Any questions?

Page 37: RubyMotion Release Version

Thank you!