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

MobiRuby introduction

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

MobiRuby introduction

Avatar for Yuichiro MASUI

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