Skip to content

Latest commit

 

History

History
154 lines (110 loc) · 7.45 KB

README.md

File metadata and controls

154 lines (110 loc) · 7.45 KB

ProMotion Build Status Code Climate

iPhone Apps, Ruby-style

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

Features

Screens Navigation Bars Tab Bars
ProMotion Screen ProMotion Nav Bar ProMotion Tabs
Table Screens Grouped Tables Searchable Refreshable
ProMotion TableScreen ProMotion Grouped Table Screens Searchable Refreshable
iPad SplitScreens Map Screens Web Screens
ProMotion SplitScreens MapScreen ProMotion WebScreen

...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 a PM::TableScreen feature
  • Added PM::SplitViewController and the ability to open a screen in_detail: or in_master:. More info here.
  • Added PM::TabBarController and PM::Tabs and refactored the open_tab_bar code
  • IMPORTANT: Changed on_load to fire more consistently. You are now encouraged to put your view setup code in here rather than will_appear.
  • Many methods that used to require long UIKit constants now take short :symbols. Check documentation.
  • Simpler PM::Delegate code, added will_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 to PM::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.

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

  1. Clone the repos into Your-Project/Vendor/ProMotion
  2. Update your Gemfileto reference the project as gem 'ProMotion', :path => "vendor/ProMotion/"
  3. Run bundle
  4. Run rake clean and then rake
  5. Contribute!

Submitting a Pull Request

  1. Fork the project
  2. Create a feature branch
  3. Code
  4. Update or create new specs ** NOTE: your PR is far more likely to be merged if you include comprehensive tests! **
  5. Make sure tests are passing by running rake spec (you can run functional and unit specs separately with rake spec:functional and rake spec:unit)
  6. Submit pull request to edge (for new features) or master (for bugfixes)
  7. Make a million little nitpicky changes that @jamonholmgren wants
  8. Merged, then fame, adoration, kudos everywhere

Primary Contributors