You are on page 1of 45

MobiRuby

iOS + Ruby = Super Awesome!!

Hi! Im masuidrive.
Yuichiro MASUI (masuidrive, Ichi) Open source developer, Ruby fun FrogApps, Inc. ex-Appcelerati Pukiwiki, Ruby on Rails tutorial movie in Japanese, IKEA hacker Furo-grammer (Coding in hot tub)

Whats MobiRuby?
iOS app development environment on mruby Can access native functions Have plan for Android version

Demo Apps

MobiRuby Game

Vision
MobiRuby provides Ruby power to Mobile devices DSL is most important Ruby power

How you can get it


http://mobiruby.org/ Its initial and truly ALPHA version, so its for only mruby and iOS hackers.

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

mruby
New implementation of Ruby for embedding Built by dad Matz Less memory and storage Not required POSIX, only C99 Simple spec, Not included File, Socket, Thread and ext libraries

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

mruby-cfunc
C function bridge for mruby Call C based function directly Based on libFFI Like DL library on CRuby

mruby-cfunc
str = "STRING" CFunc::call(CFunc::Void, "puts", str) STRING

mruby-cfunc
str = "STRING" ptr = CFunc::Pointer.malloc(7) result_ptr = CFunc::call(CFunc::Pointer, "strcpy", ptr, str) ptr.to_s -> STRING

mruby-cfunc
class TestStruct < CFunc::Struct define CFunc::SInt8, :x, CFunc::SInt16, :y end\ test = TestStruct.new test[:x] = 10

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

mruby-cocoa
Cocoa bridge for mruby Use Cocoa functions transparently Based on mruby-cfunc and Cocoa runtime Manipulate Cocoa objects Create class/instance, inherit existing classes Garbage collection

Bridge Cocoa runtime


Objective-C has powerful runtime features Create and modify class dynamically ObjC class <- Ruby class <- ObjC class ObjC value interconverted with Ruby value Supported delegate and blocks

Memory management
Objective-C - Reference count mruby - Mark & Sweep Swizzled Objective-C release method

Multi-threading
MobiRuby does not support threads Because mruby does not support threads I have not touched them yet Need to implement multi VM instead of thread

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

mobiruby-ios
iOS specific utilities Bootstrap Xcode integration Wrapped classes

Wrapped Audio Player


class AudioPlayer def initialize(filename) name, ext = filename.split(".") path = Cocoa::NSBundle._mainBundle. _pathForResource name, :ofType, ext url = Cocoa::NSURL._fileURLWithPath path @avap = Cocoa::AVAudioPlayer._alloc. _initWithContentsOfURL url, :error, nil end def play; @avap._play; end end AudioPlayer.new("bgm00.wav").play

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

mobiruby-common
Will be common utilities with Android ver. require method Some POSIX based functions

MobiRuby stack
Your code

mrubycfunc

mrubycocoa

mobirubycommon mruby

mobirubyios

iOS

Your code
class Cocoa::MyAlertView < Cocoa::UIAlertView define C::Void, :alertView, Cocoa::Object, :clickedButtonAtIndex, C::Int do |me, index| if index.to_i == 1 app = Cocoa::UIApplication._sharedApplication str = "http://mobiruby.org" url = Cocoa::NSURL._URLWithString(str) app._openURL url end end end

Your code
alert = Cocoa::MyAlertView._alloc._initWithTitle "Hello", :message, "I am MobiRuby", :delegate, nil, :cancelButtonTitle, "I know!", :otherButtonTitles, "What's?", nil alert._setDelegate alert alert._show

Road map
Finished building Cocoa bridge Fix bugs, Improvement Packaging Documentation Build wrapped APIs

Road map
Finished building Cocoa bridge Fix bugs, Improvement Packaging Documentation Build wrapped APIs

Road map
Finished building Cocoa bridge Fix bugs, Improvement Packaging Documentation Build wrapped APIs
Version 1 Q1 2013

Progress in Sept 2012


Already MobiRuby based app is in AppStore Finally released alpha 1 It's only for iOS and mruby hackers Need deeply understanding Cocoa runtime, mruby, Garbage collection

Current tasks
Fixed crashing bugs and memory leaks Test Test Test!!! Support `long` and `long long`, define Cocoa property and more... Circular reference mruby stability

Whats difference?
RubyMotion Rhodes Ruboto RubyCocoa Titanium Mobile

Whats difference?
RubyMotion

Diversity is Good
Rhodes Ruboto RubyCocoa Titanium Mobile

Pros.
Ruby power Based on Matz implemented Ruby MIT license Compact (~3000 lines) An unexplored field

Cons.
Buggy Less classes / functions Don't have debugging feature Need to understand iOS and Cocoa

FAQ
Can I use RubyGems? Can I use meta programming? e.g., define_method, eval Can I use exists Cocoa libraries? Can I define new method to exist Cocoa class? What version iOS does it support?

Can I use RubyGems?


No, mruby doesnt have compatibility with CRuby ext. APIs. You need to write new extension for mruby

Can I use meta programming? e.g., define_method, eval

Yes, mruby supports almost all dynamic programming features. But MobiRuby doesnt support eval. mruby can remove compiler. (its for Apple)

Can I use existing Cocoa libraries?


Yes, you can use almost all existing libraries. I think CocoaPods will be a good partner

Can I define new method to exist Cocoa class?


Yes, You can define new methods from Ruby You can inherit exists Cocoa and create new class from Ruby

What version iOS does it support?


MobiRuby supports iOS4 and higher version. I tested on iOS4 and iOS5. Probably run on iOS6.

Wanted contributions
Heres your big chance! Need understanding C/Objective-C and iOS development Owned OSX and iOS developer license

Thank you
Logo design: Maylis Agniel http://mobiruby.org http://fb.me/mobiruby http://twitter.com/mobiruby http://github.com/mobiruby