Hybrid apps: Do not copy. Do get inspired. Avoid reimplementing native UI
makehybridapps.com
makehybridapps.com
It resulted in a bad user experience then, and I think that still holds true today. Swing apps never felt right on any platform, even when using a native theme. It's probably no different for apps built using Cordova, too.
I can't help but chuckle at the fact that we're making literally the same mistakes we made eight years ago while claiming progress.
hmm..?
> After all, it’s another case of copying the looks and the two reasons mentioned earlier apply here too. It still is time-consuming and distracts you from thinking about your user’s actions.
From a development perspective this may be true, but from a usability/UX perspective, this definitely isn't. It's not just about copying.
The downside is: You can't use any HTML/CSS elements for building the UI. Because Ejecta supports only the canvas element.
The plus side is: If you manage to make a basic UI like in a "game" with canvas only, you'll get near-native performance, since Ejecta implements an OpenGL-enhanced canvas element.
I've been able to use PhoneGap / Cordova in my iOS projects and achieve ~60FPS, but I've had to stay within some constraints (e.g. use GPU-accelerated CSS animations). As suggested, Crosswalk is an interesting alternative for Android.
disclaimer: I work for famo.us, but trust me here. do a proof of concept of something with cordova and famo.us that in you prior experience was poor with just cordova alone.
I honestly haven't spent much time with Ionic and I have a conflict of interest, so take my position with a grain of salt, but AFAICT, thus far we (at famo.us) have spent more time building out the foundation (scene graph, perf optimizations, and physics engine integration) that allows a UI layer like Ratchet, Ionic or Material to be built on top. With that in mind, we haven't yet spent as much time on the UI layer, which is something we're doing now. Think: solid engine and architecture, but body work and trim in progress. Ionic (and Ratchet) on the other hand spent more time focusing on the UI layer, and is currently in the process of trying to modify the underpinnings to do the types of things famo.us is already capable of doing. Think: sexy looking car with an underpowered engine in the process of being upgraded.
However, again, my Ionic experience is pretty limited and a tad dated, so I urge you to do your own experimentation with both to see which best meets your needs right now. Personally, were I an outside developer, I would be choosing between famo.us and ReactJS instead of between famo.us and Ionic, since I'm personally "magic" averse and don't like tight coupling between the UI layer and the underlying layers that make that UI layer possible. The chrome on top is far less important to me (unless the goal is a quick prototype that I'm certain will be throwaway) than a solid modular architectural foundation that I comfortably know I won't be fighting as my app becomes larger and more complex. That being said, my broad generalizations here are based on my Ionic impressions from a few months ago. Things may have changed.
To further elaborate on what criteria I would use to choose between famo.us vs ReactJS, it comes down to this:
(1) Do I just need a (a) basic interface performance guarantee with discrete changes betweens application state and (b) greater backwards browser compatibility? Is my "app" going to be more traditional web app on desktop (vs Android and iOS like)? => ReactJS
(2) Do I need to make an app with not only a performance guarantee, but continuous transitions between application state (animations like those on capptivate.co), and will that application be largely consumed by people with relatively new mobile devices (smart phones or tablets, android or iOS)? => famo.us
Lastly, from what I've heard from fellow developers, famo.us and reactjs play pretty nicely together and we're going to be working on integration and tutorials between both, so it's possible that whichever one you start with today, you can add the other to get the best of both worlds. We're also starting work on an EmberJS and famo.us integration, so if you want a lot of the data and routing niceties of emberjs, but the interface niceties of famo.us, there should be tutorials and demo apps coming out in a few months.
Another option, which is very new, but gives you a lot of the reactjs benefits, but in a more modular packages that feel better to NodeJS developers is rayno's mercury project. It's still pretty new and documentation is lacking (which you can contribute to), but it takes the react ideas and breaks them down into smaller rearrangeable pieces.
That doesn't sound simple at all! That sounds super complicated...
Why not use jquerymobile and some css?
The market share of phonegap in hybrid apps is depressing to me. It's not hard to learn the Apple/Google sponsored way of doing things and then progressively decide when to bring in html/css in a webview.
I even open sourced a starting point I've used on my apps that I'm hoping will get more people to avoid using phonegap and learn iOS / Android: http://imbed.github.io/
Refs: http://dojo4.com/blog/why-phonegap-sucks http://dojo4.com/blog/imbed-for-android
There is way too much going on in XCode that a web developer wouldn't get or understand without having broad strokes glossing over the Interface, file structure, or behaviors included therein.
I've never wanted for better guides, books, and tutorials online for any of the languages I've gotten into. Specifically Golang and Java have both been much more approachable for me in recent months because I feel like I don't need a degree in rocket surgery just to open the IDE.
Maybe that's my problem. I'd rather not have to learn an IDE at the same time I'm having to learn a language. Now that I think about it, I also hated VS (but not Eclipse or the Jetbrains products).
Thanks, Doc ;) I think I just figured out my big problem!
But use native UI where possible.
[1] http://www.youtube.com/watch?v=ZC_rNie61IQ
[2] https://developer.android.com/guide/webapps/migrating.html
Also, iOS and Android since 4.4 have pretty good performances in the webviews.
Only 18% of users right now have 4.4, for comparison 14% are still using 2.3.
I've spent the last few months implementing a plain cordova app with Intel App Framework , google maps api v3, some css3 transitions, etc.
I've tested it on everything from Android 2.3.6 to 4.4, all work fine, no performance issues. Same on iOS.
Now if you are taking something you've written for a desktop (and are using desktop frameworks) or something that starts doing crazy DOM manipulation (or adds "shadow dom's", etc) then yes you might see a performance problem...
Additionally, if you are talking a physics enabled HTML5 game, that might be an issue. But a plain old app with some basic functionality will run fine. If it doesn't , YOUR doing it wrong.
My strategy is to use GPU-accelerated CSS transitions, test often on the real device and see how others are doing it, e.g. in UI frameworks (onsen ui, framework7, ratchet, etc).
I'm happy to see others having opinions on this subject.
Essentially i did the research for these combinations:
[Android devices]x[iOS devices]x[js frameworks]x[CSS frameworks]
It was hard and tiresome but the conclusion - same as yours - iOS works very well for cordova/phonegap. Android is a no-go!.
Among the frameworks I checked: backbone, ember, angular, ionic, topcoat and various other CSS frameworks.
All were slow on Android. Also discovered 4.4 introduces worse performance (acknowledged by google) which is solved with crosswalk. However crosswalk brings many bugs to the table itself.
Really disappointing - currently I'm opting out and going Native.
Why would we abandon an aesthetic (that as of the L preview) that is two of the best and cleanest looking interfaces on the planet?