iOS Development with Ruby using RubyMotion

iOS Development with Ruby using RubyMotion

Introduction and code demo of RubyMotion.

Video: https://vimeo.com/46380771
Discussion: http://hkdev.mobi/topics/6

Francis Chong
Hong Hong Mobile Developers Meetup #2

Ecdf9a83234e21743d77b75fd308b929?s=128

Francis Chong

July 25, 2012
Tweet

Transcript

  1. iOS Development with Ruby using RubyMotion Francis Chong (@siuying) 12年7月26日星期四

  2. Me • Francis Chong (@siuying) • Mobile and iOS app

    developer • Ignition Soft 12年7月26日星期四
  3. ` 12年7月26日星期四

  4. Laurent Sansonetti (@lrz) 12年7月26日星期四

  5. Released May 2012 12年7月26日星期四

  6. What is RubyMotion? 12年7月26日星期四

  7. Ruby on iOS 12年7月26日星期四

  8. Statically compiled 12年7月26日星期四

  9. Based on MacRuby (Ruby 1.9.x) 12年7月26日星期四

  10. Custom GC 12年7月26日星期四

  11. Core OS Core Service Media Cocoa Touch RubyMotion Objective-C 12年7月26日星期四

  12. No extra layers! 12年7月26日星期四

  13. Command line Toolchain 12年7月26日星期四

  14. > motion create <My Project> 12年7月26日星期四

  15. > rake simulator 12年7月26日星期四

  16. > rake device 12年7月26日星期四

  17. RubyMotion Basics 12年7月26日星期四

  18. Use Cocoa Touch classes 12年7月26日星期四

  19. handle = [[NSFileHandle alloc] initWithFileDescriptor:2] [handle fileDescriptor] # => 2

    handle = NSFileHandle.alloc.initWithFileDescriptor(2) handle.fileDescriptor # => 2 12年7月26日星期四
  20. A Ruby dialect (based on MacRuby) 12年7月26日星期四

  21. Named Parameters [string drawAtPoint:point withFont:font]; string.drawAtPoint(point, withFont:font) 12年7月26日星期四

  22. Ruby objects implemented in ObjC • String > NSMutableString •

    Array > NSMutableArray • Hash > NSMutableDictionary • Numeric > NSNumber • Time > NSDate 12年7月26日星期四
  23. Mixed ruby and Objective-C 12年7月26日星期四

  24. 'hello'.uppercaseString # => 'HELLO' 'hello'.upcase # => 'HELLO' 12年7月26日星期四

  25. def iterate(ary) ary.each { |x| puts x } end iterate

    [42] iterate NSArray.arrayWithObject(42) 12年7月26日星期四
  26. C Structures 12年7月26日星期四

  27. struct CGPoint { CGFloat x; CGFloat y; }; typedef struct

    CGPoint CGPoint; CGPoint pt = CGPointMake(1, -1); 12年7月26日星期四
  28. pt = CGPoint.new(100, 200) 'Hello'.drawAtPoint(pt, withFont: font) # Short Hand

    'Hello'.drawAtPoint([100, 200], withFont: font) 12年7月26日星期四
  29. Pointers 12年7月26日星期四

  30. @interface NSData - (BOOL)writeToFile:(NSString *)path options: (NSDataWritingOptions)mask error:(NSError **)errorPtr; @end

    12年7月26日星期四
  31. # Create a new pointer to the object type. error_ptr

    = Pointer.new(:object) unless data.writeToFile(path, options: mask, error: error_ptr) # De-reference the pointer. error = error_ptr[0] # Now we can use the `error' object. $stderr.puts "Error when writing data: #{error}" end 12年7月26日星期四
  32. Reuse existing Objective-C code base 12年7月26日星期四

  33. or use CocoaPods 12年7月26日星期四

  34. Why? 12年7月26日星期四

  35. Easier to learn 12年7月26日星期四

  36. Less boilerplates 12年7月26日星期四

  37. Shorter, concise code 12年7月26日星期四

  38. Build your own tool 12年7月26日星期四

  39. Gems 12年7月26日星期四

  40. BubbleWrap http://bubblewrap.io 12年7月26日星期四

  41. HTTP BubbleWrap::HTTP.get("https:// api.github.com/users/mattetti") do |response| puts response.body.to_str end 12年7月26日星期四

  42. KVO class ExampleViewController < UIViewController include BW::KVO def viewDidLoad observe(@text_field,

    :text) do |old_value, new_value| puts "Text field did changed: #{new_value}!" end end end 12年7月26日星期四
  43. Location BW::Location.get do |r| puts "From Lat #{r[:from].latitude}, Long #{r[:from].longitude}"

    puts "To Lat #{r[:to].latitude}, Long #{r[:to].longitude}" end 12年7月26日星期四
  44. SimpleView https://github.com/seanho/SimpleView 12年7月26日星期四

  45. def viewDidLoad UI::Layouts.setup(view) do label width: 200, height: 20, text:

    "Choose your lucky word", color: "#eee" image_view top: 50, left: 50, right: 50, image: "sample.jpg" toolbar anchors: [:bottom] end end 12年7月26日星期四
  46. Code Demo 12年7月26日星期四

  47. 12年7月26日星期四

  48. Q & A 12年7月26日星期四

  49. ` 12年7月26日星期四

  50. Q & A 12年7月26日星期四