7 ms·
Hi, I'm the CTO for RAVN. When we decided to jump into the mobile dev game no one in our company had any experience with Object C or Android dev. We knew we wan
by stevenou 15y ago
Hi, I'm the CTO for RAVN. When we decided to jump into the mobile dev game no one in our company had any experience with Object C or Android dev. We knew we wanted an iPhone app for sure, and probably an Android app eventually. I had taken a brief look at Objective C previously, and coming from Ruby/Rails, it looked less than trivial (memory management?! I hadn't done that in 10 years). I had heard about frameworks that would allow us to use JavaScript to write our app, and also allow for cross-platform development, so I started researching.
I looked at PhoneGap and Titanium primarily. We ended up going with Titanium for a few reasons:
- As you may or may not know, PhoneGap works by creating a sort of Safari "wrapper" that lets you write your app in HTML5 and JS. But the performance is crappy relative to native rendering. Titanium also used to work the same way, but more recently it actually compiles code written in JavaScript to native Obj C and Java. Clearly the benefit is speed.
- Even though Titanium only supports iOS and Android, we didn't really plan on ever developing for other platforms (e.g. Windows Phone, BlackBerry, webOS).
If you're looking into developing a mobile app, I would recommend taking a look at Titanium. To be fair, I had to write a little Obj C to hack geofencing functionality into Titanium (if you're interested in that: http://stevenou.com/post/17623116547/how-to-hack-geofencing-into-titanium http://stevenou.com/post/17623116547/how-to-hack-geofencing-...).
There were lots of pros and cons to using Titanium and I'd be happy to answer any questions.
- Kiro 15y agoDid you ever consider appMobi?
- stevenou 15y agoWe didn't specifically look at appMobi, but as far as I know Titanium is the only (relatively mature) framework that compiles to native Obj C, and is not just a wrapper for HTML5. The performance difference is enormous.
- Kiro 15y agoTo be honest I've only built games and in that sense appMobi has an edge with their DirectCanvas technlogy which speeds up the canvas rendering on mobile devices by 500% (according to them). I guess you don't use any canvas though so not really relevant in your case. Thanks for the reply anyway. I will definitely have a closer look at Titanium.
- braco_alva 15y agoIf you're making cross-platform games, you may want to take a look at playn, we have been using it for over 5 months, and it has been really easy to use and works really good, though some platforms are still a work in progress http://code.google.com/p/playn http://code.google.com/p/playn
- fufulabs 15y agoWhat plan did you get for Titanium? How was Appcelerator's geo features, is it comparable to SimpleGEO? Top 3 drawback vs going native pls. Thanks for taking the time!
- stevenou 15y agoWe're on the Community (free) plan. I haven't used SimpleGEO so I couldn't really say. Appcelerator Titanium just provides API functions to access native geo features like GPS. It also provides reverse and forward geocode functions but I found those buggy so I implemented my own using Google. I know Appcelerator recently acquired Cocoafish, which I imagine will provide much more comprehensive geo features for future Appcelerator devs. Top drawbacks: - Bugs/memory leaks. Since Titanium does memory management for you, you will occasionally run into memory leaks or bugs that don't make any sense, and there's not much you can do about it. Appcelerator isn't the fastest at releasing fixes either. - Using third-party SDKs is generally annoying. Want to integrate Tapjoy? Chances are you'll need to write a custom Titanium module. Same goes for just about every single SDK out there. You have to manually create the JS->Obj C interface (aka module). There is a Titanium marketplace where you can buy existing modules for relatively cheap, but it's only a handful of very popular SDKs, like TestFlight, Flurry, or Urban Airship. - Need to manually integrate new iOS features. Like geofencing, for example, I had to manually hack into the framework, so you're always a step behind in terms of the latest iOS features. That's OK for most people but when you do need a feature that hasn't made it into the framework, it can be annoying.
- jameshsi 15y agoThe app looks great, thanks for sharing. Did you guys come across any issues with Titanium's memory management? I'd imagine debugging could be a nightmare.
- doubleconfess 15y agoMaybe a blog post on the pros and cons of using Titanium is in order.
- blantonl 15y agoI think we're seeing it play out right here?
- mcrider 15y agoWhoa, didn't know Titanium compiles javascript into native code. Cool! But Phonegap has a pretty rich set of plugins and its relatively painless to extend Phonegap's functionality with a plugin. Did you have to hack in your geofencing capability? There's no plugin framework?
- stevenou 15y agoThere is a module framework, but since the Titanium framework already created a CLLocationManagerDelegate in their GeolocationModule, I didn't see a clean way of adding geofencing in a separate module. So I hacked it right into the existing GeolocationModule. Again, the performance difference between native code and rendering HTML5 is huge, and that's why we decided against PhoneGap. Personally, if HTML5 wrappers were the only option, I probably would've just sucked it up and went native Obj C. Like someone else mentioned, there are a lot of challenges to making an HTML5 app perform like a native one.
- robterrell 15y agoNo, Titanium doesn't compile to native code. He's using that as shorthand for "Titanium uses JavaScriptCore to implement a bridge that lets your JavaScript call native code". Your JavaScript remains interpreted (and will not be JIT compiled, as in Safari, since your app won't have the JIT entitlement) but in my testing of JSCore it's not generally a bottleneck.
- silverlight 15y agoIt's been 4 or 5 months since I switched from Titanium to writing native Objective C myself, so things may have changed since then (but I don't think they have). It's a misnomer to say that Titanium "compiles" Javascript to Objective C. Titanium lets you write Javascript that executes using JavascriptCore (a Javascript processor that is part of iOS) on iOS, and I believe V8 on Android, but I could be wrong on that. Then, they have bindings in Objective C (and Java). So when you call in Javascript Titanium.window.create();, the relevant Objective C is executed by the bridge. This is all fine and dandy until you start doing something more complicated than displaying a few windows. For example, our app needed to have some complicated TableViews with highly customized rows that needed to be re-generated on each draw. Executing the logic for that in Javascript has a huge penalty hit. So while I would recommend Titanium over PhoneGap any day, it is not true that it is a "compiled to Objective C" sort of thing (again, at least it wasn't 4 months ago, and I was using at that time 1.80 which was the super-bleeding-edge-dev build, because I had a ton of issues with random crashes in the 1.7x series due to the Titanium Database module not being completely thread-safe at the time). Sorry to hijack. EDIT: Just to confirm, 1.81 is the current "stable" release, so what I was using 4 or 5 months ago is what is the standard now. So it does not compile Javascript to Obj. C. Also, for an example of the random crashes we were seeing, see: http://www.juliusbuss.de/web/youatnotes/blog-jb.nsf/dx/quick-tip-for-titanium-developers-use-1.8-sdk-instead-of-1.7.5-to-avoid-random-crashes.htm http://www.juliusbuss.de/web/youatnotes/blog-jb.nsf/dx/quick... A lot has been fixed in the 1.8x series, but at the end of the day you're still depending on someone else's middleware to behave and not crash your app for no reason. In case anyone decides to go down the learning Objective C route, learning with the excellent "Programming iOS 4" book took me about 1 month from the first page I read to having the whole app re-written, so it's really not too terrible. You don't have to do any of the memory management stuff anymore with iOS 5 and ARC, either.
- stevenou 15y agoThat's true. It doesn't exactly "compile to Objective C." But it's an easy way for people to understand the basic concept. The performance is much closer to full native than full HTML5.
- 15y ago
- apaprocki 15y agoTiny feedback: Your homepage renders incorrectly for me on Chrome 17/OSX. The screenshots which are lined up to cycle on the phone display bleed through vertically all the way down the page.
- jschmitz28 15y agoTo add to this (Chrome / OSX), clicking on the 4 buttons on the left side multiple times breaks the scrolling. The more you click it, the longer it breaks. I noticed this exact same bug on that stop SOPA banner (featured on HN about a month ago) which also caused a page scroll when clicked. I wonder if the issues are related?
- vena 15y agothe same issue is present in the current Firefox Aurora build.
- LokiSnake 15y agoA friend recommended your app to me a few days back, and here's my impressions. At first glance, the UI looks great, but it doesn't feel right. The big one for me was how I must start a swipe from the picture of the event, not the edge of the screen or the bottom portion with the profile pictures. The UI looks and acts almost like a scroll view, but not really. Going into an event's View Details view, there are items in a table I can tap to view more details, such as See Full Description. Native iOS behavior is tapping will drill down immediately, and things can load slower if needed. It seems like there's a bit of a delay between a tap (when the table item flashes) and when the drill down happens. This time varies seemingly randomly, and can be up to a few seconds. It makes me wonder if the tap actually registered, even if it does flash. The idea for the app is great, but I stopped using the app at that point because it's frustrating to have to change habits formed from using pretty much all the other apps on iOS. It's something to consider when thinking about using some non-native framework, especially for something like iOS where apps generally follow a set of human interface guidelines, as any difference in behavior can stand out like a sore thumb to users. Is this something that you guys noticed or thought about internally during development?
- stevenou 15y agoHey LokiSnake that's some good feedback, thanks! I have to say I had not noticed the first issue. But now that you mention it I guess it's true. The second issue is something I have noticed occasionally. I guess I'm always testing on WiFi so it tends to load quickly enough that I never considered it problematic. Definitely worth taking a look to improve the usability there. We tried to follow iOS design conventions as much as we could, but I guess we haven't quite nailed it yet!
- deleted 15y ago[deleted]
- jakejake 15y agoBeen using Titanium for a little over a year on an app for our company. By all definitions our app is very simple - a login form, tableviews that drill down two levels and webview. Our customers like the app and it works great, does exactly what it's supposed to do. iPhone development seems to go pretty smoothly. Debugging is fast. On Android it's a nightmare. The emulator is so slow to launch for one thing. It reminds me of developing a site and then when you're all done, testing it on IE6 and, surprise, nothing works! That's been my experience anyway.
- trabianmatt 15y agoWith Android it's like testing 10 versions of IE6 -- every device/OS combo seems to behave differently. Android development with Titanium was much easier when I started using a real device, but it's still much slower than iOS development.
- jakejake 15y agoamen brother!
- JohnIdol 15y agoSpeed is not the only benefit of Titanium. I recently submitted a phonegap app it was rejected on the basis that "It would be appropriate to add iOS specific UI and functionality". I am pretty pissed-off. You made the right choice.
- johnx123-up 15y agoCan you please compare Titanium against PhoneGap? Are you sure that Titanium really compiles to native?
- alphakappa 15y agoThe app seems to be great, but unfortunately I'm hesitant to find out since it requires Facebook to do anything. I really don't want an app to be posting my activities on my Facebook wall - Maybe there's a choice in the app, but I can't really tell. So, until you guys figure out a way to make the app functional without me having to connect it to my Facebook account, I'll just have to give it a pass.
- stevenou 15y agoFacebook is not required to use the app.
- skat_et_dieu 15y agoDo you guys realize that webOS apps are written in web languages (HTML, CSS, Javascript) so it would not be very difficult to port your app to webOS. More than that, if you write it in webOS' Enyo framework and use Phonegap you could have your app ready for iOS, Android, webOS, Blackberry, Chrome Web App Store, and the MacOS app store very fast and easily.