ProMotion Gem Version Build Status Code Climate Dependency Status

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!

# app/app_delegate.rb
class AppDelegate < PM::Delegate
  def on_load(app, options)
    open RootScreen.new(nav_bar: true)
  end
end

# app/screens/root_screen.rb
class RootScreen < PM::Screen
  title "Root Screen"

  def on_load
    set_nav_bar_button :right, title: "Help", action: :open_help_screen
  end

  def open_help_screen
    open HelpScreen
  end
end

# app/screens/help_screen.rb
class HelpScreen < PM::TableScreen
  title "Table Screen"

  def table_data
    [{
      title: "Help",
      cells: [
        { title: "About this app", action: :tapped_about },
        { title: "Log out", action: :log_out }
      ]
    }]
  end

  def tapped_about(args={})
    open AboutScreen
  end

  def log_out
    # 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 Grouped Table Screen Searchable Refreshable
iPad SplitScreens Map Screens Web Screens
ProMotion SplitScreens MapScreen ProMotion WebScreen

...and much more.

Getting Started

  1. Check out the Getting Started Guide in the wiki
  2. Watch the excellent MotionInMotion screencast about ProMotion (very reasonably priced subscription required)
  3. Follow a tutorial: Building an ESPN app using RubyMotion, ProMotion, and TDD

What's New?

Version 1.2.x

  1. Now uses motion-require for better compatibility with other libraries 6046dd7f4
  2. SplitScreen: New option swipe: allows you to specify if a splitscreen master screen can be opened with a swipe. ffbb76caf
  3. FormotionScreen: Removed PM::FormotionScreen and the Formotion testing dependency. Use ProMotion-formotion instead.
  4. Styling: Added a content_width helper to PM::Styling (similar to content_height) 08a984815
  5. TableScreen: Removed SDWebImage in favor of similar but more reliable JDImageCache 59ed747e9
  6. Screen: Allow custom views (including images) for title setting #415

API Reference

We've created a comprehensive and always updated wiki with code examples, usage examples, and API reference.

ProMotion API Reference

Help

ProMotion is not only an easy DSL to get started. The community is very helpful and welcoming to new RubyMotion developers. We don't mind newbie questions.

If you need help, feel free to tweet @jamonholmgren or open an issue on GitHub. Opening an issue is usually the best and we respond to those pretty quickly. If we don't respond within a day, tweet Jamon or Mark a link to the issue.

Contributing

See CONTRIBUTING.md.

Primary Contributors