Cross-platform UI is a bad idea on the desktop. Cross-platform UI also is a bad idea on mobile. We need to learn from the past. Cross-platform UI is a conceptual mistake.
An app that has an icon on the home screen is perceived by the user as "an app", no matter if it actually launches the browser without the toolbar, if it is a web app wrapped in a PhoneGap shell of if it is a native app. To the user, it's an app. It has an icon, so it's an app. The rest are implementation details that the user doesn't (and shouldn't) care about. So if the user perceives it to be a native app like all the other apps, it has to behave like one. Otherwise the user will be disappointed. Web apps that mimic native apps simply don't behave exactly like native apps: Imitating native UI with web technologies on a mobile device will only disappoint.
A long time ago when iOS dev tools were immature Joe Hewitt created https://github.com/facebook/three20. I can't find the source, but somewhere Joe is quoted that so many of the early Facebook application reviews were about how so much of it was derivative.
There is absolutely a place for this kind of library and if you pay enough attention to the details (sweat every pixel and animation) I fully believe that you can achieve an experience that would be completely indistinguishable from iOS.
Notes:
1. For this to work you should be using something like Ember as your front-end framework, not jQuery Mobile.
2. I'm not pushing this as dogma, I'm just very glad that it exists within the ecosystem.
As someone who spent years building "HTML5" JS mobile apps and then recently spending the time to learn native languages, I 100% agree. There is no way to match the performance and consistency of native with a cross-platform clone. It will always be a half-baked solution.
That being said this only applies to apps. A ton of apps shouldn't be apps, they should be well-optimized websites. For ex. content sites.
Side Note: Learning Objective-c and Android java dev isn't nearly as bad as I thought it would be. It takes less time to learn and build native instead of trying to hammer Javascript into a hole it doesnt fit into, and spending hours attempting to optimize it's performance to no end.
The additional code involved in Java/Obj-c is less annoying since they are well integrated in IDEs such Android Studio or Xcode which auto-generate most of the boilerplate. After you develop for a while you depend less on the IDEs.
I always build an app to learn the language/platform. The only way you can really learn it is by building something. Combined with that I usually buy a book.
For Android, I hardly had to invest any time learning Java, since I came from Ruby and it's pretty similar. Most programming languages are all the same under the surface. Especially among OO-heavy ones.
I fully agree. As stated in my article http://www.springenwerk.com/2011/09/thoughts-on-mobile-ui-de... I think that the web is the one place where cross-platform UI actually works. Don't destroy it by using that freedom to mimic a native UI. Plus, in quite a few cases a great mobile website would be a much better solution than an app anyway.
I totally agree. We need to learn how to use the right tool for the job.
If your job is to cut down trees you wouldn't say "Well, I know how to use a pocket knife and I think a pocket knife is much easier to use than a chainsaw, so I'll just cut down trees with my pocket knife."
No, you'd obviously invest a little time to learn how to use a chainsaw to get the job done properly.
I think this was true a year ago, but mobile browsers are getting better and projects like this and Ionic (ionicframework.com) are quickly closing the gap between native and HTML5.
"Never" is much too strong a word to use, but I think that it is very very very unlikely that any major mobile vendor (Apple, Google, Microsoft) will invest much time and money to make the web a first-class citizen for apps on their platform. Each company wants to offer the best experience on THEIR platform and offer features that are only available on THEIR platform so that more developers develop apps for only their platform which in turns means more sales of their products. They are interested in exclusivity.
True, but I do think the platforms will continue to invest in browser technology and processors will improve. I am amazed by how fast Chrome is improving and the type of experiences it is enabling.
Is it? At the end of the day, that's what the web is, right? Gmail (or even Google Docs) may or may not be your favorite email client, but I don't think it's necessarily a bad idea, per se.
I think you're right about user expectations on mobile. I also agree that we've all seen how terrible the UIs on some cross-platform Java and Flash applications are, but—given the success of the web on the desktop—I'm not sure it's fair to condemn cross-platform UIs on the desktop.
I agree that the web is the exception to this rule (see http://www.springenwerk.com/2011/09/thoughts-on-mobile-ui-de...). I quote: "Surprisingly, cross-platform UI works on the web. People are used to it. People don't think it's odd that GMail doesn't look like Outlook or Mail.app. They don't complain that the buttons on Twitter look different from the button of the other apps they use. They are able to use Google+ and Facebook although the UI looks "foreign" in comparison to other apps on their platform. Strangely enough, all those things that make cross-platform UI a bad idea seem to be absolutely OK on the web. Why is that? It has to do with expectation. When users open their web browser, they know that they are entering a very diverse space."
It's probably better to think of the browser as another platform. In the sense that users have specific expectations about how it behaves, what it can be used for and how to use it.
Attempting to build a UI shared between, say, Windows and the browser would be a bad idea.
Completely agreed. However, I think you're missing a point here. The purpose for pushing cross-platform web-app-presented-as-native development memes isn't to make apps appear the same everywhere in a pretense toward common user interaction; it's to commoditize the developer labor market in these areas. It's better for companies (but not developers) if it's easier and cheaper to hire from a broad labor pool to produce mediocre-but-good-enough products.
That might unfortunately be true. However, even that is a misconception on the part of companies thinking it is "easier, faster, cheaper" to create web-based apps. Building something with web technologies that's on par with native is hard and difficult work. It's a myth that it's so much easier and faster to build an app with web technologies. It could very well take longer and still have a worse user experience. Building a simple native app is, well, simple. It might be way more complicated to build it with web technologies (if you try to mimic native).
Whether you're hiring people based on experience with frameworks, or relying on Bootstrap, the central message is that you as a developer are easily replaceable. Experience is devalued in favor of what you know now. You aren't hired to think, you're hired to ship fast and break things.
I know I'm not alone in finding these terms unacceptable.
You typed your comment on a highly effective cross-platform UI, and I'm reading it on the very same. While there is a place for experiences tailored for specific devices, cross-platform UI also offers value, especially for fast prototyping and iteration.
Login to http://rdio.com in your browser. This looks and feels way too much like the native app to be native.
They cleverly designed an application that looks like Rdio, not iOS, Chrome, or Web, then wrapped it with window chrome that hooks nicely into the operating system.