2010-03-14 8 views
78

Ich arbeite daran, eine iPhone-App mit Titanium Mobile 1.0 zu erstellen, und ich sehe, dass es auf eine native iPhone-Binärdatei kompiliert. Wie funktioniert das? Es scheint, als würde es viel schwer werden, den JavaScript-Code zu analysieren und eine direkte Übersetzung in Objective-C zu machen, ohne eine Obersprache wie 280 Norths Objective-J und Cappuccino zu haben.Wie funktioniert Appcelerator Titan Mobile?

+4

es ist Open-Source. warum guckst du nicht unter die Haube? –

+17

@Gaby Ich denke, wenn ich neugierig bin, also sind andere so, was für eine bessere Art, Informationen zu verbreiten, als indem Sie öffentlich fragen? –

+2

@Darrell, ich stimme voll und ganz zu .. Ich habe nicht versucht, Sie zu schlagen, dachte nur, dass die schnellste Route (wenn Sie spezifische benötigt) wäre, um den Code direkt zu überprüfen .. Entschuldigung, wenn es in die falsche Richtung kam .. –

Antwort

147

Titanium nimmt Ihren Javascript-Code, analysiert und verarbeitet ihn vor und kompiliert ihn dann in eine Reihe von Symbolen, die basierend auf Ihren Anwendungen von Titanium-APIs aufgelöst werden. Aus dieser Symbolhierarchie können wir eine Symbolabhängigkeitsmatrix erstellen, die den zugrunde liegenden Titanium-Bibliothekssymbolen zuordnet, um zu verstehen, welche APIs (und verwandte Abhängigkeiten, Frameworks usw.) speziell für Ihre App benötigt werden. Ich benutze das Wortsymbol in einer halb-generischen Weise, da es ein wenig anders ist, basierend auf der Sprache. Im iPhone wird das Symbol einem echten C-Symbol zugeordnet, das letztlich 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 (dh GCC für iPhone, Java für Android) auf, um Ihre Anwendung dann in das Finale zu kompilieren native Binärdatei.

So eine einfache Möglichkeit, darüber nachzudenken ist, dass Ihr JS-Code fast eins zu eins in die repräsentativen Symbole in nativland kompiliert wird. Es gibt immer noch einen Interpreter im interpretierten Modus, sonst würden Dinge wie dynamischer Code nicht funktionieren. Es ist jedoch viel schneller, viel kompakter und es ist ungefähr so ​​nah an reinem nativen Mapping wie Sie bekommen können.

Wir haben natürlich noch viel Platz, um dies zu verbessern und daran zu arbeiten. Bisher ist es in unserem neuesten 1.0-Test fast nicht von demselben Ziel-c-Direktcode zu unterscheiden (da es in den meisten Fällen genau diesem zugeordnet ist). Von einem CompSci-Standpunkt aus können wir jetzt jedoch beginnen, Dinge zu optimieren, die ein Mensch wirklich nicht so leicht tun könnte - ähnlich wie es der GCC-Compiler heute schon tut.

+2

und ja, es funktioniert sehr gut. :) – jhaynie

+0

Wow, das klingt wirklich großartig. Danke für die Klarstellung. Ich hätte mir nie vorstellen können, dass so viel Aufwand in AppCelerator gesteckt wurde. Mach weiter so! – MrMage

+12

Habe ich richtig verstanden, dass kein Javascript-> Objective-C und Javascript-> Java-Konvertierung stattfindet, aber dies ist direkt auf nativen Code? Es gibt also keine Möglichkeit, sich den erstellten Objective-C- oder Java-Code anzusehen. – janpio

1

Wenn ich meinen einfachen umfangreichen Code packe, bekomme ich ein ~ 80MB gzip Archiv (Original Code ~ 1kB). Innerhalb des Pakets - unter anderem - finden Sie meine Quell-HTML- und JS-Dateien. Es gibt auch viele Bibliotheken (zum Beispiel ssl), die mit dem Paket geliefert werden (weil Sie in dieser Umgebung einen niedrigen Zugriff auf viele Dinge haben).

Ich denke, dass sie Ihren Code nehmen und um eine Art von Interpreter-Software und Bibliotheken wickeln. In meinem Fall wäre es wie wenn ich meinen HTML- und JS-Code neben einem winzigen Browser packe, der nur meine Website anzeigt.

Wie auch immer, solange der Code auf jedem unterstützten System in der gleichen Weise funktioniert, ist es eine nette Sache.

+4

Wenn ich das öffne .ipa, die Titanium erstellt Ich sehe, was scheint, eine Standard-kompilierte App zu sein. Keiner der HTML- oder JavaScript-Codes kann gefunden werden. –

+1

Ich denke, was Sie beschrieben, ist was Cordova tut, aber Titan funktioniert anders –

+0

Pack HTML und JS-Code mit einem winzigen Browser ... und Elektron wird 5 Jahre später geboren. –

3

Wie jhaynie sagte, ist die Anwendung in nativen Code kompiliert, aber es gibt immer noch einen Interpreter an Ort und Stelle, um etwas Javascript zu starten, was die Anwendung sehr dynamisch macht.

appcelerator titanium