Best Solution, framework or technology to make apps for android and iphone - iphone

I want to make app for android and iphone "writing once" and run in both.
Despite hardware, OS and native interface differences between this two platforms there is a special technology to make this easy, or I need to think in web apps with only html5, for example?
I read a bit material related with rhodes, titanium app and a others frameworks, but I don't know if is better to spend time studying the sdks and native tools or to invest in only solution. It's worthwhile?

If you are doing a one off app and wont be doing a series of apps in different areas (games, content/music, LBS etc) then you are better off with using an existing framework. Otherwise you may want to build a platform of reusable components that you can leverage to quickly create apps.

I've tried to use Titanium - once you get past a certain level of complexity you really are much better off making a native program. Its like desktop cross platform toolkits (Qt, Wx) - it never looks quite right on different platforms - multiply this x 100 for mobile, with a huge performance loss.
Both Android and iPhone support C, with POSIXy standard stuff (especially sockets, etc). You can do your logic in C/C++ and UI in ObjC/Java. Games are better off in C/C++ anyway due to performance. The user visible part "works right", while your "business logic" is identical across platforms.

PhoneGap - http://phonegap.com/ is a very popular solution to your problem.
Single code base for iOS/Android/BB/etc.

Related

appcelerator vs phonegap vs native XCode speed-to-market

Titanium claims it can do the same app on average 70% faster than native XCode.
What's been everyone else's experience in terms of difference in speed of development (between native XCode and PhoneGap or titanium) ?
Let's say an app like Kik Messenger or Badoo ....
Typically, a good XCode developer can do it in 4-5 weeks, assuming graphics and backend are in place.
What would it take for an experienced Titanium (HTML5) person to achieve this? (roughly)
Time to market depends on quality of specifications, process and people, much more than the underlying technology or framework.
Coding a real application with Appcelerator Titanium is not that easy, and runtime performances are SLOWER than native code because it's using a javascript engine as a bridge. Especially with a big TableView, it's much more slower, and the feeling is just not the same. But once you have purged the memory leaks, the feeling is nevertheless incredibly better than with HTML5.
You should be interested in Titanium or PhoneGap(now known as Cordova) if you plan to distribute your application on other devices or if you really don't like Objective C.
If not, keep it with the Native Xcode.
I would add that Cordova will not make any UI, but let you access camera, accelerometer or GPS with javascript inside HTML5 code. You would probably use Sencha Touch or jqueryMobile with Cordova.
In my experience, if the app is not a simple template app then you would be better advised to create a native app for each platform.
As Rob says, trying to overcome the lowest-common denominator situation and overcoming limitations in cross-platform "solutions" usually means it takes longer to code than doing it natively in the first place.
You might even hit a problem which causes you to abandon ship and start from scratch as native apps. So if you decide to go a PhoneGap or Titanium route then make sure you research fully before starting and that you won't have future requirements not covered by them.
If you are an iOS developer and you are developing it only for iOS device, then it is better to code using XCode. If you are more into Javascript and developing for both android and iOS then you should use Titanium or Phonegap. Between Titanium and Phonegap, I found it easier to code using Titanium(and yes fast as well). But I am not sure how much worth is using Titanium. http://usingimho.wordpress.com/2011/06/14/why-you-should-stay-away-from-appcelerators-titanium/
I'm actually performing a fairly intensive survey of all the major cross-platform mobile development kits right now. I started by making a sample application from scratch in IOS that uses a few simple device features, and then reimplemented that as an Adroid app. Both of those took about a day to complete (the android took maybe half a day longer). Since I've never written an android app before, I think that's a good baseline in terms of comparing development time between the various other frameworks I'm testing out.
I'll update this comment in a few weeks with a blog post when I'm done, but for the moment I've been finding that these cross-platform kits are vastly more difficult to use and take a lot more time, even for the simplest applications. and despite this, there's still quite a bit of custom per-device code that has to be written for UI and fundamental idiosyncratic differences between how device services function, so you don't really get the value of a true "single code base" that you may have been expecting.
I think the main value in these may turn out not to be anything related to development time or code reuse, but instead only as a way for non-app-developers to create simple prototypes that can later be handed over to the "real" mobile developers to be built out into true native apps afterwards... Not really all that useful in my opinion, but maybe my thoughts will change as I delve into this further.
Appcelerator is not HTML5, it is a native app built in a higher level language of JavaScript. It abstracts the complexity of common elements away and provides huge value, ping me offline to know more. I run our California business.

Smartphone Development Framework & Platform?

I am a C Sharp.NET & Silverlight developer and now thinking to swicth to SmartDevice development specially for iPhone & Andriod based phones. I have looked over web and found some cross platform development frameworks like
http://developer.openplug.com
http://www.phonegap.com/
http://android.xamarin.com/Welcome
but not sure about which to choose. Naturally I would like to keep my learning curve less but also would like to choose platform which provides more power, so I am looking for your suggestions and 'Getting Started' tips and also which device you think will be in demand in future iPhone or Android ? .
Thanks,
Maverick
I wouldn't recommend any of those. The problem is, that those "cross-platform" development frameworks, still aren't cross-compilable. This means you still need to develop an application for each platform, but you can reuse heavy calculations if you are using models af MVC.
Another thing is that those frameworks still aren't 100% native supported, so you'll loose some features from the native frameworks when developing applications.
I've read a lot of articles and to be honest, these cross-platforms seems to be dying out, cause both Android and iOS are moving very fast in each their direction and the cross-platforms cant keep up. But it's still up to you.
In would recommend you to choose one of those platform and learn it from scratch. With your C Sharp background, maybe iOS and Objective-C would be the most natural choice.
Enjoy
Edit: Regarding you last question:
I dont think it matters which one you choose, both will be domination for a long time. You should pick the one you can identify yourself with.
since you are C# dev, go for MonoTouch. I heard good things about it.
Miguel de Icaza is behind Xamrin. He wrote the most prolific .NET platform for UNIX, mono. I believe both he and his team have the capacity to bring you the most coverage for common features on Droid and iOS. My friend has a startup and is releasing an app shortly for iOS on Xamrin. It is a video streaming app.
HTML 5 will get you the most cross platform for the investment. Of course, like everyone else has said, if you need lots of native integration or if you want to use the latest APIs upon availability, you have to go native.

Trade-offs between native applications and cross-platform solutions on Android and iOS (iPhone/iPad)

I'm about to work on developing an application on tablets (Android/iPad).
Our clients ask us to make it cross platform unless there is any reason to stick to one.
I've looked at some posts related to cross-platform iOS/Android development here, but I'm still not sure if I should just develop a native application on a specific platform or I should try to make it cross-platform.
I'm new to developing applications on mobile devices.
If you can provide any advice/experience, that would be great!
As far as I know, for technical reasons, the trade-offs are as follows:
Native applications are faster, but it's not easy to reuse the codes on other platforms.
Cross-platform solutions using web-based applications (e.g. PhoneGap) have slower performance, limited access to OS and hardware APIs, web-like user interface.
Cross-platform solutions like Appcelerator Titanium compile the codes to native codes but I'm not sure about its limitation (if I have to change it back to native application after developing for three months, I'll cry!) and it costs money.
Also, for time/effort needed to develop a native application or cross-platform application on tablets, in general, is it easier and more reliable to develop/maintain a native application than a cross-platform solution?
Any suggestions?
Thanks in advance! :)
Personally I would stick with native apps. I'm working for a company that wants to create apps for multiple platforms as well and they have been looking for alternatives to native development, such as Titanium and PhoneGap. We've chosen for the following approach:
I've been hired to develop the iPhone app.
Some students for a University will probably work on the Android version, where the data framework / layer will look and work somewhat the same as my Objective-C code, e.g.:
-getFlightInfoWithId:forUserId: will become something like (void)getFlightInfo(flightId, userId) in Java.
The view and controller layers will probably differ in huge ways, mostly because Android and iOS devices have different GUI guidelines and capabilities (e.g. Android screen sizes can differ a lot, whereas on iOS there are only 2 real options).
For other smaller platforms we'll be offering a HTML5 app. To me native apps are always preferable to apps created with cross-platform toolsets as generally native apps should perform better, should have a better 'feeling' and might have some more capabilities, e.g. might be able to use some hardware features that are native to the platform and unavailable in a cross-platform toolset.
The bad news is that unless you're planning on writing a web, then you're going to have to write two versions.
The good news is that you can share the assets between them.
I guess you write could write large chunks of your iPad version in C, then compile it for Android via the NDK, but then there's all the UI stuff and so it's still gonna be two versions.

Reuse code in iPhone, Android and a Web applications

I'm about to develop an app for iPhone, Android, and for web too. I think there must be some "standard" way for doing this, in order to reuse as much code as possible.
Which is the best way for doing that? Webservices? (only if the app uses internet) Maybe an API? Another way?
Just for the record, the web application will probably be developed in Ruby On Rails 3.
Thanks!
There are a few cross platform development tools out there that let you write once and compile for multiple platforms. I know I've seen questions on both tool here on SO, so others might have some good advice on these specific products.
PhoneGap
http://www.phonegap.com/
Appcelerator
http://www.appcelerator.com/
Barring that, if you are looking at doing native development on each platform, the web services APIs are a good way to go. I've built an App that is heavily data driven, and I built out RESTful services over JSON that do the heavy lifting for the iPhone, Android and Web versions.
There still is quite a bit of work that goes into implementing a feature on each platform, but once I architect code on one platform the hard, creative work is done and it's just porting it to the next platform (Same applies, mostly, to the graphics as well). Since I am coding for each platform individually I do try to take advantage of both code and UI conventions for that platform to give the user a native experience (say building menus for the menu button on Android, something not supported on iPhone). To me that's a benefit of developing for each platform individually, however, it also greatly increases time to market for each version.
Since you're looking at Objective-C, Java and Ruby, 3 completely different languages, there's not an easy way to develop a shared library without using a intermediary layer like those linked above.
Well, all three are different languages, so anything you write for one won't work for the other. An API on a server may be able to get you the same data to all, but its highly unlikely that you'll get any reusable code. I'm doing the same thing, and realize that, so I am just sharing common things such as UI and code-design between them.

Dev efforts for different mobile platforms

I'm in the middle of development of a client-server "socializing" that is supposed to run on several mobile devices. The project is pretty complex, involving networking, exchanging media, using geolocation services, and nice user UI.
In terms of development efforts, technical risks and extensibility what is the best platform to start with? Taking into the account that the goal is go "live" as fast as possible with the mobile version. And second goal is to cover most users (but first is more important).
iPhone (iPod iPad)
Android
BlackBerry
Java ME,
Symbian
I realize that there are limitations on every platform, and there are different aspects to take into the account (for example iPhone has better developer's community then Android, J2ME runs in a terrible sandbox but covers most devices).
Please share your pros and cons. I have the experience only with J2ME, unfortunately I can't evaluate other platforms.
If you're looking at native applications on the platforms you list, then the development effort required in order from least to most is:
iPhone
Android
Blackberry
Java ME
Symbian
Development effort is largely governed by language/libraries, tooling and fragmentation. Hence iPhone wins (good language & libraries, excellent tooling, little/no fragmentation). Symbian comes last (C++ with limited libraries, poor tools, large fragmentation). Android beats Blackberry on libraries and fragmentation, and Blackberry beats Java ME on fragmentation.
The counterpoint to this is market size, especially among your target user base - Java ME reaches far more devices than any other platform, whereas the Android installed base is still the smallest of the 5.
There's no one right answer, but if reach is important then Java is a good place to start, if time-to-market and user experience are the keys then iPhone makes sense.
It's also worth looking at how easy/difficult it would be to port across to other platforms. There are various cross-platform libraries around such as Airplay or J2ME Polish that might reduce the costs - provided you can implement your application on the cross-platform part.
I'd like to speak up for Maemo/Meego(Nokia's/Intel's mobile Linux). While it is in a state of transition and currently Maemo 5 has only one good phone(and a couple of cheap Chinese ones), but I feel that it will soon be big(I like many people believe that Meego will be Nokia's high end strategy and Nokia is the biggest phone maker in the world). Plus the N900 is the coolest phone around.
Also their it basically an open Linux device (pretty similar to standard desktop Linux). The ide QT Creator is great and cross-platform(comes with embedded visual designer and nice documentation broser) but you don't have to use it, there is some support for using your own text editor or ide.
There is no sort of signing key nonsense(I did a student project for the blackberry and have been quite annoyed by keys). Other things I didn't like about the blackberry: windows only eclipse plugins, our team had a lot of trouble figuring out how to add third party libraries to blackberry COD archives . Also some of the Classes are somewhat sparse in a lot of ways especially String/Char, probably since its ME based, I also didn't like the file read/write apis, it felt somewhat awkward, possibly since blackberry apps only recently got the ability to store files(before you could only store/retrieve objects to disk via the persistence layer)..
The preferred Languages are (Gobject C currently but less so for Meego) , Qt flavoured C++ and python. There libraries are nice and the qt ones are especially well documented. Since its a tiny linux box you can have on device debugging (there is also an emulator).
Note I haven't developed anything for Maemo/Meego but I've read a lot about and just fell in love.
I think that the best solution might be to start with a smartphone optimized web site. A native app can provide a richer interface, but a well designed web app can come close and will run on any device.
Have a look at the WPTouch for an example of a very good phone optimized web site.
In line with Roman A. Taycher, I'd like to raise my voice for windows Mobile/Windows Phone. It's has a large installed base, it has the tried and true Visual Studio toolset to develop with, it has the best emulator of them all (it actually emulates the ARM instruction set - you hear that, Apple?), and you can leverage your Win32 experience.
MS-haters - please don't bother responding. I've heard them all.
A cross-platform runtime such as Qt or HTML5 are good bets and are portable.
Qt supports many platforms including Symbian, Meego, Linux, Windows etc. It is highly regarded as one of the best programming frameworks around currently.
Qt creator is also a very highly regarded IDE.
HTML can be accessed on nearly everything of course and can there are plethora of tools out there.
While applications natively developed for a given platform typically win in terms of platform UI consistency and performance, you could try going for one of the available multi-platform frameworks, such as Rhodes (just to name one). Personally, I do not have any specific experience with Rhodes and only learned about it a couple of days ago (having a closer look is still on my todo list), so please judge the user experience that the framework offers on different devices on your own.
It sounds like you need Mobile Community Framework (MCF). It is cross-platform framework to develop network-centric, location- and proximity-aware applications on all modern smartphone platforms (iPhone, Android, Blackberry, Symbian, WinMo - almost all you mentioned, except J2ME). It provide native binaries for all these platforms. With MCF development time can be reduced, as you don't need to code all this network stuff by yourself, but you can just use simple API to send any amounts of data across enrypted connections, via Wi-Fi ad-hoc mode or via special proxy-server.
More info at http://www.uvamobiltec.com.