SalesLentz::DevTeam

Das SalesLentz::DevTeam ist das intere Entwicklerteam von Sales-Lentz – eines der größten Reiseunternehmen in Luxemburg.

Mehr erfahren »

Ein lang gehegter Wunsch von Ruby-Entwicklern ist nun wahr geworden: Mit dem Tool RubyMotion können nun native iOS-Apps in Ruby entwickelt werden. Der (ehemalige ?) Apple-Mitarbeiter Laurent Sansonetti hat RubyMotion entwickelt. Laurent ist der führende Entwickler von MacRuby, auf dem RubyMotion basiert.

Funktionsweise

Im Gegensatz zu anderen Lösungen, wird nicht eine Skript-Sprache (wie z.B. Lua) zur Laufzeit durch einen mitgelieferten Interpreter ausgeführt. Stattdessen kompiliert RubyMotion den Ruby-Sourcecode in statischen Maschinencode. RubyMotion basiert auf MacRuby, das auf der Objective-C Runtime Engine läuft.

iOS-SDK und RubyMotion

Dies hat die folgenden Vorteile:

  • Zugriff auf die gesamte iOS-API
  • kein Performance Verlust im Vergleich zu Objective-C
  • ‘Terminal based development’

Installation

RubyMotion ist ein kommerzielles Produkt (199 USD, Einführungspreis 149 USD), dessen Sourcecode nicht zur Verfügung steht. RubyMotion wird als Mac OS X Installer geliefert. Für RubyMotion ist die Installation von Xcode erforderlich, welches kostenlos aus dem Mac App Store geladen werden kann.

Installer

Workflow

Der gesamt Workflow ist Terminal basiert. Mit dem Kommando motion kann u.a. ein neues Projekt erstellt werden und RubyMotion aktualisiert werden.

motion

Usage:
  motion [-h, --help]
  motion [-v, --version]
  motion <command> [<args...>]

Commands:
  create       Create a new project
  activate     Activate the software license
  update       Update the software
  support      Create a support ticket

Zum Kompilieren und Ausführen der iOS-App sowohl im Simulator also auch auf einem Device wird rake verwendet:

Mit dem rake-Task rake device wird das Projekt für iOS-Geräte kompiliert und anschließend auf das Gerät übertragen. Hierfür ist jedoch eine kostenpflichtige Mitgliedschaft bei Apple erforderlich. Sehr praktisch ist auch der Rake-Task rake ctags, mit dem eine Keyword-Liste sämtlicher Klassen und Methoden generiert wird, die dann in den Editoren Emacs und Vim für Autocompletion verwendet werden kann.

In nur drei Schritten kann eine App mit RubyMotion erstellt werden:

  1. Projekt generieren mit motion create Hello
  2. Projekt editieren in einem Texteditor (z.B. Vim)
  3. Projekt compilieren und auf dem Simulator ausführen mit rake

Erstellen einer Hello-World Applikation

Im folgenden Beispiel soll eine App entwickelt werden, die nichts weiter macht als eine Meldung (ähnlich der Alert-Box in JavaScript) anzuzeigen. Dazu erstellen wir zunächst ein neues Projekt:

motion create HelloWorld
    Create HelloWorld
    Create HelloWorld/.gitignore
    Create HelloWorld/Rakefile
    Create HelloWorld/app
    Create HelloWorld/app/app_delegate.rb
    Create HelloWorld/resources
    Create HelloWorld/spec
    Create HelloWorld/spec/main_spec.rb

Anschließend bearbeiten wir die Datei app/app_delegate.rb.

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    true
   end
end

Die Methode application dient als “Einstiegspunkt”. Zur Anzeige einer Meldung soll die Klasse UIAlertView verwendet werden. In der Online-Refenerenz zum iOS-SDK kann die Klasse nachgeschlagen werden. Grundlegende Objective-C Kenntnisse sind zum Lesen der Referenz notwendig.

class AppDelegate
  def application(application, didFinishLaunchingWithOptions:launchOptions)
    alert = UIAlertView.new
    alert.title="Hello World"
    alert.message="Dies ist eine beispiel message"
    alert.addButtonWithTitle("Abbrechen")
    alert.addButtonWithTitle("OK")
    alert.show
  end
end

Anschließend wird mit rake die App kompiliert und im Simulator ausgeführt.

iOS-SDK und RubyMotion

Sehr hilfreich sind die Beispiel Projekte. Auf GitHub sind außerdem zahlreiche Projekte zu RubyMotion zu finden. Es gibt auch schon Erweiterungen, wie z.B. BubbleWrap, die den Aufruf des iOS-SDK vereinfachen.

IRB-Console

Im Gegensatz zu Xcode/Objectiv-C existiert in RubyMotion eine interaktive Konsole (ähnlich wie IRB). Wenn die App im Simulator läuft, kann durch klicken mit festgehaltener Befehlstaste auf ein Element im Simulator das self Objekt in der Konsole festgelegt werden. In der Konsole kann dann interaktiv auf das Element zugegriffen und verändert werden.

Klickt man z.B. auf ein Label-Objekt, so kann in der Konsole mit self.text = "Hallo Welt" der Text des Labels verändert werden.

Fazit

Der größte Vorteil von RubyMotion liegt nicht nur in der Verwendung der Sprache Ruby, sondern auch darin, dass die IDE Xcode nicht verwendet werden muss. Gerade Rails-Entwickler sind gewohnt ihr Projekt in der Konsole zu generieren.

Kenntnisse in Objective-C und des iOS-Frameworks sind jedoch erforderlich um produktiv mit RubyMotion arbeiten zu können.

Der Nachteil von RubyMotion besteht in der Abhängigkeit zum Entwickler von RubyMotion. Wenn z.B. ein neues iOS-Release erscheint, so muss i.d.R. auch RubyMotion angepasst werden. Es bleibt abzuwarten, wie schnell RubyMotion für das kommende Release von iOS 6 angepasst wird. Das gleiche Problem besteht jedoch auch bei anderen Lösungen, wie z.B. SenchaTouch und Titanium.

verfasse einen Kommentar