2010-03-14 15 views
78

Estoy trabajando en la construcción de una aplicación para iPhone con Titanium Mobile 1.0 y veo que se compila en un binario nativo para iPhone. ¿Como funciona esto? Parece que se necesitaría mucho trabajo pesado para analizar el código de JavaScript y hacer una traducción directa a Objective-C sin tener un lenguaje de superconjunto como 280 North's Objective-J y Cappuccino.¿Cómo funciona Appcelerator Titanium Mobile?

+4

es de código abierto. ¿Por qué no miras debajo del capó? –

+17

@Gaby Me imagino que si tengo curiosidad entonces también lo están otros, así que ¿qué mejor manera de difundir información que haciéndolo públicamente? –

+2

@Darrell, estoy de acuerdo completamente ... no estaba tratando de golpearte, solo pensé que la ruta más rápida (si necesitabas detalles) sería verificar el código directamente ... disculpas si salió mal ... –

Respuesta

147

Titanium toma su código Javascript, lo analiza y lo preprocesa y luego lo precompila en un conjunto de símbolos que se resuelven en función de las aplicaciones que utilizan las API de Titanium. A partir de esta jerarquía de símbolos, podemos construir una matriz de dependencia de símbolos que se correlaciona con los símbolos de la biblioteca subyacente de Titanium para comprender qué API (y dependencias relacionadas, marcos, etc.) específicamente necesita su aplicación. Estoy usando el símbolo de palabra de una manera semicergénica ya que es un poco diferente en función del idioma. En iPhone, el símbolo se asigna a un verdadero símbolo C que finalmente se correlaciona con un archivo compilado .o que se ha compilado para las arquitecturas ARM/i386. Para Java, bueno, es más o menos un archivo .class, etc. Una vez que la interfaz puede entender su matriz de dependencia, entonces invocamos el compilador de SDK (es decir, GCC para iPhone, Java para Android) para luego compilar su aplicación en la final binario nativo.

Por lo tanto, una manera simple de pensarlo es que su código JS se compila casi uno a uno en los símbolos representativos en el país de origen. Todavía hay un intérprete ejecutándose en modo interpretado; de lo contrario, cosas como el código dinámico no funcionarían. Sin embargo, es mucho más rápido, mucho más compacto y se acerca lo más posible al mapeo nativo puro.

Obviamente todavía tenemos mucho espacio para mejorar esto y trabajar en eso. Hasta ahora en nuestras últimas pruebas 1.0, es casi indistinguible del mismo código directo objetivo-c (ya que en la mayoría de los casos está exactamente asignado a eso). Desde el punto de vista de CompSci, ahora podemos comenzar a optimizar cosas que un humano realmente no podría hacer fácilmente, al igual que el compilador de GCC ya lo hace hoy.

+2

y sí, funciona muy bien. :) – jhaynie

+0

Guau, esto realmente suena genial. Gracias por la aclaración. Nunca imaginé que se hubiera puesto tanto esfuerzo en AppCelerator. ¡Mantener el buen trabajo! – MrMage

+12

¿Lo entiendo bien? No hay Javascript-> Objective-C y Javascript-> la conversión de Java se lleva a cabo, pero esto es directamente a código nativo? Entonces, ¿no hay forma de echarle un vistazo al código Objective-C o Java creado? – janpio

1

Si empaco mi código simple y amplio, obtengo un archivo ~ gMip de ~ 80MB (Código original ~ 1kB). Dentro del paquete, entre otros, puede encontrar mis archivos fuente html y js. También hay muchas bibliotecas (ssl por ejemplo) incluidas con el paquete (porque puede tener acceso de bajo nivel a muchas cosas dentro de este marco).

Creo que toman su código y envuelven algún tipo de software de intérprete y bibliotecas. En mi caso, sería como si empacara mi código html y js junto a un pequeño navegador que solo muestra mi sitio.

Sin embargo, siempre y cuando el código funcione en todos los sistemas compatibles de la misma manera, es algo bueno.

+4

Cuando abro el .ipa que crea Titanium Veo lo que parece ser una aplicación compilada estándar. No se puede encontrar ninguno de los códigos HTML o JavaScript. –

+1

Creo que lo que describes es lo que hace Cordova, pero Titanium funciona de manera diferente –

+0

pack html y js code con un pequeño navegador ... y el electrón nace 5 años después. –

3

Como dijo jhaynie, la aplicación está compilada en código nativo, pero todavía hay un intérprete en el lugar para ejecutar algunos javascript, lo que permite que la aplicación sea muy dinámica.

appcelerator titanium

Cuestiones relacionadas