I am planning to develop an mobile app (my first one) for multiple operation systems (including Android, IOS, WindowsPhone) – in the wild internet I found a framework called phonegap, as a possibility solution to minimize the development process.
I understand the advantages phonegap has – but could not find real downsides…
1.) So the question is why should I not use phonegap?
2.) Is phonegap only slower, because it is wrapped inside the OS, if yes how much slower? I mean can you really tell the differentce between a native app and phonegap, or is only slower when you need hardware acceleration e.g. for gaming?
A few more informations about the project. Currently I have several ‘.Net’ services and provider, communicating via WCF. The App should be able to receive and send video streams and audio data from and to a service, such as a provider would do.
3.) Is it possible to use phonegap for that, or shall I stick to native apps?
All cross-platform frameworks (including HTML) generally share the same advantages and disadvantages.
- Write code once that works the same on every target platform.
- The way it works is often not that wonderful.
- Generally lower performance than native implementations.
- Some also have their own widget set that looks out of place.
- Due to individual platform quirks, you still have to test everywhere.
- You get lowest-common-denominator access to features. When a native feature is supported, often you can only access it in one way: the portable framework’s way. This is sometimes at odds with the target platform’s preferred way.
- In the event that you may access features unique to a target platform, you lose run-everywhere portability.
- Every so-called “cross-platform” framework is a platform in its own right. See earlier point about quirks: Now, instead of having to know N platforms, you have to know N+1.
For best results targeting multiple platforms, I recommend the following:
Design your core logic (the part that doesn’t use any UI) cleanly, with a well-defined API. Make it general enough to be fairly easily ported between environments. (Is SQLite really that different in Objective C vs. Java?)
Design your UI following the best practices of your target platforms so that it looks great (and fits in) on each one. (For Android, see http://developer.android.com/design) Have the UI interact with the core logic via the API you created.
I have developed both natively and in HTML wrappers like Phonegap. While Phonegap is nice to reduce having to code in 2-3 different languages, and make changes to 2-3 code bases, if you expect to have an app that people want to use stick native. I was actually just working on an app in Phonegap and eventually rewrote it all in native code because it just wasn’t good enough for expectations.
While your game or app might be great ‘for a HTML wrapper app’, in the end everyday users will only notice the slower loading and reaction times, even if they are very slight.
IMO Phonegap should only be used for apps that do very minimal data manipulation (display & editing) where no intense processing is done (ie games).
The app market is extremely competitive, and all of the big top apps & games you see are all native code (they are for a reason).
Adobe’s AIR platform is an excellent alternative to phonegap for write once deploy anywhere instead of native apps. It also has excellent hardware acceleration features. It includes a webkit implementation so you can use web standards if you want and the open source apache flex project offers a lot. Flash builder is am excellent coding environment based on eclipse. Besides the large strides in gaming we’ll probably see more data driven AIR apps soon as well. As3 is object oriented and very nice, plus the massive tool set from flash pro for animation to illustrator and photoshop are world class.
I work at a company that needs too, every app, make all possible versions of mobile versions. Really, if you need to work with specific types of apps like, radio streaming, GPU access, camera filter or whatever you can name in.. go native.
In my personal opinion, phone gap is really slow, even on android. I don’t know if it’s because i work with iOS, or i have high standards. Work with native will always bring you more quality to your app.
I understand the use of phone gap to make things faster, but only if you’re making a simple mobile app.. with only information or some forms to display.
To the hardware/software side, you’ll find more easier to develop this stuff natively. iOS has nearly everything on hand to you. I don’t know about android, but should not be that complicated too!
Phonegap uses WebViews, so it is a Website which you are building and wrapping into a native container to deploy it on the app store.
For basic Apps and if you are a web developer it’s good to have this way of developing apps but if you want to have the full advantage and native character of the target os it’s much better to develop native applications.
Hope that helps.