RoR to RubyMotion

quarterceladonΚινητά – Ασύρματες Τεχνολογίες

10 Δεκ 2013 (πριν από 3 χρόνια και 9 μήνες)

77 εμφανίσεις

RoR to RubyMotion
Writing Your First iOS App
With RubyMotion
Michael Denomy
BostonMotion User Group
June 25, 2013
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
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
The Vision
MVC
Ruby
The Reality
initWithNibName?
UIControlEventTouchUpInside?
What’s a Nib?
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
It Gets Better
It Gets Better
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
MVC in iOS

MVC is MVC right?

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

Slightly different terminology that Rails
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
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
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
Let’s Look at Some Code

Basic Navigation
-
Application Delegate
-
Root View Controller
-
UITabBarController
-
UIViewControllers
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
Sketch It Out
It’s a
lot
cheaper and faster to iterate at this
level than in code
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/

ProMotion

Simplifies screen development

Support for table screens
-
Easily search for table entries

Helpers for tab and navbar controllers
Formotion

Easily create forms
for entry/edit

Integrates with
ProMotion

Support For
-
text
-
dates
-
sliders
-
check boxes
-
and many more
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)
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
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
BubbleWrap

Amazing set of tools for
-
HTTP
-
JSON
-
RSS
-
Camera
-
Location
-
Alert boxes
-
REPL support

Just using it for the camera in my app
MotionAwesome

Great set of icons and buttons

Based on FontAwesome

So far only used it to create a camera
button using a camera icon
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
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
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
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
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/
Questions

Q&A
RoR to RubyMotion
Writing Your First iOS App
Michael Denomy
BostonMotion User Group
June 25, 2013