ProMotion

A new way to easily build RubyMotion apps.
ProMotion is a RubyMotion gem that makes iOS development more like Ruby and less like Objective-C. It introduces a clean, Ruby-style syntax for building screens that is easy to learn and remember and abstracts a ton of boilerplate UIViewController, UINavigationController, and other iOS code into a simple, Ruby-like DSL.
class AppDelegate < PM::Delegate
def on_load(app, )
open RootScreen.new(nav_bar: true)
end
end
class RootScreen < PM::Screen
title "Root Screen"
def push_new_screen
open NewScreen
end
end
class NewScreen < PM::TableScreen
title "Table Screen"
def table_data
[{
cells: [
{ title: "About this app", action: :tapped_about },
{ title: "Log out", action: :log_out }
]
}]
end
end
Features
Screens | Navigation Bars | Tab Bars |
---|---|---|
![]() |
![]() |
![]() |
Table Screens | Grouped Tables | Searchable | Refreshable |
---|---|---|---|
![]() |
![]() |
![]() |
![]() |
iPad SplitScreens | Map Screens | Web Screens |
---|---|---|
![]() |
![]() |
![]() |
...and much more.
Getting Started
Check out our new Getting Started Guide in the wiki!
What's New?
Version 1.0
- New Screen
PM::MapScreen
- New Screen
PM::WebScreen
- Added
indexable
as aPM::TableScreen
feature - Added
PM::SplitViewController
and the ability to open a screenin_detail:
orin_master:
. More info here. - Added
PM::TabBarController
andPM::Tabs
and refactored theopen_tab_bar
code - IMPORTANT: Changed
on_load
to fire more consistently. You are now encouraged to put your view setup code in here rather thanwill_appear
. - Many methods that used to require long UIKit constants now take short :symbols. Check documentation.
- Simpler
PM::Delegate
code, addedwill_load(app, options)
and others. See the documentation. - Added a few keys and improvements to table_data
- Removed
PM::SectionedTableScreen
(PM::TableScreen
is already a sectioned table) - Removed any last UIKit monkeypatching. Everything is a subclass now. ProMotion is probably the least invasive RubyMotion gem in common use.
- Push Notification updates
- Renamed
PM::ViewHelper
toPM::Styling
and added some common helpers - Added
will_present
,on_present
,will_dismiss
,on_dismiss
to screens - Major internal refactors everywhere
- Lots of new unit & functional tests
- Removed deprecations, cleaned up a lot of code
- Huge improvements to the wiki
Tutorials
Shows how to make a basic app in ProMotion. Updated in May.
http://www.clearsightstudio.com/insights/ruby-motion-promotion-tutorial
Screencasts
Shows how to create a Youtube app that shows Portland Trailblazer highlights.
http://www.clearsightstudio.com/insights/tutorial-make-youtube-video-app-rubymotion-promotion/
Sample Apps
Here's a demo app that is used to test new functionality. You might have to change the Gemfile source to pull from Github.
https://github.com/jamonholmgren/promotion-demo
Here's a demo app showing some styling options.
https://github.com/jamonholmgren/promotion-styling
API Reference
We've created a comprehensive and always updated wiki with code examples, usage examples, and API reference.
ProMotion API Reference
Help
If you need help, feel free to ping me on twitter @jamonholmgren or open an issue on GitHub. Opening an issue is usually the best and we respond to those pretty quickly.
Contributing
I'm very open to ideas. Tweet me with your ideas or open a ticket (I don't mind!) and let's discuss. It's a good idea to run your idea by the committers before creating a pull request. We'll always consider your ideas carefully but not all ideas will be incorporated.
Working on New Features
- Clone the repos into
Your-Project/Vendor/ProMotion
- Update your
Gemfile
to reference the project asgem 'ProMotion', :path => "vendor/ProMotion/"
- Run
bundle
- Run
rake clean
and thenrake
- Contribute!
Submitting a Pull Request
- Fork the project
- Create a feature branch
- Code
- Update or create new specs ** NOTE: your PR is far more likely to be merged if you include comprehensive tests! **
- Make sure tests are passing by running
rake spec
(you can run functional and unit specs separately withrake spec:functional
andrake spec:unit
) - Submit pull request
- Make a million little nitpicky changes that @jamonholmgren wants
- Merged, then fame, adoration, kudos everywhere
Primary Contributors
- Jamon Holmgren: @jamonholmgren
- Silas Matson: @silasjmatson
- Matt Brewer: @macfanatic
- Mark Rickert: @markrickert
- Many others
- Run
git shortlog -s -n -e
to see everyone who has contributed.