This talk is targeted to developers who have experience with Ruby on Rails, but with little to no iOS development experience. We look at a series of gems that can help you get started with RubyMotion, including
ProMotion
Formotion
MotionModel
BubbleWrap
Teacup
Sugarcube
MotionAwesome
From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion
1. RoR to RubyMotion
Writing Your First iOS App
With RubyMotion
Michael Denomy
BostonMotion User Group
June 25, 2013
2. About Me
• Tech Lead at Cyrus Innovation
- Agile web consultancy with offices in New
York and Boston
- http://www.cyrusinnovation.com
• Agile and XP practitioner since 2004
- Passionate about TDD and pairing
• mdenomy on twitter and github
• Blog at www.mdenomy.wordpress.com
3. Goals
• Capture my experiences getting started
with RubyMotion
- Help someone else along
- Get ideas for where to go next
• Target Audience
- Developers familiar with Ruby on Rails
- Little to no previous experience with iOS
- Desire to learn
• Some talk, some code
6. More Cold Hard Facts
• RubyMotion is not free
- $199.99
- No trial, but 30 day money back
- There is a student discount program
• iOS Developer Program is not free
- $99 / year
- Required to deploy to devices and distribute
via AppStore
• You will need to understand iOS SDK
- iOS documentation is difficult to navigate
9. Good Stuff
• Growing community with lots of online
resources
• More and more gems appearing that
provide a Rails-like experience
• Free to use the tools you like
- Sublime plug in for RubyMotion has code
completion and rake shortcuts
https://github.com/haraken3/
SublimeRubyMotionBuilder
10. MVC in iOS
• MVC is MVC right?
• No “convention over configuration”
- Have to wire things up manually
• Slightly different terminology that Rails
11. UIViewControllers
• Controller receives actions from the
framework (e.g. view loaded) and the
user (e.g. button pressed)
- Interacts with Models and View
• UIViewControllers you need to know
- UINavigationController
- UITabBarController
- UIViewController
- UITableViewController
12. Models
• Models are PORO’s in RubyMotion
• Support built-in for
- attr_accessor
- attr_reader
- attr_writer
• Possible to serialize/deserialize data
using NSCoder and NSKeyedArchiver
- Looked for other options to support storage
and relationships
13. Views
• UIView is a base class
• Buttons, labels, date pickers, etc., all
inherit from UIView
• Views can have subviews
- Simplifies screen layout and allows re-use
14. Let’s Look at Some Code
• Basic Navigation
- Application Delegate
- Root View Controller
- UITabBarController
- UIViewControllers
15. MyWines App
• I enjoy the occasional glass of wine.
• I would like to have a way to track the
wines I like and prices I've paid for them
- Record tasting notes
- Record purchases and price info
- Search for wine by name/producer
- Save to Favorites
- Save label picture
• Spoiler alert
- I have done next to nothing to style the app
16. Sketch It Out
It’s a lot cheaper and faster to iterate at this
level than in code
17. What Tools Did I Choose
• Bundler - Simplify dependencies
• ProMotion - Screen development and workflow
• Formotion - Entry/edit forms
• MotionModel - Models and relations
• Teacup - Styling DSL
• Sugarcube - UI extensions
• BubbleWrap - I used it for camera, but lots more
(JSON, HTTP, RSS, Location, Audio, Video)
• MotionAwesome - Buttons and icons
More at http://rubymotion-wrappers.com/
18. ProMotion
• Simplifies screen development
• Support for table screens
- Easily search for table entries
• Helpers for tab and navbar controllers
19. Formotion
• Easily create forms
for entry/edit
• Integrates with
ProMotion
• Support For
- text
- dates
- sliders
- check boxes
- and many more
20. MotionModel
• Wanted something like ActiveRecord
• Chose MotionModel gem
- Lightweight
- Feels Railsy
‣ Validations
‣ ActiveRecord-like syntax
‣ Relations
- Serialization / deserialization support
- Actively maintained
- Formotion support(turned out not to matter)
21. Teacup
• Layout and style
your app in a DSL
• Frees you up from
layout of screens in
XCode
• Allows you to keep
your views a lot
cleaner
• Hierarchical and
supports variables
22. Sugarcube
• Tons of helpful ‘syntactic sugar’ extensions
to make your development easier
- conversion of hex color codes to UIColor
- alert and action dialogs
- symbol to iOS, e.g.,
‣ :touch.uicontrolevent becomes UIControlEventTouchUpInside
- array helpers
- hash to object conversions
23. BubbleWrap
• Amazing set of tools for
- HTTP
- JSON
- RSS
- Camera
- Location
- Alert boxes
- REPL support
• Just using it for the camera in my app
24. MotionAwesome
• Great set of icons and buttons
• Based on FontAwesome
• So far only used it to create a camera
button using a camera icon
25. Deploying to Device
• Must be in Apple Developer Program
- $99/year
• Get provisioning and developer
certificates
• Deploy using rake
- rake device
- Make sure to quit iTunes and Image Capture
• Can’t do some things with simulator
- e.g. Camera
26. Where Do I Go Next
• Better use of views and subviews
- As app evolves will have more common
controls/groups -> re-use
- Easier to lay out due to relative positioning
used in subviews
• Better/more styling
- Will require more understanding of iOS
• Persist images to file system
• Do more with models
- Averages, filtering, etc
27. Where Do I Go Next
• Testing
- This was very much a spike, but as the app
evolves want to incorporate more automated
testing
- Tested the models, especially persistence and
validation since these were areas of risk
- Want to look at more integration testing
‣ motion-frank (maintained by Cyrus Innovation)
‣ motion-calabash
28. Questions I Still Have
• ProMotion is awesome, but I wonder if
down the road this paints me into a
corner
• Wild West of gems
- Will be interesting to see what ideas and
tools rise to the top
• How much iOS should I learn
- Interface Builder
- CoreData
29. Resources
• RubyMotion Developer Center
- http://www.rubymotion.com/developer-center/
• RubyMotion by Clay Allsop
- http://pragprog.com/book/carubym/rubymotion
• iOS Dev Center
- Tons of useful info, navigation is horrible
- https://developer.apple.com/devcenter/ios/index.action
- https://developer.apple.com/library/ios/#featuredarticles/
ViewControllerPGforiPhoneOS
• RubyMotion Wrappers and Libraries
- http://rubymotion-wrappers.com/