Upgrade to Pro — share decks privately, control downloads, hide ads and more …

MobiRuby introduction

MobiRuby introduction

Yuichiro MASUI

September 14, 2012
Tweet

More Decks by Yuichiro MASUI

Other Decks in Programming

Transcript

  1. Hi! I’m 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)
  2. What’s MobiRuby? • iOS app development environment on mruby •

    Can access native functions • Have plan for Android version
  3. How you can get it • http://mobiruby.org/ • It’s initial

    and truly ALPHA version, so it’s for only mruby and iOS hackers.
  4. 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
  5. mruby-cfunc • C function bridge for mruby • Call C

    based function directly • Based on libFFI • Like DL library on CRuby
  6. mruby-cfunc \ class  TestStruct  <  CFunc::Struct        define

     CFunc::SInt8,    :x,                      CFunc::SInt16,  :y end test  =  TestStruct.new test[:x]  =  10
  7. 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
  8. 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
  9. Memory management • Objective-C - Reference count • mruby -

    Mark & Sweep • Swizzled Objective-C release method
  10. 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
  11. 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
  12. mobiruby-common • Will be common utilities with Android ver. •

    require method • Some POSIX based functions
  13. 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
  14. 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
  15. Road map • Finished building Cocoa bridge • Fix bugs,

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

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

    Improvement • Packaging • Documentation • Build wrapped APIs Version 1 Q1 2013
  18. 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
  19. 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
  20. Pros. • Ruby power • Based on Matz implemented Ruby

    • MIT license • Compact (~3000 lines) • An unexplored field
  21. Cons. • Buggy • Less classes / functions • Don't

    have debugging feature • Need to understand iOS and Cocoa
  22. 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?
  23. Can I use RubyGems? • No, mruby doesn’t have compatibility

    with CRuby ext. APIs. • You need to write new extension for mruby
  24. Can I use meta programming? e.g., define_method, eval • Yes,

    mruby supports almost all dynamic programming features. • But MobiRuby doesn’t support eval. mruby can remove compiler. (it’s for Apple)
  25. Can I use existing Cocoa libraries? • Yes, you can

    use almost all existing libraries. • I think CocoaPods will be a good partner
  26. 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
  27. What version iOS does it support? • MobiRuby supports iOS4

    and higher version. • I tested on iOS4 and iOS5. Probably run on iOS6.
  28. Wanted contributions • Here’s your big chance! • Need understanding

    C/Objective-C and iOS development • Owned OSX and iOS developer license
  29. Thank you • Logo design: Maylis Agniel • http://mobiruby.org •

    http://fb.me/mobiruby • http://twitter.com/mobiruby • http://github.com/mobiruby