31
RoR to RubyMotion Writing Your First iOS App With RubyMotion Michael Denomy BostonMotion User Group June 25, 2013

From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

  • Upload
    mdenomy

  • View
    2.915

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

RoR to RubyMotionWriting Your First iOS App

With RubyMotion

Michael DenomyBostonMotion User GroupJune 25, 2013

Page 2: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 3: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 4: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

The VisionMVC

Ruby

Page 5: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

The Reality initWithNibName?

UIControlEventTouchUpInside?What’s a Nib?

Page 6: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 7: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

It Gets Better

Page 8: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

It Gets Better

Page 9: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 10: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

MVC in iOS• MVC is MVC right?

• No “convention over configuration”- Have to wire things up manually

• Slightly different terminology that Rails

Page 11: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 12: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 13: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 14: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

Let’s Look at Some Code• Basic Navigation- Application Delegate

- Root View Controller

- UITabBarController

- UIViewControllers

Page 15: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 16: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

Sketch It Out

It’s a lot cheaper and faster to iterate at this level than in code

Page 17: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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/

Page 18: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

ProMotion• Simplifies screen development

• Support for table screens- Easily search for table entries

• Helpers for tab and navbar controllers

Page 19: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

Formotion• Easily create forms

for entry/edit

• Integrates with ProMotion

• Support For- text

- dates

- sliders

- check boxes

- and many more

Page 20: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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)

Page 21: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 22: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 23: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

BubbleWrap • Amazing set of tools for- HTTP

- JSON

- RSS

- Camera

- Location

- Alert boxes

- REPL support

• Just using it for the camera in my app

Page 24: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

MotionAwesome• Great set of icons and buttons

• Based on FontAwesome

• So far only used it to create a camera button using a camera icon

Page 25: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 26: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 27: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 28: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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

Page 29: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

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/

Page 30: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

Questions • Q&A

Page 31: From Ruby on Rails to RubyMotion - Writing your First iOS App with RubyMotion

RoR to RubyMotionWriting Your First iOS App

Michael DenomyBostonMotion User GroupJune 25, 2013