I'd like to look at good (not only full-featured, but also well designed) cross-platform mobile applications. I'm not so much interested in games as in apps that need to conform to the conventions of each platform's mobile UI. What open source apps using Phonegap, Titanium Appcelerator or similar have you admired recenty?
Are Phonegap and Titanium the preferred way to go for cross-platform mobile development? If not, what are people using these days? (I don't want to hijack this Ask HN, so please ignore my question if I already have a couple of replies.)
The company I work for recently decided to develop some cross-platform apps. After researching a few different things, we decided Cordova (Phonegap, but not branded) best fit our needs.
Aside from Titanium, we also looked at MonoTouch[0] and Xamarin[1], which I believe (didn't completely read through) is built on both Cordova and Mono.
If you were building from scratch, maybe another one of those would make sense for you. We are working within an existing project (mixed native and webview), and Cordova seemed to best fit our requirements there.
I wasn't sure if it was Xamarin or another framework that was ultimately using Cordova underneath. After reviewing their docs a bit more, it appears Xamarin was not the framework where this was the case.
Did you evaluate cocoon? On my tests that was the fastest although a little buggy. I think if I built from the ground up targeting that it would be the best?
We hadn't, but as one of the other comments mentioned, that seems to be game-development focused, which is unfortunately not what I'm working on. I'll keep it in mind for side projects, though.
I recently used trigger.io on a project. It doesn't seem much different to phonegap. Their Reload feature was useful because we had a tight deadline and many iterations but documentation was sparse. Most documentation links 404'd or referenced older versions so I end up having to manually search. If you're on the cheapest plan like I was then you only get community support, which was no good. Stackoverflow based but many questions are unanswered. There's just no community as far as I could tell.
Also their trigger toolkit interface was messy. Browser based. Sometimes I'd enter data into one field only to have it clear other fields.
They compile remotely so if you're looking to tweak configurations in xcode (like you can with cordova) you'll need to opt for some of their modules (like plugins are to phonegap/cordova).
We have an internal framework sitting on top of appcelerator's titanium that makes our app look at exactly the same on iOS and android. I mean exactly the same. The app specific code does not need to think about what platform it is on. We do this because titanium does some of the leg work but -rightfully- not all the leg work in achieving that. We get close to native code performance (better performance than Phonegap - tried that first - because its native controls). We have a large data layer and phonegap performance just degraded way too far with the amount of data in play that we needed.
Unless a unique UI is a selling point of your app is that really desirable? After all, Android and iOS user interfaces have (somewhat) different conventions.
They are getting closer and closer so we're at a somewhere in the middle design where it doesn't really feel out of place on either platform. In some areas you can admittedly tell we leaned heavily towards iOS (i.e. pickers). Three factors led us this direction.
a) We're a small company, we can't make having separate android and ios teams feasible. Writing and maintaining a single code base and separating out ui/platform concerns from that was ideal.
b) User training is much simpler if the app walks and talks exactly the same way when you have a large number of not-necessarily-technical users. Especially when some of those users may have android phones and iOS tablets and hop between the two.
c) Similar to b, customer support is much simpler when things work the same way and look the same way, again, especially for not-necessarily-technical users. Sending screenshots, directing over the phone or email, etc, all get much much simpler.
I'm currently working on a project where we started with Trigger.IO but moved to phonegap simply because more people have used phonegap, so the documentation is a lot better.
Also, depending on your target user group, you may want to checkout out Ionic (ionicframework.com). It's a mobile-first front end framework built on top of AngularJS. I've been using it on top of cordova/phonegap and it's easy to get up and running with and very performant (on the modern devices it supports). With Cordova and Ionic, our app feels very close to native on iPhone 5+ and high-end Androids
I'm using LibGDX for writing games (although you could of course write other apps). They have fairly recently added RoboVM support for compiling to ios and it's amazing.
I literally loaded up my code in Eclipse on a Mac, right-clicked and ran, and there way my game, running on the iphone emulator...
Untappd is one of those apps with an uncanny valley. It feels not quite native because some of the gestures and view transitions are slightly off vs a 'true' native app.
I'd say this applies to all good non-native apps. The whole native vs. non-native debate is completely moot from a consumer point of view. It does, however, keep developers employed.
Ionic is a relatively new framework that plays nicely with PhoneGap to help you produce pretty looking apps that behave similarly to native apps. It is "open source front-end framework for developing hybrid mobile apps with HTML5."
I have actually tried Cordova for my app using angular and ionic. We failed miserably.
We kept hitting cases where we need something from native and we had to write native plugins. Developing native plugins is no fun task and in fact very painful to develop.
So we then tried writing native apps. We actually did it faster with developing a separate iOS and Android app. We are very happy with the result. The big bonus was that we are now able to conform to platform UI interactions better now (ionic does things in a very iOS way). The debugging facilities with native apps are way more awesome than cordova (which hardly has any on android. and it's hard to debug cordova stuff on ios too)
We're experiencing this quite a bit, and have only been in development several weeks. After writing native for so long, I just feel so dirty having to create a plugin for every little thing I need, and the code becomes callback hell since plugin execution is asynchronous...
And the terrible thing is the plugins integrate very badly with the Cordova/plugman toolchain. We have plugins in separate repos. The repos itself cannot be compiled by themselves because they are just source code without any app code. I found no best practices on how to do this.
I am surprised no one has mentioned steroids js from appgyver (http://www.appgyver.com/steroids). It's sort of a blend between titanium (native controls with a javascript api) and phonegap. That way you can write a truly hybrid app. I've played around with it a bit and I have to say that it seems like the best of both worlds. Plus the documentation and onboarding is stellar.
Rdio is an app written in Titanium, I really like it. However, you notice its not fully in new-style nadroid without the native DrawerLayout. HTML5 is really not good enough for killer mobile apps.
They're using Xamarin, according to their showcase site. This video mentions before that, they had four different codebases for four different platforms: http://www.youtube.com/watch?v=oETiK-v7rkE so I'm guessing that means native development.
I would not call the DrawerLayout a sine qua non of good Android UI. A couple of years ago Google's official advice for a "navigation hub" in an app was to make a dashboard Activity. It quickly became obvious that a dashboard Activity is a nowhere-land where the only thing you can do is to go someplace else where you can do something.
The drawer UI pattern is basically a dashboard in a more textual style, which is hardly an improvement for immediate recognition of what's what, and it functions pretty much the same way. I predict the drawer will last only a little longer than the dashboard as a UI fad in Android. It is also widely abused as a mix of navigation and action. Ugh.
We found that both Xamarin and Corona work really well depending on your needs; much better than Cordova for practically anything. Because sometimes clients demand it we have used Cordova and Appcelerator in the past but now we simply refuse; it creates horrible stuff which feels and looks bad unless you sink so much time in it that you could've written in natively for every platform 10x over. It's ok for fast prototyping but actually both Xamarin & Corona beats them there easily too.
The Wikipedia mobile client is a Phonegap app. But it, and most such apps, are basically more-elaborate Web wrappers around a Web site's content. While they might adequately not offend each platform's conventions, they are not exemplary w.r.t. platform UI capabilities. It would be very hard to make a cross-platform app that uses Fragment and multiple layouts in a way that really captures the power of those UI capabilities.
I would hardly call the current Wikipedia app 'best' - it is rather quite terrible. I'd know, since I wrote most of it :) We're rewriting it all to be completely native now.
It was one of the few widely used open source Phonegap apps I could think of. I agree going native is the right answer. There are some cases where a cross-platform app is the right answer on all platforms, but that's a pretty narrow set of cases. If an app is fairly popular, it's worth doing a native implementation.
Our http://wearscript.com project for Glass and wearables has some similarities to phonegap (we called it GlassGap at one point) but has different design goals (e.g., live coding, pub/sub communications between devices, etc).