Would you use PhoneGap again?
grobmeier.de
grobmeier.de
This isn't so much a commentary on PhoneGap as much as it is HTML5 as an application platform. The bar for an application tends to be much higher than a web page; a fantastic web page may be pretty shit when compared against the app bar. Users have fundamentally different expectations around responsiveness, interaction and fluidity for an app that they had to go install as opposed to a site they visited.
Apps demands certain responsiveness, and replicating that behavior in HTML is exceptionally difficult and leaves the user with a bunch of UI behaviors that are close, but not quite right. Fluidity in user interactions, specific scrolling behaviors and so on that are exceptionally difficult to replicate across platforms.
A browser is also a pretty leaky abstraction. Targeting an API level in Android guarantees a specific set of behavior and functionality, but targeting a browser offers no such guarantees. The Samsung Galaxy S2 has a modified fork of Webkit that provides device-specific app problems within the same versions of Android, which make releasing a quality product pretty difficult to guarantee.
And, of course, different screen dimensions are a problem. Android devices can range from variable aspect ratios with a minimum width of 240px all the way up to 1280px. Responsive design is a bit of magic that can be sprinkled on to help make things work better, but that's a substantial bit of effort relative to using the native UI tools for each individual platform.
edit: Another challenge with PhoneGap applications is targetting iOS. HIG without designer assistance is a challenge, and this particular gem in the iOS approval guidelines is somewhat damning: 2.12 Apps that are not very useful, unique, are simply web sites bundled as Apps, or do not provide any lasting entertainment value may be rejected.
Also, do you really think adding media queries to the stylesheet(s) is "substantial relative to native tools"? Taken holistically, I would think that when you're targeting multiple platforms, you expend much greater effort building natively for each platform. Using those native UI tools to provide a good experience for variable aspect ratios actually entails knowledge of different languages, build tools, runtimes, standard libraries, third-pary library ecosystem, and best practices related to all the above.
I've also found performance to be an issue, especially if you're using animation-heavy UI to try and simulate a native experience.
Lately I prefer Xamarin's approach. The downsides have been discussed in this thread: cost, and you lose some of that open source advantage (also perhaps binary bloat--I haven't had a chance to check that out). But I think writing views separately but having common core logic, networking, etc., meshes well with how I want to work.
HTML5 is great, and I enjoy using it for web sites. But I've just never been able to get fully satisfied with it in the app space. Maybe someday!
In short, saving time is a worthy goal, surely, but producing the best quality output you can is also a worthy goal, and those two have to be balanced as appropriate for any given project. I feel that PhoneGap leans a little too much in one direction and I'm hoping Xamarin can help me find the sweet spot.
I think summarizing responsive design as adding media queries oversimplifies things a bit. The test overhead for PhoneGap is enormous; deploying fixes to an app is much more difficult than deploying fixes to a site, and individual devices can exhibit bugs that other devices won't within the same Android version. Adding different levels of responsive layouts multiplies that effort. By the end of one particular PhoneGap project, I literally had a dozen different devices on my desk to assert reasonably small changes.
The browser as a leaky abstraction thing also continues to be a pain point. One particular difficulty I had with PhoneGap was Android 2.3.x, in which div overflow scrolling isn't implemented (also, ironically enough, not implemented in WP8 IE10 when used in conjunction with the -ms-viewport CSS rule), requiring a design that either doesn't use scrolling elements, or emulates it with JavaScript. In either case, the native experience wins out.
Hitting several platforms with a good-enough experience may be an overriding priority, and you could certainly pick worse than PhoneGap to make that happen. For my own tastes, though, I'll be leaning on Mono for cross-platform efforts.
But as you said, Mono/Xamarin is a technically better option with the same ultimate goal. Though a couple trade-offs there are unavailability of the source and upfront licensing costs.
I have IOS/Android application that worked very well for us.
Yes, a PhoneGap app may never run as smoothly as a native app but I'm not ready to sacrifice the advantages that PhoneGap approach brings:
- Using HTML/JS/CSS for all platforms - I can strip all PhoneGap related calls from my app and have a mobile web app (which can run as a full screen web app)
And there're various tips and tricks to help you achieve almost native experience with PG (http://coenraets.org/blog/2013/05/top-10-performance-techniq...).
Imagine doing this in: - ObjectiveC for iOS - Java for Andriod - C# for WP - HTML/JS/CSS for having a mobile web app
Sacrificing some performance suddenly starts making sense.
Basically you write the core of your app in C# and then use the bindings to the native SDKs of iOS, Android, WP to build real native UIs on top of it. Its a bit more work and you need to learn C# (which is awesome) but imo its an optimal compromise between speed of development/maintainability and the resulting user experience.
You may decide that it's a fair trade off, but it's very important to understand and acknowledge that there are many externalities involved in this decision that may cause you trouble in future. There is a reason OSS is so highly prized...
If someone is interested in developing mobile apps using JS framework I would like to suggest dojox.mobile from dojotoolkit, it DOES have native themes ios,android 2.3, android 4.x holo (and maybe more), iv'e built a big mobile app with it and it worked like a charm - it's used directly + some of the app views are used in our native app(yeah we have that too) - to speed up development.
Most people don't realize, but most good native apps (not games) are only available on one platform. Only big companies and funded startups has apps on all platforms that are good.
Also, major problem with Phonegap is jQuery mobile and similar frameworks. they are heavy and makes app sluggish.
Android specially chrome browser is another major problem.
Despite all that, you can still create a very good app that performs well on all platforms.
I wrote this hacker news HTML5 app mainly for trial run to see if it is comparable to native apps. I only developed and tested on mobile chrome, ios and desktop browsers. r/windowsphone redditors told me it works pretty good on WP8 too.
What I have learned? - Android (chrome too), Firefox and Window Phone 8 - they need to provide better support for overflow scrolling. - iOS - Remove 300ms delay for click for mobile apps - WP8 - You can't fucking embed fonts in your phonegap app. It has to be hosted on remote server. Also you can't have ? in local urls (files that you are loading locally). It won't load those files.
"I was able to get my font/icon set to be recognized by Windows Phone 8 using base64. Make sure you use WOFF and TTF fonts as follows (where * are the long base64 strings):"
{{{<code> @font-face { font-family: 'icomoon-ac'; src: url(data:application/x-font-woff;charset=utf-8;base64,* * ) format('woff'), url(data:application/x-font-ttf;charset=utf-8;base64, * *) format('truetype'); font-weight: normal; font-style: normal; } </code>}}}
http://stackoverflow.com/questions/15819717/font-awesome-not...
Same guy stated in other comment that only icomoon working for him.
I am also including another font, and since that won't work, I am just gonna load everything from remote server.
I use jqMobi, now called Intel App Framework, to build a mobile website that targets all major mobile browsers. The jqMobi framework includes ~70 icons from icomoon embedded into its ui CSS. I needed a few more, so I initially tried to extend that by making another font file called icomoon-extra, uploading it to http://www.motobit.com/util/base64-decoder-encoder.asp to produce the base64 string and adding another @font-face to the jqMobi CSS. That didn't work for me, so i simply created a new icomoon-ac file that includes most of the original icons from the jqMobi icomoon selection, plus another ~30 or so icons that i needed. Now, i just use my icomoon-ac font in the framework and it works.
Regarding jqMobi, I absolutely love this framework. Much like the author of the original article, i looked at a bunch of frameworks. jQuery Mobile was my initial "no brainer" choice but it quickly lost favor with me because it was very difficult to customize. They really screwed it up, IMO. I looked at wink, joApp, dhtmlx, unify, uranium, embedjs, enyo, lungo, the-m-project, mobl, barleyjs, limejs, joshfire, lavaca, xui, zepto, chocolatechip, jQT, iUI. I ended up standardizing on jqMobi because it was based on a stripped down version of jQuery and it added a very logical and flexible framework for building mobile websites.
Yeah, it lowers the barrier to entry if you are a web developer looking to wrap your web site up as a native app, but if you have even basic skills in your target platform(s) it's very easy to replicate its functionality and you get finer control over how it starts up (which was an issue for one app I made) and your distribution file will be much smaller.
Would I use HTML5 to create hybrid apps again? For the right project, absolutely. I think other people have mentioned that there's currently no "one size fits all" solution on mobile, and JavaScript frameworks, associated tooling, and mobile browsers are definitely still in their infancy when it comes to building full-blown client-side HTML5 applications. This is one space where things are happening incredibly quickly, and even with what's available today(1), you can get acceptable results. For a small-medium sized business that simply doesn't have the money to develop and maintain applications targeting every platform (including web) hybrid development is a very appealing option.
(1) disclaimer: after some investigation of Backbone/Angular I was unimpressed with their ASP/JSP on the client model and rolled my own MVC framework, but literally millions would say I was wrong to do so
However, if you're looking at games or highsecuritt apps, you shouldn't even "try" with PG.
I think the author is spreading some erroneous information. - the delay in tapping is only because he doesn't know how to properly make webapps (ie using clicks rather than touch). - you do not "need" frameworks. only if you don't know how to do things yourself.
The objc language itself is one of the easiest [but not quite, entirely ugly] language I've encountered.
Being cross-platoform/mobile pays as well.
I think it makes a huge difference getting a formal education and just screwing around/googleing your way. When I tried to teach myself just using Google searches progress was slow and frustrating. But the second I switched to learning via Stanford's online courses in iTunes U, I was able to pick it up after just a few lessons. It really is a pretty simple framework after you get the core concepts down.
Sencha does, however, have a steep learning curve. I think thats probably why the author didn't dive into it deep enough to grok the themes.
The article hit that spot on. You'll spend more time getting the swipeable cell to bounce and swing correctly than working on the app. It'll be "cheaper" to work with someone who knows the native language. You could learn one of the native language and see if the app sells before jumping to another platform.
The bigger problem, IMHO, is that these sort of abstractions, like PhoneGap and Appcelerator (maybe Xamarin too? I don't have any experiences with Xamarin), most of the time will left you clueless when the app crashes.
I'd also like to offer a small piece of feedback concerning your first paragraph, where you wrote "more worse": http://www.wikihow.com/Use-Worse-and-Worst
This is a minor thing that doesn't take away from your well-researched post in any way. I'm only taking the time to point it out because I enjoyed your writing, and I think all writers can benefit from a little feedback.
They just recently added support for Sitefinity CMS using Icenium as well.