I have a question about mobile application development. I'm wanting to develop an application for my Kindle and looking through the tutorials I found that HTML5 CSS and JavaScript could be used to develop Mobile Applications instead of native Programming language like Java, Objective C and so on.
Don't get me wrong I have nothing against learning a little more Java and the Kindle/Android specific APIs. But knowing that you could use HTML5 CSS JavaScript for the Android, Blackberry and iOS platforms AND WEBSITES sound very interesting to me. I've have also seen Game frameworks like Play'n from Google that seems to do a pretty good job with HTML5 and JavaScript.
My question is, is it worth the learning curve of each individual API, and programming languages or are HTML5 CSS JavaScript just going to change the way we do front end development?
Any input on this will be very appreciated.
In general it is worth learning the native SDK for the platform you're targeting because you'll have maximum flexibility, best performance, broadest API coverage keeping up with the latest advances from the platform vendor (e.g. iCloud, Siri APIs etc), and you'll find plenty of open source software that's built by and for the platform's native developers (see http://cocoacontrols.com as one example). So it's definitely worth investing in a platform's native SDK, especially if the platform itself is proven to be successful, such as iOS and Android.
However, sometimes it can be more practical to build an app using Javascript/HTML5 frameworks like Titanium Appcelerator. This can be useful in controlled environments like enterprise apps where your customer base is limited, or just to rapidly prototype a concept.
I would consider a Javascript framework a disadvantage if my app or game had to compete in the open market / App Store against thousands of other native apps. If my competitors are using native code and can rapidly evolve their UX or features, I don't want to be "stuck" with a limited Javascript framework.
On the other hand, if I worked for say, a large supermarket and my job was to create an app that only their staff would use for a few hours a day to do inventory, a Javascript framework would help me prototype faster without any threat of competition or unexpected requirements.
Hope this helps.
This topic can be debated forever but this is my take on it:
If you need performance on a device (such as for a complex game), then it's better to go native because you can fine tune to the specific device or set of devices and platforms you are targeting.
If you can build your idea and have it scale and function well using Web Technologies then it would be wise to continue using Web Technologies because it's extremely easy to scale to multiple platforms with relatively little effort.
If you want to leverage cutting edge API's for a specific platform then it's better to go native
Personally I think that if your app is going to be complex (doing beyond the standard enterprise data API stuff), then it'll be easier to go native in the long run. I've leveraged both methods and whilst Web Technologies were incredibly easy to implement and prototype, implementing anything complex increased the amount of effort needed by a large amount to the point that it negated any time saved by not going native. Eventually I just decided to concentrate on native apps but your milage may vary as Web Technologies are increasingly improving.
Related
I'm trying to build a web app that is as responsive as a native Android App. Is that even possible?
We tried PhoneGap and SproutCore and it is not responsive enough. Are there better alternatives? I mean how does, for example, AngularJs compare to SproutCore in terms of visual and all-around performance?
Angular and Topcoat seem to be working pretty good together. But I think ratchet framework is going to develop into something much better. It's fast and has lots of mobile like components.
There is also a nice youtube presentation about the possibilities from the first ng-conf, check that out too.
You won't find today an out-of-the-box framework to write HTML/JS mobile applications as fast as native ones. It's possible to obtain very decent performances with webapps, but for this you'll have to do some optimizations by yourself. At least, that's the conclusion I draw after reading this article from Sencha to have an idea about how they wrote a fast facebook mobile app clone, using their Framework.
Angular with some tuning as described by Scalyr may be very fast. Iconics framework could be of some interest for you too, as long as you limit your app to recent OS.
Be aware that performances with Android Dolphin web browser will always be disappointing compared to what you can get on iOS or with Chrome on more recent of Android.
I am quite confused with the info I read online.
Some say for IOS apps,
Apple restricts developers to writing iPhone applications in
Objective-C, C, C++ or JavaScript as executed by the iPhone OS WebKit
engine.
Apps must be originally written in one of these languages and may only
use Documented APIs in a manner prescribed by Apple. Only code written
in Objective C, C, or C++ may compile and directly link against the
Documented APIs.
while Android apps use Java.
Then I also came across jquery mobile for cross platforms. So I am not sure which route I should take for developing an app. I prefer jquery mobile of course as I think it is not ideal to use two different languages to develop an app. And it takes time to learn Java and Objective-C.
So I want to know - can I just use jquery mobile to develop an app for IOS or Android?
Below is tutorial on developing an app by using jquery mobile,
http://www.noupe.com/tutorial/jquery-mobile-tutorial-creating-a-restaurant-picker-web-app.html
Take a look at my other answers related to this theme:
Hybrid apps vs Native apps: Hybrid vs native apps/
Mobile App vs Web App - Apple no longer accepting web apps?: https://stackoverflow.com/a/14436328/1848600
Tutorials: https://stackoverflow.com/a/14375842/1848600
To make a story short. Hybrid apps are still more then acceptable in Apple app store, you just need to accept some guidelines like:
App must have native look and feel
Do not use 3rd party payment systems
Do not use server side technology to render page content, use ajax instead
There are a range of variables that you should consider before deciding which way to go, as the more you understand your business strategy and IT drivers, the better you will be able to decide which way to go.
Like
Performance
Usability
Maintainability
Budget
Time to Market
Resources
Even though the big corporates like LinkedIn and Facebook are ditching Hybrid, they actually are not [Another debate not related to this question]. Moreover, a lot of small and mid size companies go their own short and long term plans, spanning Hybrid and Native.
Like people will say that if you have small budget then go for Hybrid as you will be able to launch in multiple platforms, but on the other hand you have to think about the long term cost and many other parameters above.
The best Article that lays out, is following, really thought provoking
https://pixyflux.wordpress.com/2015/09/03/how-much-native-binary-vs-spectrum/
I'm going to make a native (meaning; not in the browser) mobile app. Since I'm a web-developer I'm struggling to decide whether or not I should try Phonegap or just build an native app in java or objective-c.
The app requirements are simple. GPS/wifi location, Facebook integration and I guess I'll need a database to handle some of the application specific Facebook-friend relations. Like the highscores in a game, for example - stuff like that.
I'm a web-developer, and don't know neither java or objective-c, yet. I've never used Phonegap before, so I don't know if it's capable of fulfilling my requirements.
So my question is as follows;
Can I use Phonegap for my app, or do I need to dive into a new language?
Related:
Larger version of this article can also be found HERE, to be transparent it is my personal blog.
Hybrid vs Native apps
Hybrid apps:
Pro:
Quicker development, especially if you're a a longtime web developer.
1 language can be used on every available platform. This, of course, requires a Phonegap wrapper. You don't need to learn Objective C, Java, or C# to do any development. You need only to understand the basics of the Phonegap implementation. You will need to play with above-mentioned languages a bit but you don't need to understand them.
Phonegap can offer some native capabilities like iOS native tab bar or Android native tab bar and so much more.
Lower budget costs and a huge community of supporters and developers.
A hybrid app offers many of the advantages of both approaches access to the most common device APIs, and broad device coverage while not requiring the specialized skills, bigger budgets and longer time to market that are more typical of fully native apps.
Cons:
You will piss blood after some time, literally and metaphorically.
Mobile phones (even today's tablets) are not fast enough to smoothly run a hybrid app, mobile JavaScript capabilities are bed at best. Android platform is a nightmare, page transitions don't work smoothly not to mention lacking CSS/CSS3 implementation. If you think native Android 2.X and 4.X have differences take a look a Android 2.X bad JavaScript / CSS implementation. iOS fares better but still has a lacking CSS3 implementation thou much better page transitions. To make this short native apps will always have a better user experience and general feeling.
You will spend much more time fixing the app then building it. Creating an app for each and every platform is a pain in the neck. Browsers on different platforms do not uniformly support all the latest HTML features and APIs, which can make developing and testing a challenge.
If you don't have a good designer, don't even try to build an app; looks are everything.
If you don't know what are you doing there's a good chance your app will not get permission for Apple app store. Even Google Play Store will ban your app if they discover a 3rd party Phonegap PayPal plugin.
Native apps:
Pro:
A native mobile app can produce the best user experience — fast and fluid, can give you the best access to device features, and can be discovered in the app stores.
Without a doubt, native apps have full access to the underlying mobile platform. Native apps are usually very fast and polished, making them great for high performance apps or games. This is more then enough.
Cons:
Bigger budget, you will need at least a person/s with Java and Objective C knowledge, even C# if you want a Windows mobile app. Yes you can learn it yourself but don't live under the illusion you will do so in a short time. If you have never done any development, choose Objective C (iOS is still a better platform). In other cases choose Java. Java has a syntax similar to other available languages, so it is easy to jump from C# to Java and vice-versa. Objective C is a world of it own. It has a rather uncommon syntax.
It might take you a longer period of time to develop all of them and time is money. This depends on the complexity of the apps.
In your case, if you have a good web development/design skills and/or have a good designer you should choose a hybrid app. Go native only if this app is going to be a complex one. Everything you want can be done with a hybrid app. And you will find a great and supporting community.
Hybrid apps
What I didn't previously mentioned you need to be specially careful here. Even if you are seasoned developer you will find a lot of problems you can't solve. Hybrid development should not be mistaken for a basic web development.
Every mobile platform has its own set of problems, not to mention that mobile phones behave differently depending on a device. If possible always create a app that works on a slower devices because native app will successfully work on almost any device.
There's one last thing, when creating hybrid apps, app development will take you about 30%-50% of your time, rest goes to specific platform debugging and learning. Believe me, even after several years of mobile development sometimes I am facing problems I can't solve alone or fast enough.
So be careful when choosing mobile framework, pick 2-3 and spend several days reading about them.
Links
Here are few links to help you decide:
PhoneGap + jQuery Mobile 1.4 tutorial - This is a step by step tutorial for PhoneGap and last version of jQuery Mobile
PhoneGap + jQuery Mobile 1.4 tutorial - MacOS version - This is a step by step tutorial for PhoneGap deployment on MacOS. jQuery Mobile part is covered in a previous article, no point in repeating things.
jQuery Mobile vs Sencha Touch - jQuery Mobile Sencha Touch comparison
jQuery Mobile vs Kendo UI - jQuery Mobile Kendo UI comparison
7 best known HTML5 mobile frameworks - Name tells everything
7 less known HTML5 mobile frameworks - Name tells everything
if your application does't have animation effects and simple i prefer to create in a web(Phonegap) cz at less amount of time we can launch in multiple types of mobile OS.
if your app contain more UI effects and animation then it is best to go with native..
even though you develop in webview(Phonegap) you need learn some basic steps in Android and iOS
How Phonegap performs in devices
Ios
The animations and view loading in ios webview is stranded and good, the animation effects can observer clearly
Android
We have to consider the device version and device company for android while running the html code, Some high config devices in android give more clear and efficient animation display, but some devices (mostly old version and some company devices) cant give good animation effects, rendering effect varies from device to device in android,
In my humble opinion with Phonegap you can just develope simple apps, nothing more. The documentation is not enough and like others have said you will spend much more time fixing bugs and finding plugins than building your app. I would make the effort to learn Android or iOS or whatever, look at it as an investment of your time. (Yes, my comment is a little biased).
Last I looked into it PhoneGap was all html,css, and javascript. So, you may feel right at home. PhoneGap can handle GPS location, see this article from PhoneGap's documentation. Whether or not you want to pick up Objective C would depend on how fast you pick up new languages as it is a bit of a departure from web development.
It totally depends on your needs
After publishing my first app several months (native Android, database driven, restful connecting app), I decided to rewrite my app by using phonegap (since I want to clone the app to iOS, so instead of doing it in ObjC, why not javascript ?)
When on Android, it costed me, a Java developer, 3 weeks to learn and code everything from scratch. Banging my head to the wall several times for how to make the ListAdapter sync with the Restful Service from my server, how to theme the app (quite hard in my opinion, especially when it comes to special effects like transparent, border,...), and also, how to structure your code base effectively (if you are familiar with Java, you will find that all the classes are very coupled to each others, since that is what most of the tutorials write about)
When on Phonegap, everything is done in 1 week. Css, html, with onsenui and angular make the GUI development just like about 1 st year student 's assignment and theming is just a piece of cake. I don't need to run it on the real device, just use browser during the development, change code and refresh are enough. Angular provides 2 way binding with the DOM, and this makes a huge awesomeness when collecting and showing data. For example:
<ul ng-each="for sentence in sentences" >
<li>{{ sentence.title }} </li>
</ul>
When the variable sentences is changed (retrieved from server), the DOM is automatically changed as well. However, javascript is only javascript. I found myself struggling many time when debugging the app, especially when doing the MapReduce functions with PouchDB (big mistake, have to go back to cordova-sqlite-plugin tonight) and most of the time, I have to read the log in order to figure out the problem (Chrome 's tools and Firebug cannot catch the breakpoint). Also, it is hard to restructure your app (javascript, again) so if you don't organise carefully your code base at the first sign, you might end up with a mess (and debugging is a real pain, again). PhoneGap is also Web based, so sometimes, you will hear that "because on this platform, it does not support that bla bla bla" (e.g, localStorage) and you have to stand for it if you cannot find any good plugin.
Conclusion Except for the limitation of the web-based storage, PhoneGap works quite well with the database driven, simple GUI app (and most of the database driven apps currently has a simple GUI anyway). If you gonna develop that kind of app, then stick with it
check out using ionic, backed by angular.js to offset some of the cons mentioned in the accepted answer. Tutorial for launching an employee directory app: http://coenraets.org/blog/2014/02/sample-mobile-application-with-ionic-and-angularjs/
#Gajotres wrote a great response, but hybrid app performance has come a long way since 2012. I answered a related question that covers the difference between hybrid and native app development in 2017.
The moral of the story is that hybrid app development has improved tremendously in the past few years, but it still cannot match native for certain use cases.
With tools like Ionic (first released in 2013) and React Native (first released in 2015) it is easier than ever to build hybrid apps with native-like components. Hybrid apps are now faster, less buggy, and able to interact more deeply with the native UI.
The threshold for hybrid app performance is substantially higher than just a few years ago, but there is still a point at which you may need to develop your app in a native language.
Original Answer:
Yes, the general sentiment is that Hybrid apps are inferior to Native
apps. While this can be frustrating for developers more familiar with
web technologies, it does come for good reason:
Inability to interact with native components: Although plugins such as cordova-plugin-statusbar exist, there are limitations
interacting with and manipulating native components using web
technologies. One great (and frustrating) issue I have personally run
into is the inability to have an input at the top of they keyboard as
the keyboard animates in. This sounds like a nonissue until you look
at an app where this is an essential feature such as in a chat app
like Slack.
300ms delay: Although modern browsers are beginning to phase this
out,
the fraction of a second delay present on Hybrid apps makes the app
feel slow and non-native. This issue is becoming less of a factor as
more users adopt workarounds such as
FastClick.js and some
frameworks such as Ionic eliminate it
by default.
The haters are right (sort of): While Hybrid app development has come a long way, there are still minor glitches and laggy
functions that are just not present in a Native app. Screen
transitions, app switching, and battery life are still common areas
for bugs to appear and likely will be for some time, even if they are
starting to become less and less noticeable.
There are some great Native solutions: With newer languages such as Apple's Swift it is becoming easier to
code in a Native language. That being said, tools such as React
Native fall into a gray
area between Native and Hybrid by allowing developers to code in
friendly technologies such as JavaScript but compile into native code.
The moral of the story is that it really depends what is important to
your specific use case. Hybrid apps have become a viable option and
are no longer an embarrassing side show. Conversely, there are still
minor aspects of interacting with the Native UX that are not yet
possible except with a Native app.
Overall, I recommend mapping out your project and determining if your
app needs any of the benefits of a Native app. With tools such as
Ionic View app it is easy to put together a
basic mockup of your app and test on a real device whether or not a
Hybrid app will work for you.
There's also AppGyver Steroids that unites PhoneGap and Native UI very well.
With Steroids you can add things like native tabs, native navigation bar, native animations and transitions, native modal windows, native drawer/panel (facebooks side menu) etc. to your PhoneGap app. Basically, anywhere CSS + JS don't cut it, Steroids reaches into the native layer to perform the action.
Also, with steroids, you can (although you don't have to) use multi-page architecture (multiple webviews) rather than single. With single page apps, all things like transitions are just CSS workarounds, and as Mani said, even modern tablets and phones aren't fast enough to make them smooth. It's always obvious when it's a phonegap app, especially when you've got a bunch of processes going, or if you're scrolling since JS processes are haulted (being fixed in iOS 8).
Using the multi-page architecture means you get 100% native performance (because those parts actually are native). And unlike phonegap, you'll get consistent user interface behavior and easier debugging (with a single page app, it's often difficult to recreate a particular state in your app). Multi page makes it far easier to develop and maintain your apps since your codebase stays cleaner.
Check the demo: http://youtu.be/oXWwDMdoTCk?t=20m17s
I also find a every good article here http://www.comentum.com/phonegap-vs-native-app-development.html, it compares these two ways in different categories.
The summary is as below:
Design of Interfaces (Same)
Cost (Hybrid has Advantage)
Development Timeline (Hybrid has Advantage)
User Experience and Performance (Native has Advantage)
Maintainability (Same)
No Limitations (Native has Advantage)
Security (Same)
Support and Resources (Native has Advantage)
Tools and Debugging (Native has Advantage)
Platform Independent (Hybrid has Advantage)
Popularity (Same)
One overlooked of the great options here is development with Xamarin.
Though it doesn't help to utilize OP's web developer skills, it has many pros compared to PhoneGap and almost no cons.
Xamarin vs PhoneGap Pros:
Mature framework providing access to the most (if not all) native
features of mobile devices.
Learn only one language (C# for the most developers) for all mobile
platforms.
Have a performance of native apps on iOS/Windows Mobile (since app is compiled into the native code) and very close one on Android (it still compiles to a native APK, but has to have a thin wrapper that translates .NET class library API into Android classes API at the runtime).
Maintained by Microsoft which supports the overall generous quality of the
platform itself and development tools. For instance, you will use Visual Studio and it's probably the best IDE around and now has free Community edition with every feature available that you'll need for Xamarin development.
Xamarin vs PhoneGap Cons:
Needs some time investments for pure web developers to switch to C#
and Xamarin class library API.
Therefore, Xamarin is a very solid option for cross-platform development nowadays.
We will develop a, social network integrated mobile application which will need to access native device capabilities but 90% of the logic will be implemented in the HTML5/Javascript code posted by Ruby back end to the device. Thus, we would like to update or change the logic/GUI of the app without user involvement. We have strict deadline and have to support iOS, Android and Blackberry.
In this case, what approach would you recommend us? We considered the approaches below but could not decide since we do not have any experience with mobile development even if we are experienced in Ruby, C/C++, Java, Javascript, Flex.
Our considerations:
Develop native apps for each platform and embed the native browsers
to implement our logic, which can take too much time.
Use one of the frameworks for cross-platform development such as
PhoneGap or rhomobile. In this case, we are afraid of facing some performance issues. We would love to hear the experience of developers with those frameworks.
Use Adobe Air for accessing the device and its WebKit component for the rest.
First, I hope you understand that there is no simple answer. At this junction, having been looking at cross-platform solutions for mobile development for two years, I feel that in order to get fully native UI look, and to access all the device and UI features, one is forced to produce native application on each platform.
But, since you asked about cross-platform tools, here's a list of the main contenders:
Sencha http://www.sencha.com/products/touch “Sencha Touch is the world's first app framework built specifically to leverage HTML5, CSS3, and Javascript”
Dojo http://dojotoolkit.org “Dojo saves you time, delivers powerful performance, and scales with your development process”
Phonegap http://www.phonegap.com “PhoneGap is an open source implementation of open standards”
jQuery Mobile http://jquerymobile.com “Touch-Optimized Web Framework for Smartphones & Tablets A unified user interface system across all popular mobile device platforms”
Rhomobile http://rhomobile.com “Free and open source mobile application framework”
Titanium from Appcelerator http://www.appcelerator.com
There are plenty of comparisons online, including on SO, and this fellow actually tried to use several platforms, code included.
Anecdotally, I have seen Phonegap produce a rather iPhone-centric look, that may not mesh well with Android, plus showing performance problems when loading screens (there may be workarounds via pre-loading). Also, access to more complex devices was limited, or at least lagging. Rhomobile is a good fit for data-driven apps (simple display of large databases), but architecturally could show performance issues, so check for yourself. Personally I did not get into Sencha, Dojo seemed a little small, and Titanium showed dated architecture. So next time I'm attempting a cross-platform app, I'll give jQuery Mobile a serious try.
Let us know what you pick and how it works out.
Iam using this rhomobile rhodes for my cross-platform development App which will run in Android, Blackberry and iPhone.
We have developed application and sucessfully runned in all devices without any issues. we used ruby for backend webservice call, And remaining app is constructed with HTML5 and java Script. I didn't face any issues regarding rhomobile.
intially we faced memory issues, But later on we resolved this issue by implementing local storage for our App. For android it wont supports local storage so we used Rhom Storage only for Android Device.
Sounds like a project doomed to fail.
If I were you, I'd build a mobile-friendly site for all 3 platforms if deadline is tight. What native features do you even need, first off? If it's something like a camera, you're better off just build a native app for all 3.
At our company there is a huge push for cross-platform (iOS and Android) development. Appcelerator Titanium is being considered (and seems to be the only thing that's being considered) to achieve multi-platform development without extra development time.
Everyone here can think of reasons to use Titanium. For reasons against using Titanium I guess the performance of the resulting "native" app from Titanium may not be as good as an app written in Objective-C for iOS. How significant would the difference be? Are there other reasons to not use Titanium (or equivalent)?
Note: I may write Titanium but reasons may not only be Titanium specific only. All reasons in support for coding in platform language (e.g. Objective-C, Java) qualify.
The Good:
Can create iPhone apps using very simple Javascript.
The Bad:
Apple has been rejecting some Titanium apps due to private API calls but Appcelerator hasn't responded to requests for help, nor updated their SDK. http://developer.appcelerator.com/question/123785/app-has-bee-rejected-by-non-public-api
"Native Widgets" are used, but only nominally: there's a layer of
logic and abstraction between them and your code; and this layer
changes their behavior and reduces their speed. The difference is
visible in the Showcase apps.
API docs are perpetually out of date. (no process for refreshing).
A wiki was created, which is becoming out of date. Editing only
allowed for employees.
Github projects do not have wiki enabled.
Appcelerator isn't true open source: they do not accept contributions from the community: The
titanium_mobile project on github has a long list of open pull
requests.
The help forum software has many technical & design weaknesses.
Email notifications from the help forum often do not work.
Staff rarely answers questions in the Q&A forum. Haven't been seen
in months.
Showstoppers appear continuously in "all the little gaps":
Correctly displaying images on the iPhone 4
Correctly loading images in a scrolling list
Although the platform does simultaneously support iOS and android,
the library/framework does not. A lot of runtime testing (if/then's)
is needed in apps that will work on android and iphone.
Continually releasing new products but not fixing existing products
and website problems. The "new" products are announced while in beta
and release candidate phases.
"Chat with Sales" app not attended to.
Appcelerator does not take down outdated training videos.
Stretching the truth and bait-and-switch with pricing: a 30% sale
only applies to yearly memberships, not month-to-month. The blog
posts & marketing materials do not state this. Only upon checkout is
this shown.
[Seen 8/13/2011] Another way in which Q&A forums are broken: The order of
results for a search is trashed: each page of results orders its hits
from oldest to most recent, at the bottom of the page. Go to the next
page of results (i.e. 51-100), and again, the 1-year-old hits are
first, with 6-weeks-old at the bottom.
My Unanswered Questions:
[Seven unanswered Q&A questions not shown: I don't want to be personally identified by Appcelerator staff
and receive sub-par treatment.]
Results:
Am spending many hours trying to discover an API in the absence of documentation, and hacking to discover workarounds. This time is wasted, and would have been better spent simply learning to make apps in XCode & Objective-C.
How significant would the difference be?
AFAIK, Titanium will generate Objective C, so unless their stuff is woefully inefficient, I wouldn't expect speed to be a major issue.
Are there other reasons to not use Titanium (or equivalent)?
Well, that depends on how you define "equivalent".
Personally, when I get into cross-platform apps, I expect that I will use PhoneGap. That's for one reason: standards.
With PhoneGap, you're writing HTML, CSS, and JavaScript, as if you were writing an HTML5 offline app. All PhoneGap does is turn that into an installable package (e.g., APK for Android) and give you opt-in proprietary APIs for getting to device-specific stuff. Their expectation is to simply fill in the "gap" between what HTML5 on mobile supports and what native apps on mobile supports. Heck, it's even in their name. :-)
As a result, what you are writing is the same sort of tech you would use for a Web-based app, and it may even get to share some of the client-side code. You can use whatever you like from mobile frameworks (e.g., Sencha Touch, jQuery Mobile). And, if someday app stores support HTML5 offline apps, you might even be able to drop PhoneGap altogether, if you're not heavily dependent upon the device integration features.
Titanium lets you write in JavaScript, but the standards compliance largely ends there. You're using proprietary APIs for everything, including the whole UI. Personally, I'd rather back a more popular horse -- HTML5 in this case, more so than PhoneGap specifically. If for no other reason, it'll be way easier to hire HTML5-savvy developers than Titanium-savvy developers.
Neither PhoneGap, nor Titanium, nor any of the plethora of other options (e.g., Rhodes, Flash/AIR) give you all of the device capabilities. These engines will vary in their extensibility -- I know that PhoneGap has a plugin model, that Flash/AIR is pretty much only what you get from Adobe, and I'm not sure about any others.
Titanium has one advantage: you get a near-native UI, instead of an HTML-based UI. (I say "near-native" because some of their widgets do not necessarily have native equivalents on all platforms, so they roll their own as needed) For some apps and some audiences, that alone may tilt things in Titanium's favor.
Titanium/iOS specific answer, my 2c.
Native iOS vs Titanium
PROS
It's nearly as fast as native for most things.
The time needed to write a working prototype it's way shorter.
If you need to integrate javascript legacy code or libraries it will work provided that it doesn't use the dom.
Your javascript code needs to be well spaced and to include semicolumns where needed or the compiler will complain and eventually abort the build.
You can use Coffeescript or any other language that compiles to js
Automatic memory management is top notch, getting the same results in objc is always time consuming and sometimes debugging intensive.
You can write your own modules in native code to extend Titanium's capabilities.
It's open source.
They recently changed their support offering removing the 5 app limit, much more affordable.
You can change a view js code while running the app in the simulator, you will see the results when you reload the view you're editing. That's a boon :) (exception: there's no way I know of to reload the code in app.js)
CONS
Debugging is a pain. Haven't tried out Titanium Studio yet, it might be a big improvement.
Adding too many views tends to degrade performance faster than using native code.
The Titanium Developer app on Mac has plenty of interface glitches and you might find yourself restarting it pretty often.
In some versions the print to console debug statements are broken.
You will often stumble into cross-platform abstraction leakage.
Support on the forums is a bit light, many issues you will encounter are not big but still annoying.
Need to pay attention to JSON correctness, the included parser tends to be picky. Using eval is always an option.
Compile times and loading in the simulator are not that fast, titanium objc is pretty big.
Compared to Xcode, Visual Studio & even MonoDevelop, Titanium Studio feels slow (real slow), buggy (restarting several times each day, even reinstalling a few times) and of course you've got to deal with JavaScript... We found that the pain of developing in Titanium was too great, especially when you have competent iPhone & Android devs around so -
We looked long & hard into the best option for cross-platform dev & ended up using Mono - Touch & Droid. It's been great, we do actually share 80% of the code between iPhone & Android, & we're just beginning a port to WP, which is going well (again sharing 80% of the code). Of course it's not a miracle fix - you still need to know how to develop for each platform. I've even grown to like C# almost as much as Obj-C now :-)
Obviously, some will disagree.