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.
Watch the September Motion Meetup where Gant Laborde interviews Jamon Holmgren about ProMotion!
class AppDelegate < PM::Delegate
def on_load(app, options)
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
Screens | Navigation Bars | Tab Bars |
---|---|---|
Table Screens | Grouped Tables | Searchable | Refreshable |
---|---|---|---|
iPad SplitScreens | Map Screens | Web Screens |
---|---|---|
Check out our new Getting Started Guide in the wiki!
- 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
Shows how to make a basic app in ProMotion. Updated in May.
http://www.clearsightstudio.com/insights/ruby-motion-promotion-tutorial
Shows how to create a Youtube app that shows Portland Trailblazer highlights.
http://www.clearsightstudio.com/insights/tutorial-make-youtube-video-app-rubymotion-promotion/
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
We've created a comprehensive and always updated wiki with code examples, usage examples, and API reference.
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.
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.
- 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!
- 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 to
edge
(for new features) ormaster
(for bugfixes) - Make a million little nitpicky changes that @jamonholmgren wants
- Merged, then fame, adoration, kudos everywhere
- 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.