As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 10 years ago.
More and more mobile platforms are being launched and sdk's are available to developers. There are various mobile platform are available:
Android, iOS, Moblin, Windows mobile 7, RIM, symbian, bada, maemo etc.
And making of cross platform application is headache for developers. I am searching for common things across the platforms which will help to developers who want to port application to all platforms. Like what are the diff screen resolutions, input methods, open gl support etc.
please share details that you know for the any of platform.
Or are there possibilities, by writing code in html (widget type of thing) and loading it into native application.
I know about the android, in which we can add the web view into application by calling setContentView(view)
Please share the class details where we can add the html view into native application of different type of platforms that you know.
Purpose of this thread is share common details across developers. marking as community wiki.
Cross platform tools & library
XMLVM, Codename One and iSpectrum (cross compile Java code from an Android app or creating one from scratch
Phone Gap (cross platform mobile apps)
Titanium (to build native mobile and desktop apps with web technologies)
Mono Touch ( C# for iphone )
rhomobile - http://rhomobile.com/
samples are here: http://github.com/rhomobile/rhodes-system-api-samples
Sencha Touch - Sencha Touch is a HTML5 mobile app framework that allows you to develop web apps that look and feel native on Apple iOS and Google Android touchscreen devices. http://www.sencha.com/products/touch/
Corona - Iphone/Ipad / Android application cross platform library . Too awesome.
http://anscamobile.com/corona/
A guide to port existing Android app to Windows Phone 7
http://windowsphone.interoperabilitybridges.com/articles/windows-phone-7-guide-for-iphone-application-developers
Jquery MobileTouch-Optimized Web Framework for Smartphones & Tablets
My answer here covers some of the technical limitations of cross-platfrom tools but let me expand a bit:
I think that cross-platform tools have historically always been also-rans because such tools have the wrong philosophical focus.
All the selling points for cross-plaform tools are the benefits they bring to developers. They are sold on the idea that they allow the developers to write-once-run-anywhere. They are sold on the idea that they allow the developers to expand their market without learning new APIs. They are sold on the idea that they allow the developers to slash cost and time to market.
What cross-plaform tool are NOT sold on is the benefit they bring to end users.
Benefit to the end user is not a selling point because cross-platform development is seldom a benefit to the end user. The end user does not care how hard the developer had to work to bring the product to market. Nor do they care how many platforms the app can run on when they they don't use but one platform. They just care if the app does what they need it to on the hardware they need to run it on. Unless they have a specific need to run the app on many different platforms, the fact that it does brings them no value.
Conversely, the inevitable compromises of making a cross-platform API mean that all the apps created by the API will be at best B-grade on every platform. They will never be the best tool to use on each platform.
All this means that in most use cases, cross-platform tools give the end user an inferior product compared to ones made with platform specific APIs. The end user will always have a better choice.
You make money in the long run by giving end users the most useful tools. If you don't philosophically concentrate on making the end user's life easier and more productive, you are pretty much doomed from the outset. End users have lots of choices and if your tool isn't one of the best you won't make it in the market.
You should only use cross-platform tools if you think, "the users will really benefit from running this app on many different platforms." If you start out looking at cross-platform tools solely because they will make your (the developers) life easier, then you have picked them for the wrong reason and they will hurt you more than they will help.
There are several approaches to cross-platform development on mobile devices. Of course they all have limitations. No solution manages to take advantage of all the device's functionalities the way a native application can.
Re-using code
While all mobile OS don't use the same development language and API you can sometimes share some classes or logic tier code.
C++ for example can probably be re-used for an iOS application, for an Android app by using the NDK, for a Symbian app since they are developed in C++, etc.
Some solutions also offer the possibility to write the app in an other language than the one normally used by the device. The most famous (in fact the only one I know) are commercial and based on the Mono project (C# development):
MonoTouch for iPhone [ 1 ]
MonoDroid for Android (still in development)
Similar project for BlackBerry (still in development)
But I'm not sure we can really call this cross-platform development since the re-use of code is limited depending on the device :
Windows Phone 7 will not allow native code development (maybe in further updates)
AFAIK mono like project do not exist for all platforms (yet?) bada, webOS, maemo, etc.
And the UI part also stays specific to each device.
Web development
A regular answer when asking about cross-platform development for mobiles is web development. We would then need a wrapper, that will use the mobile browser, to make it look and behave like a native application. That is how some of the cross-platform framework that we will see further on work.
The rise of HTML5 brings to web development functionalities that could only be done with a native application like geolocation, off-line application, local storage.
We can found more and more frameworks to develop web application for mobiles with a native look and feel by taking advantage of the latest web standards HTML5, CSS3, Js:
Sencha Touch
JQTouch based on jQuery
JQuery Mobile framework
But HTML5 is still very young and implementation may vary from a browser to another. Most default mobile browsers use the WebKit engine (main exception being Windows mobile/phone using Internet Explorer) and even so they don't necessarily support the same functionalities. Local database is still awkward to work with and we can't be sure how it is going to implemented by the different browsers. Moreover, even with HTML5, web development is still very limited compared to a native app. You can't access contacts, camera, accelerometer, etc.
Edit: Earlier this month the W3C have delivered some warnings about the evolution of HTML5: Article from ZDNet
So it will only suit a limited category of applications.
Cross-platform frameworks
And than we have the cross-platform mobile applications frameworks. With which you can presumably develop once and deploy on different platforms. These solutions usually focus on iOS and Android and rely on the WebKit engine. They offer more interaction with the phone functionalities while developing with web technologies. The most well-known are Nitobi PhoneGap, RhoMobile Rhodes, Appcelerator Titanium. But many others are out there and don't all use the same technique like MoSync which translate your code to it's own intermediate language before compiling it for the desired platform.
[ 1 ] Remember that Apple has a special policy about apps written for their platform. They don't seem to be blocking these apps at this date but it is an information that should be taken into account.
Edit: Apple has changed this policy since September 9.
You get some commonality when deploying as a webapp (html5 as mentioned above) but for rich native apps the APIs are completely different for the various smartphones.
HTML5 may improve things somewhat but to do interesting things you need to go native.
There are 'cross platform' smartphone frameworks such as Phonegap but I've heard mostly bad things about using it for "real" work. (lots of overhead etc)
Yes, html5 is getting some attention. You should also look at this consortium & platform to come in Q4.
Not sure about the success of that project, as it sounds like a huge challenge, but here are the details:
Website:
http://www.wholesaleappcommunity.com/default.aspx
News:
http://news.google.de/news/search?aq=f&pz=1&cf=all&ned=us&hl=en&q=%22Wholesale+Applications+Community%22
WAC aims to publish its initial
specification and components of its
SDK to developers in November. This
specification will be based on W3C
standards and create a strong platform
for developing rich mobile web
applications. WAC will also provide
backwards compatibility for devices
based upon the current JIL and BONDI
specifications.
(http://www.convergedigest.com/Bandwidth/newnetworksarticle.asp?ID=31021)
.
It IS an international coalition of around 25 telecom companies that's aiming to create a platform open to all developers and selling to all mobile phone users.
(http://www.downloadsquad.com/2010/02/15/atandt-wholesale-applications-community-is-a-platform-not-an-app/)
As far as I know most of those devices are able to run this:
Java ME - the Most Ubiquitous Application Platform for Mobile Devices
I think this can serve both as good and bad example.
Related
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.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
Our company will soon start developing few products for mobile platforms, as CTO I was asked to examine the Pro and Cons of the different tools available in order to achieve the best quality / cost effective solution.
We will be aiming primarily at iOS and Android , secondary for Windows-Mobile and BlackBerry.
Candidates:
After conducting some background research, I found the following possible candidates:
Native - Simply but laboriously develop for each platform with its native tools and language.
HTML5, CSS and JavaScript - Could be a web service running on the device's browser (a website) , or an app which incapsulate such code around WebKit.
Rho mobile - Made by Google so it ought to be good - nevertheless based on Ruby (which we are not comfortable with) and does have a complex and rather flimsy dev environment.
PhoneGap - It seems easy and mostly based on Javascript - It is open source but lately acquired by adobe - (not a good sign)
Appcelerator - Anything from Javascript to PHP and to python, have a nice range of API Access but we heard many stories of rejection (by apple), and incompatibilities when using complex code across different platforms.
And more like MoSync, Sencha, Appmobi and Corona (didn't tested them first hand).
Some points of reference:
We are not planning on developing games, the applications we are planning to develop are in the realm of business applications & information tools.
The applications are not depending on excessive use of the devices API's (but do need some minor basic access)
The company already developed for iOS and we have a small team of native iOS developers (Objective-C geeks)
We would like to be sure that we can carry on developing our applications in the feature without them getting broken due to new OS or APIs
It will be beneficial to ensure before hand that the application will not be rejected due to cross platform code (mostly AppStore)
Like any company we would like to be as cost effective as we can - on the other hand we insist on high quality products and top-of-the-line User experience.
There is no better place to ask this question than StackOverflow, I would appreciate any comments from developers with experience on this topic.
There are 500k+ apps on the app markets and competition is fierce. It is paramount to have great UX and graphics.
Cross-platform tools are NOT on par with native development. If they were, we would all be using them. But we are not. With a reason - you do NOT have full control. And full-control is necessary to have great looking apps.
If your app is not a consumer app, but an enterprise app, which use is dictated by some internal department, then you might get by with so-so design, because the value of such app is in it's functionality.
But, if you are serious about mobile apps market - then the only way is to go native. And you need an UX guy and a designer (who knows mobile development) on team full time. You will spend upwards of 50% of time on looks. The project that I'm part of now is spending 80%+ of time on looks (graphics, animations, UX, usability testing).
A suggestion: spend a reasonable amount of time (= days) using you competitors apps. Also spend time with top 50 apps on each market. You will get a feeling how high the bar is. Then check apps made with cross-platform tools (you can find links on their sites) and compare.
While I'm in complete agreement with #Peter Knego, I'd add a few minor points for teams looking to support several platforms:
As Peter notes, UX is huge, and cross-platform UX is least-common-denominator UX. It's hard enough to get this stuff to be everything it needs to be without tying a hand behind your back. Really fantastic web apps are judged on their ability to come close to a native experience, not the other way around.
There are many parts of a product that aren't UX. It's worth considering carefully what kind of reuse you can get there. For instance, I've often advised teams who have SQL databases already working on Android not to try to use Core Data on iPhone. There's no reason to reinvent your object and data models.
This is not a blanket suggestion that you write your core in C++. If you have an extensive, existing C++ core, I've made suggestions before about how to reuse it. But I don't generally recommend it for new code. It's better to use the best OS-level features of the platform in most cases.
Designing network protocols that work well on all platforms is pretty easy and should be pursued. Your best bet here in almost every case is REST and JSON. Keep it simple, especially for iPhone which hates things like SOAP and parsing complex XML.
Some complicated layout problems are easier in HTML+CSS than with native controls. This is particularly true if you have complex multi-column tables (especially things you'd need colspan and rowspan for). I've had fairly good luck embedding individual UIWebView pieces in otherwise native apps, even when portability is not a consideration at all. There can be some worthwhile reuse here. Just remember that you don't want to waste a lot of effort and performance trying to make your HTML browser-neutral. On iPhone, use WebKit extensions anywhere they make your app better for the user.
One of the most important lessons in this, though, is that there isn't a single "right" way to make an app that is appropriate for all platforms. iPhone apps should act like iPhone apps. Android apps should act like Android apps.
Highly cross-platform approaches are a cheap way to get "something" if you don't really care what "something" is. They're a very expensive way to get something great.
I work at AppMobi and I'll just make a few comments.
You're app shouldn't be rejected for being cross platform using a native webview. We haven't had Apple use that on any AppMobi submitted apps.
Rhombile isn't "Made by google". In fact, it's not even the part of Motorola that Google bought, it's their business division. They are pushing towards HTML5/Javascript but currently Ruby.
Appcelerator started out supporting a webview, then backtracked. They just raised a ton of money to go back to the webview suppport.
As to people saying "No" to the cross platform apps. Facebook and some other major companies are moving towards HTML5 based apps for mobile.
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.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 11 years ago.
Our company will soon start developing few products for mobile platforms, as CTO I was asked to examine the Pro and Cons of the different tools available in order to achieve the best quality / cost effective solution.
We will be aiming primarily at iOS and Android , secondary for Windows-Mobile and BlackBerry.
Candidates:
After conducting some background research, I found the following possible candidates:
Native - Simply but laboriously develop for each platform with its native tools and language.
HTML5, CSS and JavaScript - Could be a web service running on the device's browser (a website) , or an app which incapsulate such code around WebKit.
Rho mobile - Made by Google so it ought to be good - nevertheless based on Ruby (which we are not comfortable with) and does have a complex and rather flimsy dev environment.
PhoneGap - It seems easy and mostly based on Javascript - It is open source but lately acquired by adobe - (not a good sign)
Appcelerator - Anything from Javascript to PHP and to python, have a nice range of API Access but we heard many stories of rejection (by apple), and incompatibilities when using complex code across different platforms.
And more like MoSync, Sencha, Appmobi and Corona (didn't tested them first hand).
Some points of reference:
We are not planning on developing games, the applications we are planning to develop are in the realm of business applications & information tools.
The applications are not depending on excessive use of the devices API's (but do need some minor basic access)
The company already developed for iOS and we have a small team of native iOS developers (Objective-C geeks)
We would like to be sure that we can carry on developing our applications in the feature without them getting broken due to new OS or APIs
It will be beneficial to ensure before hand that the application will not be rejected due to cross platform code (mostly AppStore)
Like any company we would like to be as cost effective as we can - on the other hand we insist on high quality products and top-of-the-line User experience.
There is no better place to ask this question than StackOverflow, I would appreciate any comments from developers with experience on this topic.
There are 500k+ apps on the app markets and competition is fierce. It is paramount to have great UX and graphics.
Cross-platform tools are NOT on par with native development. If they were, we would all be using them. But we are not. With a reason - you do NOT have full control. And full-control is necessary to have great looking apps.
If your app is not a consumer app, but an enterprise app, which use is dictated by some internal department, then you might get by with so-so design, because the value of such app is in it's functionality.
But, if you are serious about mobile apps market - then the only way is to go native. And you need an UX guy and a designer (who knows mobile development) on team full time. You will spend upwards of 50% of time on looks. The project that I'm part of now is spending 80%+ of time on looks (graphics, animations, UX, usability testing).
A suggestion: spend a reasonable amount of time (= days) using you competitors apps. Also spend time with top 50 apps on each market. You will get a feeling how high the bar is. Then check apps made with cross-platform tools (you can find links on their sites) and compare.
While I'm in complete agreement with #Peter Knego, I'd add a few minor points for teams looking to support several platforms:
As Peter notes, UX is huge, and cross-platform UX is least-common-denominator UX. It's hard enough to get this stuff to be everything it needs to be without tying a hand behind your back. Really fantastic web apps are judged on their ability to come close to a native experience, not the other way around.
There are many parts of a product that aren't UX. It's worth considering carefully what kind of reuse you can get there. For instance, I've often advised teams who have SQL databases already working on Android not to try to use Core Data on iPhone. There's no reason to reinvent your object and data models.
This is not a blanket suggestion that you write your core in C++. If you have an extensive, existing C++ core, I've made suggestions before about how to reuse it. But I don't generally recommend it for new code. It's better to use the best OS-level features of the platform in most cases.
Designing network protocols that work well on all platforms is pretty easy and should be pursued. Your best bet here in almost every case is REST and JSON. Keep it simple, especially for iPhone which hates things like SOAP and parsing complex XML.
Some complicated layout problems are easier in HTML+CSS than with native controls. This is particularly true if you have complex multi-column tables (especially things you'd need colspan and rowspan for). I've had fairly good luck embedding individual UIWebView pieces in otherwise native apps, even when portability is not a consideration at all. There can be some worthwhile reuse here. Just remember that you don't want to waste a lot of effort and performance trying to make your HTML browser-neutral. On iPhone, use WebKit extensions anywhere they make your app better for the user.
One of the most important lessons in this, though, is that there isn't a single "right" way to make an app that is appropriate for all platforms. iPhone apps should act like iPhone apps. Android apps should act like Android apps.
Highly cross-platform approaches are a cheap way to get "something" if you don't really care what "something" is. They're a very expensive way to get something great.
I work at AppMobi and I'll just make a few comments.
You're app shouldn't be rejected for being cross platform using a native webview. We haven't had Apple use that on any AppMobi submitted apps.
Rhombile isn't "Made by google". In fact, it's not even the part of Motorola that Google bought, it's their business division. They are pushing towards HTML5/Javascript but currently Ruby.
Appcelerator started out supporting a webview, then backtracked. They just raised a ton of money to go back to the webview suppport.
As to people saying "No" to the cross platform apps. Facebook and some other major companies are moving towards HTML5 based apps for mobile.
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be supported by facts, references, or expertise, but this question will likely solicit debate, arguments, polling, or extended discussion. If you feel that this question can be improved and possibly reopened, visit the help center for guidance.
Closed 9 years ago.
I have started to build my own apps on iPhone and iPad using the iPhone SDK. The next question that is always asked by the client is, "Can we have it on Android?"
So my question to you, 'the internet', is: what are my options?
I don't have the time to learn another language (learning iOS has been enough!), so are there companies who specialize in this, or are there any online services that do a conversion?
Any help on this welcome, just need to know which way to turn...
No, there is no way to convert an existing iOS app to an Android app.
However, there are cross-platform frameworks that allow you to code once and deploy your app in more than one platform. The most popular are based on HTML/CSS/JavaScript and one of them is PhoneGap.
You can also develop for iOS and Android with Adobe technologies such as Adobe AIR (this was forbidden by Apple until recently).
And there are online services (such as Mobile Roadie) that allow you to generate cross-platform apps using a content management system.
That said, I strongly recommend to:
Learn Android and Java development if you want to specialize in mobile development.
Take advantage of the strengths of each platform when working on an iOS/Android project, instead of creating something that uses only what's common to both.
Converting a native application from one mobile platform to the other is not a straight-forward process unless the initial application was built with a framework with cross-platform capabilities from the start.
Your options at this point are learn the other platform and develop it yourself, or contract with another development company which specializes in the platform you need to target.
Due to the massive differences between the 2 platforms, you are looking at a complete rewrite of your application. You either do it yourself or pay someone else to do it. I don't see any shortcuts you can take.
You may be interested in reading my book, HTML5 for iOS and Android, which enables you to take web apps created in HTML, JavaScript & CSS, and turn them into standalone apps that you can upload to the app stores (for free or to sell). See http://html5formobile.com - the wrappers to do this for the iOS and Android SDKs are freely available on the website, and you don't need any knowledge of either programming language if you follow the instructions in the book.
You can try the following https://bitbucket.org/zabirauf/icona.
Its open source iOS to Android Application Conversion Tool.
Even if there was a way to easily port an Objective-C application to Java, I wouldn't highly encourage it. iPhone users and Android users are two different families of users. The typical iPhone interface just wouldn't sit well with Android users who aren't familiar with how the iPhone works. Yes, I understand that the UIs of both iPhone and Android seem pretty trivial to learn to most people, but when you break a novice's comfort zone, it puts your applications (or websites) on a higher learning curve.
You should take the time to learn Android's language and UI and develop your application in a fashion that is consistent with how applications on Android work. As said in other answers, if your taught yourself Objective-C, you should find that Java will come pretty easily to you. In addition, in never hurts to know more than one programming language.
You can't just convert iOS apps into Android. iOS is Objective-C and Android is Java.
I highly doubt there are 'converters' on the internet, even if there are that's not the way you should program an app because every SDK has his own special capabilities and you should use them for maximum user-experience.
I'm sure there are some companies who specialize in porting apps from iOS to Android. Look it up on Google I'd say..
If you want an easy place to look for android development you can try appMaker which I hear is a GUI based Android development tool or I believe Google has released its own GUI based android application development tool. If you are not a java programmer than you might be better off with the gui. Otherwise I would say android is not too different from traditional java. As a java programmer who went from Android to iOS, I will tell you Android is a walk in the park compared to learning iOS. Two completely different beasts in my opinion.
Selecting a mobile development environment which will enable you write once and deploy/distribute it on many devices would be a better solution in the future. If your application is HTML-based, go with HTML5/CSS alternative (ex: PhoneGap, ). If you prefer native, then chances are you may want to learn Lua, a scripting language (ex: Gideros Studio) or C++ (ex: Mosync).
Other than that, the application you created on iOS with Objective-C is very, very hard to port to Android and other devices.