Wie funktioniert Appcelerator Titanium Mobile?

79

Ich arbeite daran, eine iPhone-App mit Titanium Mobile 1.0 zu erstellen, und sehe, dass sie zu einer nativen iPhone-Binärdatei kompiliert wird. Wie funktioniert das? Es scheint, als würde es viel Mühe kosten, den JavaScript-Code zu analysieren und eine direkte Übersetzung in Objective-C durchzuführen, ohne eine übergeordnete Sprache wie Objective-J und Cappuccino von 280 North zu haben.

Darrell Brogdon
quelle
4
es ist Open Source. warum schaust du nicht unter die Haube?
Gabriele Petrioli
17
@Gaby Ich denke, wenn ich neugierig bin, gibt es auch andere, wie kann man Informationen besser verbreiten, als öffentlich zu fragen?
Darrell Brogdon
2
@Darrell, ich stimme vollkommen zu. Ich habe nicht versucht, Sie zu verprügeln. Ich dachte nur, dass der schnellste Weg (wenn Sie Einzelheiten benötigen) darin besteht, den Code direkt zu überprüfen. Entschuldigung, wenn er falsch herausgekommen ist.
Gabriele Petrioli
1
kleiner Punkt: Objective-J ist eine Obermenge von Javascript
Cobbal
2
Ich habe diese Frage kürzlich gestellt und eine viel aktuellere Antwort mit Informationen erhalten, die in den Antworten auf dieser Seite nicht beschrieben sind. Hier ist die Frage: stackoverflow.com/questions/19060554/…
BT

Antworten:

147

Titanium nimmt Ihren Javascript-Code, analysiert und verarbeitet ihn vor und kompiliert ihn dann in eine Reihe von Symbolen vor, die basierend auf der Verwendung von Titan-APIs durch Ihre Anwendungen aufgelöst werden. Aus dieser Symbolhierarchie können wir eine Symbolabhängigkeitsmatrix erstellen, die den zugrunde liegenden Symbolen der Titanium-Bibliothek zugeordnet ist, um zu verstehen, welche APIs (und zugehörige Abhängigkeiten, Frameworks usw.) speziell Ihre App benötigt. Ich verwende das Wortsymbol halb generisch, da es je nach Sprache etwas anders ist. Im iPhone wird das Symbol einem echten C-Symbol zugeordnet, das letztendlich einer kompilierten O-Datei zugeordnet wird, die für ARM / i386-Architekturen kompiliert wurde. Für Java ist es mehr oder weniger eine .class-Datei usw. Sobald das Front-End Ihre Abhängigkeitsmatrix verstehen kann, rufen wir den SDK-Compiler auf (dh GCC für iPhone,

Eine einfache Möglichkeit, darüber nachzudenken, besteht darin, dass Ihr JS-Code fast eins zu eins in die repräsentativen Symbole im Heimatland kompiliert wird. Es gibt immer noch einen Interpreter, der im interpretierten Modus ausgeführt wird, sonst würden Dinge wie dynamischer Code nicht funktionieren. Es ist jedoch viel schneller, viel kompakter und kommt dem reinen nativen Mapping so nahe wie möglich.

Wir haben offensichtlich noch viel Raum, um dies zu verbessern und daran zu arbeiten. Bisher ist es in unseren letzten 1.0-Tests kaum von demselben objektiven c-Direktcode zu unterscheiden (da es in den meisten Fällen genau darauf abgebildet ist). Vom Standpunkt von CompSci aus können wir jetzt jedoch damit beginnen, Dinge zu optimieren, die ein Mensch wirklich nicht so einfach tun kann - ähnlich wie es der GCC-Compiler bereits heute tut.

jhaynie
quelle
Wow, das klingt wirklich toll. Danke für die Klarstellung. Ich hätte nie gedacht, dass AppCelerator so viel Aufwand erfordert. Mach weiter so!
MrMage
12
Habe ich richtig verstanden, dass keine Javascript-> Objective-C- und Javascript-> Java-Konvertierung stattfindet, aber dies ist direkt in nativen Code? Es gibt also keine Möglichkeit, einen Blick auf den erstellten Objective-C- oder Java-Code zu werfen.
Janpio
1
Wird die Kompilierung auf dem Titanium-Server durchgeführt? Ich habe gesehen, dass Wikipedia en.wikipedia.org/wiki/Appcelerator_Titanium
adib
1
@ Djaqeel Clojure, Scala, Jruby,
Nashorn
3

Wie jhaynie sagte, ist die Anwendung in nativen Code kompiliert, aber es gibt immer noch einen Interpreter, der Javascript ausführt, wodurch die Anwendung sehr dynamisch sein kann.

Appcelerator Titan

Evan B.
quelle
1

Wenn ich meinen einfachen umfangreichen Code verpacke, erhalte ich ein ~ 80MB gzip-Archiv (Originalcode ~ 1kB). Innerhalb des Pakets finden Sie unter anderem meine Quell-HTML- und JS-Dateien. Es gibt auch viele Bibliotheken (z. B. SSL), die mit dem Paket geliefert werden (da Sie in diesem Framework auf niedriger Ebene Zugriff auf viele Dinge haben können).

Ich denke, dass sie Ihren Code nehmen und eine Art Dolmetschersoftware und Bibliotheken umwickeln. In meinem Fall wäre es so, als würde ich meinen HTML- und JS-Code neben einen winzigen Browser packen, der nur meine Site anzeigt.

Solange der Code auf jedem unterstützten System auf die gleiche Weise funktioniert, ist es jedoch eine nette Sache.

die Gefallenen
quelle
4
Wenn ich die von Titanium erstellte .ipa öffne, sehe ich eine scheinbar kompilierte Standard-App. Keiner der HTML- oder JavaScript-Codes kann gefunden werden.
Darrell Brogdon
1
Ich denke, was Sie beschrieben haben, ist das, was Cordova tut, aber Titan funktioniert anders
Rohit Chatterjee
Packen Sie HTML- und JS-Code mit einem winzigen Browser ... und Electron wird 5 Jahre später geboren.
Caio Iglesias