ProMotion

Gem Version Build Status Code Climate Dependency Status omniref Stories in Ready

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.

# app/app_delegate.rb
class AppDelegate < PM::Delegate
  status_bar true, animation: :fade

  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
  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
  4. Read the Documentation

Changelog

Version 2.3.0

This release includes several new features and is backwards compatible with all 2.x releases.

  • PR #618 Allow search bar to be hidden initially
  • PR #606 Adds capability for table_footer_view
  • PR #602 Add image inset support for tab bar item
  • PR #595 Feature/support module
  • PR #582 Allow setting of multiple nav bar buttons instead of just one left an one right
  • PR #581 Adds on_tab_selected
  • PR #579 implemented nav_bar_button class method RE #272
  • PR #565 Adds header_will_display method to PM::TableScreen
  • PR #663 Adds on_load back to cell dequeue code
  • PR #641 Custom search for PM::TableScreen
  • PR #658 Fix cell height issue

Apps built on ProMotion

Apps built on ProMotion

Your app

Open a pull request!

API Reference

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

ProMotion Documentation

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 open an issue on GitHub. If we don't respond within a day, tweet us a link to the issue -- sometimes we get busy.

Contributing

See CONTRIBUTING.md.

Primary Contributors