I have to develop an app for the Ipad. It has to be non-browser based. That's a requirement and I can't change it.
I think it likely that the app would be useful on other tablet PC types and have a good chance of a second app which requires IPad and Android at a minimum; Windows and Linux would also be useful.
If it makes any differences these are "desktop" apps for tablet PCs and it is not envisaged that there will be any handphone development.
Is there a “Grand Unifying Theory” of cross-platform desktop app development? Is there a good IDE, preferably FOSS? I'd rather code C++ or Java and am less keen on Ruby or Python (through lack of experience) but would accept if there is no alternative.
I need a GUI builder, something like Borland Delphi or MSVC or the Eclipse Android plugin and I need a way of executing different code on different platforms (#ifdef Android … etc)
Any ideas, or should I just go ahead and code the current project for Ipad only and stick to browser based HTML5 + CSS3 with Jquery/Ajax for cross platform apps (the problem being that some will need to execute native system calls, like en/de-crypting a file and at least one app has to work in “local mode” if there is so internet access, so I guess I would have to bundle a web server (Apache) if I go browser based (in order to serve the web pages), which would not be necessary with a “desktop app”.
Any recommended IDEs, Web sites? Books? Thanks
The "grand unifying theory" is that core business logic should reside in the cloud; that allows your iOS and Android implementations to be just a thin GUI on top of this shared logic. Unfortunately, there isn't really a way to reuse the GUI, and even if you did, it would go against the intuition of users on one or both platforms, since you wouldn't be using the paradigms of those specific platforms.
Google App Engine provides a way for implementing your core business logic in Java on top of Google's cloud computing infrastructure at reasonable costs (development is free, cost is proportionate to usage, and one can put caps on how much one is willing to pay). There is an Eclipse plugin for developing App Engine applications. When developing for Android, you will similarly want to use Eclipse (there is a plugin specifically for Android development), although the Android SDK can be used just from the commandline (which is good for setting up a continuous build and test system).
For iOS, you will want to use the standard Xcode and the iOS SDK. Xcode is an IDE, but it is possible to build Xcode projects directly from the commandline using the xcodebuild command (also good for continuous building). The standard language for iOS applications is Objective-C.
You should take a look at jQuery Mobile. I used it to cross develop between Android and Playbook. I know that it also does iOS.
Maybe for you the downside is that you have to program in JavaScript.
Related
I have an iPhone application (with an android counterpart), developed in Xcode and written in Objective-C. It is a classical native iOS app, already working and uploaded in the App Store. Similarly, the android version is built with Java and linked with the android SDKs. It's uploaded to the market place.
I was asked to port the app to Windows Phone. Is this possible without modifying the code?
I am not familiar with Windows Phone dev, however it looks like that is a completely
separate ecosystem for developing apps (different programming language, different IDE, different app store etc).
Can I go from Android to Windows Phone or from iOS to Windows Phone?
PhoneGap - or similar platforms - are not options since the code is already written in Objective-C and Java.
Like iOS and Android, Windows Phone is a completely different operating system and currently requires a completely different development platform.
It is not possible to take the existing code and make it function on a Windows Phone.
iOS commonly uses Objective-C for application development . Even if there was a way to compile Objective-C onto a Windows Phone, it would be inherently tied to platform features, and UI controls. While you could write some code in C++ and share it, with an iOS application, you'll still need some in Objective-C.
Android applications use Java normally. Java is not available for the Windows Phone platform. So, the language is out. Further, like iOS, the platform features are not necessarily shared and the UI control and behaviors are different. Android applications can use C++ (if you happened to code using it), but it has limitations, and by using it, again, you'd be tying the code to the Android platform potentially. Some code may be portable.
Windows Phone applications are usually written in C#/C++ and XAML or DirectX. While there is some similarity in languages (Java and C#), you'll encounter far more platform differences that could need significant effort to convert. From the way network requests are made to handling threads will be different (and many many more). Objective-C is also very different from C++.
Unless you had used something like Xamarin and written the underlying business logic using a common platform (C#/.NET), you'll need to consider a port to Windows Phone a fresh start.
It's not possible to just reuse all of the code that's been written. With a careful effort, you could share some common code (if it were written in C++), but as the shared code will not directly work with UI (and other platform features), you'd still need to do the UI on each platform, work around limitations, and potentially customize the user experience for each platform.
Microsoft has provided some guidance on porting, and provided some links with an API equivalency table here.
Yes, you can use Microsoft's Windows bridge for iOS to convert your iOS application code to Windows mobile platform code.
You need to use WinObjC SDK provided by Microsoft for this purpose.
Follow this link for more details.
No, you can't, WP apps are build with c# or .net and in visual studio IDE. There is no automated way to port a previously coded ios or android native app built with objetive-c or java to WP.
In my opinion there is no way to directly port a iphone app to windows phone app. You need to develop windows phone app with its needed environment like Visual Studio , windows phone sdk and with windows os.
You can also use cross platform like phonegap if it may fit to your requirement.
It looks like you have an existing Obj-C codebase for iOS, and a Java codebase for Android. No matter how you cut it, you're looking at [re]writing code to get something on WP8.
I don't know how "UI heavy" your app is; in general the UI code is the most platform specific (unless you're willing to put up with "cross platform" stuff that might not have good UX).
You might consider keeping the non-UI code mostly plain C++ and using Obj-C, etc. only for the parts where you have to talk to the framework. It will be easier to support multiple platforms with C++.
I took this approach with an app I'm working on; it's targeted for iOS but it's about 80% C++ (including Open GL). If I decide to port to Android I just need to deal with the 20%, mostly UI-ish code.
I have developed application for android based mobile using Java. I have tried developing apps for Windows based mobile phones using C# and heard about iOS that one would need to know Objective C.
Wondering if there is any way to have one language to develop an application that can run on all these platforms. I understand every operating system executes programs having different binaries that it execute. But just wondering if there is any common platform like JRE that is run on these mobile operating systems.
Thanks for the reply
Short of working with HTML mobile webapps, I reckon your closest bet to a common language between the 3 platforms would be C# using Mono.
Check out Mono for Android and MonoTouch for iOS both supported by the same company.
Whilst you could probably use the same language for your apps and even share internal APIs across the different platforms, you would still start to encounter differences in how the UI is handled on each of the platforms.
There is a project: http://www.appcelerator.com/platform which can be used for writing apps for Android and iOS... But from my experience I can tell that this is good only for simple prototype apps. The more fancy app, the bigger issues you would have with it.
Hello everyone and thanks for viewing this question :)
I am an indie to-be-developer and want to make apps for android, windows 8 desktop and metro.
After having read through a lot of forums and blogs, I believe that perhaps to make the best looking(native-feel) apps I have to learn
Java for Android
HTML,CSS and JS for Metro
Something else for Windows desktop
What I need your help in is, whether there is any one particular language which I should start with which will make my journey better ?
By app I mean something to do with sharing and transferring of files.
P.S. Read that Python might be perfect !
Do you agree ? Please suggest something.
As Tanis alluded to, you'll need to determine where your goals are in terms of "rich functionality versus maximum reach" - and from your "best looking (native-feel)" comment, I'd say you're leaning toward "rich"
Pure HTML5/CSS/JavaScript will give you the greatest reach because of browser ubiquity, BUT you can still use HTML5/CSS/JS for native development for modern Windows 8 applications and via PhoneGap for Android and other mobile devices. Having one code base AND supporting native features across those platforms would be difficult, if not impossible, but with the right design and architecture you should be able to get a great amount of reuse of your HTML/CSS/JS assets.
Another option, since you've mentioned Windows Desktop as well, is to use WPF and XAML with C#. You can build native Windows desktop applications with it, and those same technologies (XAML/C#) are one of the three primary development options (along with HTML5/JS and C++/XAML) for modern Windows 8 (nee Metro) applications. For the Android piece of it, Xamarin's Mono for Android lets you reuse many of your C#/.NET assets for deploying native applications to Android (and they have MonoTouch as well to add iOS to your arsenal!)
As for Python, productive and powerful language, and great for backend services - like the plumbing for sharing and transferring files - but it wouldn't be my tool of choice for building mobile apps.
If you want the highest level of cross-platform compatibility, a web-app (typically HTML, CSS, and JS) would be best. Making a web app will help ensure that your app works on nearly every device with a web browser, and you only need to maintain one code base.
The trade-off is that you often lose some features, such as the use of some of a phone's sensors.
If you want to make native apps for each, then I would suggest Java (particularly for Android) or C/C++ (particularly for desktop environments).
Python is an excellent starting language as well (and codeacademy has some great tutorials), but isn't as directly applicable to app development as Java or C/C++.
This time I'm trying to make a software that can be used on iOs, Android, as standalone software, as a web app, and I want to know if there is a way to make a base code in one language and with little effort and minimum changes use it to compile it for all the platforms. I was thinking in c++, but is there a better option?
Thanks in advance
Phonegap gets you three out of four http://phonegap.com/
Seems rather obvious to point out, but you Adobe Air can do each item in your list using the same code. The language behind it is Actionscript and is object oriented. From the same code, you can output Flash for web, Android apps, iOs apps, a standalone Air application for desktops. You can develop in Air using a Mac or PC.
(If you are using a PC to create apps, for uploading to iTunes, you need a Mac, but you can rent a virtual Mac from http://www.macincloud.com, which works on a PC. You will have to use the Mac to create your certificates and upload the IPA file onto iTunes, but it works perfectly without the expense of buying a Mac.)
You could also consider going as a service on the web. Otherwise, c# is a good all way to go. There are sites that will alter different sources of code to different outputs.
jQuery mobile also good framework for multiple mobile platforms. link to website. We are using this for same purpose. So far everything good.
I'm surprised that no one has mentioned this yet, but Unity should be your go-to for cross-platform app creation. Nominally, Unity is for cross-platform game development, but its expansive libraries allow for robust general-purpose program development. Unity provides you with great tools for building UIs, and it has an active community of developers.
Using C# will get you Android, iOS and Windows Phone if those are key platforms for you. Using Mono / Xamarin you can develop apps in C# / .NET.
I am going to develop an application which will be cross platform and it will be released for IOS and Android.
My App will be using network connectivity and communicate with the server and it has to be fast, reliable and responsive.
So my Question is: If i choose Adobe Flex to build that app for IOS and Android, So will there be any performance issues?
If no then why people use xcode or android sdk?
What are the disadvantages of using Adobe Flex over xCode and Andoid SDK?
Generally speaking, if you use a cross-platform "write it once and build for many platforms" tool you likely will give up the ability to take advantage of some (or all?) device- or platform-specific features. You are, in effect, choosing a lowest common denominator sort of solution. That is to say, you have available to you only the platform features available on ALL the platforms you are targeting.
Building a native app -- that is, using Xcode to build an iOS app and using the Android SDK to build an Android app -- gives you complete access to all of a given platform's specific features and capabilities, thereby ensuring the best user experience on each platform.
This is now my opinion: Native apps are better, simply because they present the user with a native experience -- an experience that will feel familiar to them as a user of the platform. When you choose to use a cross-platform tool you are actively choosing to give your user a less-than-ideal experience on their device, but YOU saved some time (maybe) getting your app to market. Who's the winner?
In my job, my boss and I had a specific conversation about this. We have native iOS and Android apps, on purpose, because we didn't want to give up platform-specific features. We wanted each app to give the best experience it could on its platform. We specifically agreed that a cross-platform solution was not the way we wanted to go.
Depending on what you are building, Air is a great platform for developing cross-platform mobile applications. Despite recent news that the Flash player is no longer being developed for mobile browsers, the native story remains strong. Plus, having seen native IOS, native Android and Flex development, the Flex platform is much better when it comes to the ease of development. With high-level features like data binding, visual state management, a solid component/skinning model, transitioning model, etc, it is a generation or two ahead of iOS and Android (IMO).
If you are using Flex for mobile (iOS/Android/Playbook), you get a common look/feel across all mobile devices. #MarkGranoff suggested that the user experience is downgraded when using an approach, but I'd challenge that.
Although I agree that an out-of-the-box styling of the UI components in Air feels a tad off, I don't recommend that anyone build apps that way anyways. Instead, create an app that looks like your app. There have been many applications that don't conform to the native look/feel of iOS or Android but are still quality from an aesthetic and UX perspective.
There is something to be said for an app that looks/behaves the same across all platforms. I can tell you this much... the user doesn't really care. If it looks good, feels good and does what they want, they are happy.
The Flex Mobile SDK uses a lot of the same UI paradigms (especially in the soon-to-be-released version of the SDK) and it is getting better. I wouldn't discredit it. You can save a lot of money and time using something like Flex Mobile.
You can use Flex to compile to AIR for iOS or android.
The performance of AIR vs Objective C or Java is significantly slower.
The advantage of using AIR is to have one cod base delivered to two platforms.
But if you have the know-how, Objective C and Java are better suited to development on their respective platforms. However many successful apps have been launched on iOS and Android using AIR. If you want to know if it would work for you I would seek out those apps in iTunes and Android Market and see how they perform for you.
If you app is not a game it will likely work fine. And if you app is a simple game it could also work fine.
Also remember there are other multi=platform development tools to choose from, like phone gap, or appcellerator:
http://www.appcelerator.com/
http://phonegap.com/
or even Unity 3D:
http://unity3d.com/
UPDATE:
Since this original answer in Novemer 2011, Adobe has made significant improvements to AIR for iOS and Android. Petformance problems are negligible unless you are doign somethign very instinsive such as large image processing.
Likewise, Unity3D has improved a lot too. It's an excellent choice for games that are 2D or 3D.
if you are using Air to develop cross platform apps, you should notice the following facts:
1) you don't have access to native features (but you can use Air Native Extensions to by pass this problem)
2) performance is slower than native apps (but you can use Starling framework to use GPU power in devices which will increases the performance a lot!)
the bottom line is that building mobile apps using AS3 and Flex/Air SDK is the best solution you can think of and the performance if using starling is much higher than native apps!
I don't think you can use Adobe Flex on iOS. Another cross platform solution to investigate would be HTML5. If you can afford it, the best solution might be to implement it twice, once with xcode for iOS and once with Android for Android.