2010-03-14 19 views
78

Sto lavorando alla creazione di un'app per iPhone con Titanium Mobile 1.0 e vedo che si compila su un binario nativo di iPhone. Come funziona? Sembra che ci vorrà molto tempo per analizzare il codice JavaScript e fare una traduzione diretta in Objective-C senza avere un linguaggio superset come 280 North's Objective-J e Cappuccino.Come funziona Appcelerator Titanium Mobile?

+4

è open-source. perché non dai un'occhiata sotto il cofano? –

+17

@ Gaby Immagino che se sono curioso, lo sono anche gli altri, quindi quale modo migliore per diffondere informazioni piuttosto che chiedere pubblicamente? –

+2

@Darrell, sono completamente d'accordo .. non stavo cercando di prenderti in giro, pensavo che il percorso più veloce (se avessi bisogno di specifiche) sarebbe stato controllare direttamente il codice .. scuse se è uscito nel modo sbagliato .. –

risposta

147

Titanium acquisisce il codice Javascript, lo analizza e lo pre-compila e quindi precompila in una serie di simboli che vengono risolti in base agli usi delle applicazioni delle API di titanio. Da questa gerarchia di simboli possiamo costruire una matrice di dipendenze dei simboli che si associa ai simboli della libreria Titanium sottostante per capire quali API (e dipendenze correlate, framework, ecc.) Necessitano in particolare della tua app. Sto usando la parola simbolo in modo semi-generico poiché è leggermente diversa in base alla lingua. In iPhone, il simbolo si associa a un vero simbolo C che alla fine mappa su un file .o compilato che è stato compilato per architetture ARM/i386. Per Java, beh, è ​​più o meno un file .class, ecc. Una volta che il front-end può comprendere la matrice delle dipendenze, invochiamo il compilatore SDK (cioè GCC per iPhone, Java per Android) per poi compilare la tua applicazione nel finale binario nativo.

Quindi, un modo semplice per pensarci è che il codice JS è compilato quasi uno a uno nei simboli rappresentativi in ​​nativeland. C'è ancora un interprete in esecuzione in modalità interpretata altrimenti cose come il codice dinamico non funzionerebbero. Tuttavia, è molto più veloce, molto più compatto e si avvicina alla pura mappatura nativa che puoi ottenere.

Ovviamente abbiamo ancora molto spazio per migliorare questo e lavorare su questo. Finora nel nostro ultimo test 1.0, è quasi indistinguibile dallo stesso codice obiettivo-c (dato che nella maggior parte dei casi è mappato esattamente a questo). Da un punto di vista CompSci, ora possiamo tuttavia iniziare a ottimizzare le cose che un essere umano non potrebbe davvero fare facilmente, proprio come fa già il compilatore GCC oggi.

+2

e sì, funziona molto bene. :) – jhaynie

+0

Wow, questo suona davvero bene. Grazie per il chiarimento. Non avrei mai immaginato che così tanto impegno sarebbe stato messo in AppCelerator. Continuate così! – MrMage

+12

Ho capito bene che non c'è nessuna conversione Javascript-> Objective-C e Javascript-> Java, ma questo è direttamente al codice nativo? Quindi non c'è modo di dare un'occhiata al codice Objective-C o Java creato? – janpio

1

Se impacco il mio semplice codice, ottengo un ~ 80 MB di archivio gzip (codice originale ~ 1kB). All'interno del pacchetto, tra gli altri, puoi trovare i miei file html e js di origine. Ci sono anche molte librerie (ssl per esempio) fornite con il pacchetto (perché puoi avere accesso a basso livello a molte cose all'interno di questo framework).

Penso che prendano il tuo codice e avvolgano una specie di software e librerie di interpreti. Nel mio caso sarebbe come se impacchettassi il mio codice html e js accanto a un piccolo browser che visualizza solo il mio sito.

In ogni caso, finché il codice funziona su tutti i sistemi supportati nello stesso modo è una buona cosa.

+4

Quando apro il .ipa che Titanium crea, vedo ciò che sembra essere un'app compilata standard. Nessuno dei codici HTML o JavaScript può essere trovato. –

+1

Penso che quello che hai descritto sia ciò che Cordova fa, ma Titanium funziona in modo diverso –

+0

pack html e codice js con un browser minuscolo ... e l'elettrone è nato 5 anni dopo. –

3

Come ha detto jhaynie, l'applicazione è compilata in codice nativo, ma c'è ancora un'interprete sul posto per eseguire alcuni javascript, che consente all'applicazione di essere molto dinamica.

appcelerator titanium

Problemi correlati