Erfahrungen mit Appcelerator

Meine Erfahrungen mit Appcelerator: Native Apps zu welchem Preis?

Hintergrund

Seit etwa vier Wochen beschäftige ich mich intensiv mit Mobile Development Frameworks, die damit werben, mit der gleichen Codebasis Apps für unterschiedliche mobile Plattformen erstellen zu können. Davon gibt es mittlerweile einige, wovon PhoneGap und Appcelerator wohl die bekanntesten Vertreter sind. Auf letzteren wurde ich von @bierbo aufmerksam gemacht.

Appcelerator setzt nicht, wie PhoneGap auf native Web-Apps sondern verfolgt einen anderen Ansatz, um Apps nativ auf die jeweilige Plattform zu bekommen:

The Titanium Mobile SDK leverages over 5,000 device and mobile operating system APIs to create native applications that perform and behave just like they were written in Objective-C (iPhone and iPad) or Java (Android phone and tablets).

Da es mich interessiert hat, wie Appcelerator wirklich arbeitet, und ich mit dem obigen Zitat wenig anfangen konnte, habe ich mich auf die Suche gemacht und bin dabei über folgenden Stack-Overflow Beitrag gestolpert: How Does Appcelerator Titanium Mobile Work?. Der Nutzer "jhaynie" hat einen sehr ausführlichen Post verfasst, um die Frage zu beantwortet. Wie erwartet, sind auch die Anwendungen von Appcelerator nicht 100%ig nativ, aber auf einem guten Weg dort hin.

Appcelerator in der Praxis

Appcelerator wird mit einer eigenen IDE namens "Titanium Studio" ausgeliefert, welche auf Eclipse basiert. Um diese nutzen zu können, muss man sich bei Appcelerator kostenfrei registrieren. Die Installation ging sehr schnell und war, wie von Eclipse gewohnt, einfach.

Die IDE ließ sich am Mac ohne Probleme für die iOS Entwicklung einrichten. Das Android SDK musste manuell nachinstalliert werden und lief nach einigen Stunden herumgetüftel ebenfalls problemlos.

Der Ersteindruck war durchwegs positiv. Die Anwendungen werden in JavaScript und mit Hilfe der Titanium API entwickelt. Letztere enthält Einiges, was ich von der iPhone Entwicklung ebenfalls gewohnt war. Mit nur wenigen Zeilen Code konnte ich sehr schnell Tabellen mit eigens entworfenen Zellen befüllen, wofür ich am iPhone doch etwa doppelt so lange brauchen würde. Auch die Kommunikation nach Außen kann in komfortabler JavaScript Ajax Manier in wenigen Minuten erledigt werden. Meine Android Kollegen waren sehr von dem Layout-Konzept angetan, welches dem vom iPhone sehr ähnelt.

Die ersten Probleme traten auf, als ich versuchte etwas tiefer in die Materie einzutauchen. Alleine das wechseln zwischen zwei Ansichten gestaltete sich ziemlich mühsam. In der recht ausführlichen, doch leider sehr oberflächlichen Dokumentation finden sich keine Hinweise, wie mit Views umgegangen werden soll. Am iPhone bin ich es gewohnt, auf den Speicher meiner Anwendung zu achten und wollte daher wissen, was genau diese "Views" eigentlich sind? Entsprechen diese einem "UIViewController" oder doch eher einer "UIView"? Wenn ich eine erstelle, wann muss ich diese wieder vernichten?

Aus diesem Grund habe ich mit den Quellcode einiger Anwendungen angesehen, die mit Appcelerator entwickelt wurden. Auch aus denen wurde ich nicht wirklich schlau, denn auf den Speicher schienen die Entwickler wenig zu achten. Unzählige Views mit Tabellen und riesigen Datenmengen wurden instanziert, befüllt und selten geschlossen. Das Thema Speichermanagement wird zwar in der Dokumentation aufgeführt und bringt etwas Licht ins Dunkel. In dem Fall wird mir vom Appcelerator zu viel abgenommen, was ich gerne selber im Auge behalten möchte. In diesem Fall eher Geschmacks- und Vertrauenssache.

Beim Entwickeln der Anwendungen viel mir oft auf, dass Fehlermeldungen bei Abstürzen selten angezeigt werden. Um sich an die Quelle des Crashes heranzutasten, hilft es nur den Debugger zu bemühen. Damit kann man als erfahrener Programmierer leben, doch wird es hier Einsteigern recht schwer gemacht.

Mein nächster und größter Kritikpunkt gebührt dem Framework an sich: Viele, teils mäßig dokumentierte Funktionen, Methoden und Properties sind fehlerhaft implementiert. So liefert die Methode "Titanium.UI.getCurrentTab()" immer "undefined" zurück, obwohl ein TabController verwendet wurde. Das Property "contentOffset" einer Scrollview existiert nicht, obwohl es dokumentiert wurde. Jetzt könnte man, wie meine Android Kollegen, sagen, dass man doch nur etwas Googlen und Hacken müsse, aber das ist meiner Meinung nach nicht Sinn der Sache. Ich erwarte von einem Framework dieser Art, dass es mir Arbeit abnimmt, anstatt Neue zu schaffen. Leider passierte es mir mit Appcelerator nur all zu oft eine Lösung für API-Probleme zu suchen, die eigentlich keine Probleme sein sollten.

Gleiches gilt der Gestaltung, welche laut Appcelerator Dokumentation via JSS (JavaScript CSS) möglich sein sollte. In der Praxis funktionierte das nur selten bis überhaupt nicht. Nach einiger Recherche bin ich auf die Information gestoßen, dass JSS am iPhone nur über Classes funktioniert. Leider konnte auch mit diesem Tipp das Styling nicht via JSS Dateien zugewiesen werden. Der Grund dafür ist mir ebenfalls bis heute nicht bekannt. Meinen Android Kollegen ging es übrigens ähnlich.

Mein Fazit

Appcelerator bietet als Einziger am Markt eine Lösung an, die (fast) native Anwendungen für Android, iPhone, den Desktop und das Web erstellt. Das ist durchaus eine gute Sache!

Ich für meinen Teil, werde Anwendungen, welche der breiten Masse zur Verfügung gestellt werden sollen, definitiv nicht mit Appcelerator umsetzen. Die Zeitersparnis, die man durch das Ein-Code-Mehrere-Plattformen-Prinzip hat, werden durch Probleme beim Entwickeln wieder ausgeglichen:

  • Erschwertes Debugging
  • Fehlerhafte API
  • Unvollständige Dokumentation
  • "Gehacke" führt zu schlechter Codequalität und Probleme bei API Updates
  • Einschränkungen und Umdenken bei der User Interface Gestaltung

Am Ende bleibt eine Anwendung, die auf einer Architektur basiert, welcher man vertrauen kann, oder auch nicht. Ich investiere lieber etwas mehr Zeit, in eine echte native iPhone App, welche auf einer stabilen Basis läuft und wo mir keine Black-Box die Sicht auf essentielle Dinge wie das Speichermanagement versperren. Schlussendlich muss jeder für sich die Entscheidung treffen, ob sicher der Einsatz von Appcelerator für anstehende Projekte lohnt und ob man die damit verbundenen Risiken auf sich nimmt. Ich kann nur empfehlen, sich die Plattform genau anzusehen und sich selber ein Bild zu machen.

Durch die geringe Einstiegshürde und die Entwicklungsgeschwindigkeit für einfache Apps eignet sich Appcelerator sehr gut für Einsteiger und fürs Prototyping.

Hier ein anderer kritischer Artikel zum Thema Appcelerator: http://usingimho.wordpress.com/2011/06/14/why-you-should-stay-away-from-...

UPDATE: Hier ist noch ein Link zu einem weiteren Erfahrungsbericht zu Appcelerator: http://www.sera-apps.de/erste-erfahrungen-mit-titanium-appcelerator/

Links

Appcelerator
Appcelerator Wiki
Developerbereich
PhoneGap

Kommentare

comments powered by Disqus