How Does Appcelerator Titanium Mobile Work?
Asked Answered
C

3

79

I'm working on building an iPhone app with Titanium Mobile 1.0 and I see that it compiles down to a native iPhone binary. How does this work? Seems like it would take a lot of heavy lifting to analyze the JavaScript code and do a direct translation into Objective-C without having a superset language like 280 North's Objective-J and Cappuccino.

Caskey answered 14/3, 2010 at 22:17 Comment(8)
it is open-source. why don't you take a look under the hood ?Stickleback
@Gaby I figure if I'm curious then so are others so what better way to spread information than by asking publicly?Caskey
@Darrell, i agree completely.. i was not trying to bash you, just thought that the fastest route (if you needed specifics) would be to check the code directly.. apologies if it came out the wrong way ..Stickleback
@Gaby No worries. I don't disagree with you. But my JS chops are better than my ObjC chops so... :)Caskey
small point: Objective-J is a superset of javascriptClimate
@Climate Bah, if you must get technical! :) Fixed.Caskey
I spent 5 minutes looking for the answer to this question on the Titanium website. Couldn't find anything which is a bit ridiculous. So yes, this is a very valid question.Cream
I asked this question more recently and got a much more up to date answer with info that isn't described in the answers on this page. Here's the question: #19061054Faulkner
C
147

Titanium takes your Javascript code, analyzes and preprocesses it and then pre-compiles it into a set of symbols that are resolved based on your applications uses of Titanium APIs. From this symbol hierarchy we can build a symbol dependency matrix that maps to the underlying Titanium library symbols to understand which APIs (and related dependencies, frameworks, etc) specifically your app needs. I'm using the word symbol in a semi-generic way since it's a little different based on the language. In iPhone, the symbol maps to a true C symbol that ultimately maps to a compiled .o file that has been compiled for ARM/i386 architectures. For Java, well, it's more or less a .class file, etc. Once the front end can understand your dependency matrix, we then invoke the SDK compiler (i.e. GCC for iPhone, Java for Android) to then compile your application into the final native binary.

So, a simple way to think about it is that your JS code is compiled almost one to one into the representative symbols in nativeland. There's still an interpreter running in interpreted mode otherwise things like dynamic code wouldn't work. However, its much faster, much more compact and it's about as close to pure native mapping as you can get.

We're obviously still got plenty of room to improve this and working on that. So far in our latest 1.0 testing, it's almost indistinguishable from the same objective-c direct code (since in most cases it's exactly mapped to that). From a CompSci standpoint, we can now however start to optimize things that a human really couldn't easily do that - much like the GCC compiler already does today.

Conservatism answered 18/3, 2010 at 16:53 Comment(4)
Wow, this really sounds great. Thanks for the clarification. I never imagined that so much effort would have been put into AppCelerator. Keep up the great work!Antibes
Did I get this right that there is no Javascript->Objective-C and Javascript->Java conversion taking place but this is directly to native code? So there is no way to have a look at the created Objective-C or Java code?Hereditable
Is the compilation done on Titanium's server? I saw that Wikipedia en.wikipedia.org/wiki/Appcelerator_TitaniumAppointment
@djaqeel clojure,scala,jruby,nashornDictionary
B
3

Like jhaynie said, the application is compiled into native code, but there is still an interpreter in-place to run some javascript, which allows the application to be very dynamic.

appcelerator titanium

Busy answered 28/4, 2011 at 15:39 Comment(0)
D
1

If I package my simple ample code I get a ~80MB gzip archive (original Code ~1kB). Within the package - among others - you can find my source html and js files. There are also a lot of libraries (ssl for example) shipped with the package (because you can have low-level access to a lot of things within this framework).

I think that they take your code and wrap around some kind of interpreter software and libraries. In my case it would be like if I pack my html and js code next to a tiny browser that only displays my site.

How ever, as long as the code works on every supported system in the same way its a nice thing.

Dogfight answered 16/3, 2010 at 20:9 Comment(3)
When I open the .ipa that Titanium creates I see what appears to be a standard compiled app. None of the HTML or JavaScript code can be found.Caskey
I think what you described is what Cordova does, but Titanium works differentlyBey
pack html and js code with a tiny browser... and electron is born 5 years later.Dominique

© 2022 - 2024 — McMap. All rights reserved.