Ich nehme an einem Kurs in Android / iPhone-Entwicklung teil und wir haben 8 Wochen mit Titanium verbracht (nicht Vollzeit) (Version war Titanium 1.4.2 und die Zeit war ungefähr im November 2010). Hier ist meine Erfahrung.
iPhone Android Dual-Ziel
Obwohl die API-Handbücher behaupten, dass die Funktionalität sowohl für Android als auch für iPhone verfügbar ist, ist dies nicht der Fall. Viele der Dinge funktionieren einfach nicht auf einer der Plattformen. Einige Dinge funktionieren anders.
Viele Leute in der Klasse haben iPhone-Anwendungen erstellt, und sie können sie nicht ohne größere Änderungen an Android arbeiten lassen. Ich entwickelte eine einfache Kinder-App namens Animap (siehe Android Market / Appstore in Schweden) und begann unter Windows zu entwickeln. Sobald das Android-Ziel funktioniert hat, habe ich das Projekt unter OS X geöffnet. Es werden keine Build-Inhalte für das iPhone angezeigt, nur für Android. Sie müssen ein Dual-Target-Projekt unter OS X starten. (Ok, ich habe die relevanten Dateien in ein neues Projekt kopiert.) Nächstes Problem - Die Animationen funktionieren nicht auf dem iPhone (sie funktionieren auf Android). Die Bildlaufereignisse funktionieren auf dem iPhone nicht gleich. (dh unter Android wird das Unberührungsereignis angezeigt, wenn der Benutzer aufhört zu scrollen und seinen Finger vom Bildschirm löst. Dies ist auf dem iPhone nicht der Fall.)
Da dies an keiner Stelle erwähnt wird, müssen Sie grundsätzlich zuerst auf einer Plattform und dann auf der anderen Plattform eine Versuchsprogrammierung durchführen. Mit Versuch und Irrtum meine ich, dass es ungefähr zwei Tage dauern wird, bis eine so einfache App wie Animap auf der anderen Plattform funktioniert. Sie müssen auch haben, wenn (Android) dann ... oder wenn (iPhone) ... überall in Ihrem Code ...
Herunterladen und einrichten
Sie müssen den Anweisungen auf den Brief folgen. Versuchen Sie nicht, Java 64 Bit zu verwenden. Die Demo-Anwendung KitchenSink 1.4.0 wird nicht kompiliert. (1.3 funktioniert in Ordnung!) Sie müssen Dateien direkt auf dem Laufwerk C ablegen, da lange Pfadnamen dazu führen, dass das externe Programm nicht alle Befehlszeilenparameter empfängt, wenn sie zu lang werden. (Für kleine Programme jedoch in Ordnung) 1/3 der Fälle stoppt die Toolchain einfach und Sie müssen erneut auf "Starten" klicken. Dann wird es wahrscheinlich funktionieren ... sehr unzuverlässig. Der Simulator wird beim Start nicht gefunden und dann müssen Sie einfach adb.exe mit Strg + Alt + Entf beenden und erneut versuchen.
Netzwerkverbindung
In einem WLAN-Netzwerk verlieren Sie manchmal die Live-Verbindung und Titanium stürzt auf Ihnen ab (die Kompilierungs- / Bereitstellungsschnittstelle). Wenn Sie keine funktionierende Internetverbindung haben, wird diese nicht gestartet, da Sie nicht bei ihren Servern angemeldet werden können.
API
CSS, HTML und jQuery sind im Vergleich dazu ein Kinderspiel. Titan ähnelt jeder anderen alten GUI-API, und Sie müssen einige Eigenschaften für jede einzelne Schaltfläche / jedes einzelne Feld / usw. Festlegen. Ein Feld falsch zu machen ist einfach zu einfach, sich an alle Eigenschaften zu erinnern, die eingestellt werden müssen? Haben Sie es an der richtigen Stelle mit Großbuchstaben geschrieben? (da dies nicht vom Compiler abgefangen wird, sondern als Laufzeitfehler angesehen wird, wenn Sie das Glück haben, diesen Teil zu testen)
In Titanium brechen die Dinge einfach zusammen, wenn Sie eine weitere Ansicht über einem Steuerelement hinzufügen oder auf eine andere Stelle in der GUI klicken.
Dokumentation
Einige API-Seiten tragen das Android-Symbol, geben jedoch nur dann eine Null zurück, wenn Sie versuchen, das Steuerelement zu erstellen. Sie sind trotz der Symbole nicht einfach auf der Android-Plattform verfügbar. Manchmal wird erwähnt, dass Android eine bestimmte Methode nicht unterstützt, aber dann fehlt die gesamte API.
Spüle
Die Demo-Anwendung. Habe ich erwähnt, dass es nicht kompiliert werden kann, wenn Sie es in Ihren Eclipse-Projektordner legen, weil der Pfad zu lang wird? Muss auf Ihrem Laufwerk C im Stammordner abgelegt werden. Ich benutze derzeit einen Symbolik-Link (mklink / J ...)
Undokumentierte Methoden
Sie müssen Dinge wahrscheinlich als label.setText ('Hello World') verwenden, um ein Label zuverlässig zu ändern, aber dies ist überhaupt nicht dokumentiert.
Debuggen
Titanium.API.info ('Ausdrucke sind die einzige Möglichkeit zum Debuggen');
Bearbeitung
Die APIs sind in keinem guten Format verfügbar, sodass Sie in Eclipse keine normale Code-Vervollständigung mit Hilfe usw. erhalten können. Aptana bitte helfen!
Hardware
Es scheint, dass der Compiler / die Tools nicht multithreaded sind, daher ist ein schneller Computer mit einer schnellen Festplatte ein Muss, da Sie viel Versuch und Irrtum machen müssen. Habe ich die schlechte Dokumentation erwähnt? Sie müssen dort alles ausprobieren, da Sie ihm nicht vertrauen können!
Einige positive Dinge
- Open Source
Aus früheren Projekten habe ich mir versprochen, nie wieder Closed Source zu verwenden, da man Dinge nicht einfach reparieren kann, indem man Stunden und Arbeitskräfte darauf wirft. Wichtig, wenn Sie zu spät im Projekt sind und eine harte Frist einhalten müssen. Dies ist Open Source und ich konnte sehen, warum die Werkzeugkette reißt, und es auch tatsächlich beheben.
Bugdatabase
Es ist auch offen. Sie können einfach sehen, dass Sie nicht alleine sind und eine Problemumgehung durchführen, anstatt weitere 4 Stunden für Versuch und Irrtum aufzuwenden.
Gemeinschaft
- Scheint in ihren Foren aktiv zu sein.
Bugs
- Titan 1.4 ist nicht threadsicher . Das heißt, wenn Sie Threads verwenden (verwenden Sie die Eigenschaft url: in einem createWindow-Aufruf) und programmieren, wie die Threads funktionieren, und Ereignisse mit Daten hin und her senden, stoßen Sie auf viele sehr, sehr seltsame Dinge - verlorene Handler, verloren Fenster, zu viele Ereignisse, zu wenige Ereignisse usw. usw. Dies hängt alles vom Zeitpunkt ab. Wenn Sie die Codezeilen in eine andere Reihenfolge bringen, kann dies zum Absturz oder zur Heilung Ihrer Anwendung führen. Das Hinzufügen eines Fensters in einer anderen Datei.js unterbricht die Ausführung Ihrer app.js ... Dadurch werden auch interne Datenstrukturen in Titanium zerstört, da sie manchmal interne Datenstrukturen parallel aktualisieren und einen gerade geänderten Wert mit etwas anderem überschreiben können.
Viele der Probleme, die ich mit Titan hatte, sind auf meinen Hintergrund auf Echtzeitsystemen wie OSE zurückzuführen, die Hunderte von Threads, Ereignissen und Nachrichtenübermittlung unterstützen. Dies sollte in Titanium 1.4 funktionieren, aber es funktioniert einfach nicht zuverlässig.
Javascript (was für mich neu ist) stirbt stillschweigend bei Laufzeitfehlern. Dies bedeutet auch, dass kleine und häufige Fehler wie das falsche Schreiben eines Variablennamens oder das Einlesen eines Nullzeigers nicht abstürzen, wenn dies der Fall sein sollte, sodass Sie ihn debuggen können. Stattdessen funktionieren Teile Ihres Programms einfach nicht mehr, z. B. ein Eventhandler, weil Sie ein Zeichen falsch platziert / falsch eingegeben haben.
Dann haben wir einfachere Fehler in Titanium, wie einige Parameter, die in den Funktionen nicht funktionieren (was zumindest auf der Android-Plattform ziemlich häufig ist).
Geschwindigkeit des Test- und Fehler-Debug-Zyklus Nachdem ich Titnium Developer auf mehreren Computern ausgeführt hatte, stellte ich fest, dass der Engpass die Festplatte ist. Ein SSD-Laufwerk auf einem Laptop beschleunigt den Erstellungszyklus etwa drei- bis fünfmal schneller als auf einem Laufwerk mit 4200 U / min. Auf einem Desktop ist der Build mit zwei Laufwerken in RAID 1 (Striping-Modus) etwa 25 Prozent schneller als auf einem einzelnen Laufwerk mit einer etwas schnelleren CPU und übertrifft auch den Laptop mit SSD-Laufwerk.
Zusammenfassung
- Aus den Kommentaren in diesem Thread geht hervor, dass es einen Kampf um die Anzahl der Plattformen gibt, für die ein solches Tool Apps liefern kann. Die Anzahl der APIs scheint das Hauptverkaufsargument zu sein.
Dies scheint sehr gut durch, wenn Sie es verwenden. Wenn Sie sich den offenen Bugtracker ansehen, sehen Sie, dass die Anzahl der Fehler immer schneller zunimmt als die Anzahl der behobenen Fehler. Dies ist normalerweise ein Zeichen dafür, dass die Entwickler immer mehr Funktionen hinzufügen, anstatt sich darauf zu konzentrieren, die Anzahl der Fehler zu verringern.
Als Berater, der versucht, für einen Kunden relativ einfache Apps für mehrere Plattformen bereitzustellen, bin ich mir nicht sicher, ob dies tatsächlich schneller ist als die native App-Entwicklung auf zwei Plattformen. Dies liegt an der Tatsache, dass Sie mit Titan schnell sind, wenn Sie auf dem neuesten Stand sind, aber dann plötzlich nach unten schauen und sich in einem Loch befinden, das so tief ist, dass Sie nicht wissen, wie viele Stunden für eine Problemumgehung aufgewendet werden müssen. Sie können eine bestimmte Funktionalität für eine bestimmte Frist / Zeit / Kosten einfach NICHT versprechen.
Über mich selbst: Ich benutze Python seit zwei Jahren mit wxPython. (Diese GUI ist inkonsistent, bricht aber nie so ab. Vielleicht habe ich das von Javascript und Titanium verwendete Threading-Modell nicht verstanden, aber ich bin laut ihren offenen Diskussionsforen nicht allein. GUI-Objekte verwenden plötzlich den falschen Kontext / nicht aktualisieren .. ???) vorher habe ich einen Hintergrund in C- und ASM-Programmierung für mobile Geräte.
[Bearbeiten - Teil mit Fehlern hinzugefügt und nicht threadsicher] [Bearbeiten - jetzt seit einem Monat +, hauptsächlich auf dem PC, aber auch unter OS X. Duales Ziel für iPhone und Android hinzugefügt. Geschwindigkeit des Test- und Fehler-Debug-Zyklus hinzugefügt.]