OS : Android
I am looking for good End to End testing framework under perl, where the tests can be written in perl and managed in a comfortable way.
As much I as love Perl, I would not recommend doing that.
Instead, you should stick to native Android testing framework, which is JUnit with few Android extensions. It is very well documented and perfectly supported to run on device using Android instrumentation framework (am instrument ...).
Doing it any other way is simply asking for trouble. Reasons are many, but probably most important one is that Android does not support running any scripting languages (Perl, Python, etc) natively. Well, there is SL4A framework that should to be able to run Python, Perl, Lua, etc, but it is still very much alpha quality software and using it requires way too much to be usable without pain.
Related
So I am currently using Xamarin for multi-platform mobile applications. I really like the way this works, and I want to improve my flow. My developers have said that they would be much faster when programming natively (i.e. Swift for iOS in XCode).
I have looked for a solution, where I can create a shared project and use it in native apps, but I have only found ways that involve programming in one language for all platforms.
Is there a way to create a shared project, which can be imported into a native application (or better, can be run together, like a shared project in Xamarin)?
The language for the shared code is not important, as long as it isn't slow.
My developers have said that they would be much faster when programming natively (i.e. Swift for iOS in XCode)
Swift can be used natively for iOS apps. RemObjects' Silver is supposed to make Swift ready for Android and .NET. I've never tested it. Try it out, it's free.
RoboVM can be used to write iOS apps in Java. I didn't try it out either.
Language mixing with Xamarin
In case you want to mix Swift code with C# code using Xamarin then you can bind Objective-C compatible Swift code and use it in iOS projects only. You are not able to execute Swift code on Android or Windows Phone! It's not possible to write platform independent business logic in Swift and and use it in a shared library or PCL with Xamarin.
You face the same restrictions for Java code on Android: You can bind JARs and use them in a Xamarin.Android project but you cannot use them on iOS or Windows Phone.
You are also unable to execute C# code in a Swift based app on iOS or in a Java based app on Android.
You can use native code in Xamarin apps via Binding Libraries. You cannot use Xamarin libraries in native apps.
If the goal is to use truly native tooling, in their standard languages (meaning not Xamarin) and still share code between iOS and Android, this can be achieved by writing your non-UI code in C++.
Here's a very interesting article about how Dropbox does exactly this.
C++ is natively supported on iOS and it is very easy to interface
between Objective-C and C++ using Objective-C++.
On Android, calling into C++ can be done through the NDK, which
reportedly is not a pleasure to use. Dropbox found Google’s meta-build
system gyp to work reasonably well. In addition, the Java Native
Interface is a pain you have to accept. But none of these issues is a
roadblock, and Steven expressed hope that Google or the community will
build better tooling support over time.
And here's a simple example of how to do this from another StackOverflow post
We have an line-of-business app that runs on Windows Mobile. It's a Winforms app with a local SQL CE database and gets its data from a WCF Web Service running on the server.
Now customers are always asking "why don't you make a version for iPhone/iPad/Android/Phone 7 etc". My boss asked how hard this would be. My initial answer is very hard especially since I would probably be the only person doing the work. I don't have any experience outside my Visual Studio happy place.
Now I've come across MonoTouch and MonoDroid. They appears to offer an easy solution but I'm sure there are lots of issues. I doubt that I will be able to just compile my app for Android.
I'm inclined to suggest that it would be far too much work and that the only realistic solution is a mobile web site with several versions of each page for different screen resolutions. Unfortunately the existing app has a local database and is "sometimes connected" so that won't cut it.
Any suggestions and tips before I waste a huge amount of time?
Cheers
Mark
I doubt that I will be able to just compile my app for Android
That is correct; you won't.
So, background: the design philosophy of MonoTouch and Mono for Android is to bring the "core" .NET and C# experience to iOS and Android while also exposing the underlying features of each specific platform. Whereas PhoneGap and Titanium abstract the underlying platform (for a "write-once, run-anywhere" vibe), MonoTouch and Mono for Android provide no platform abstractions and directly expose the underlying platform types and members.
The result is that MonoTouch programs use MonoTouch.UIKit.UIButton, which directly wraps the underlying CocoaTouch UIButton type.
Similarly, Mono for Android programs would use Android.App.Activity, which directly wraps the underlying Android android.app.Activity type.
Common across both platforms are the "core" framework namespaces and types which you find on .NET, .NET CF, Silverlight, Windows Phone 7, and Mono: System, System.Collections.Generic, System.Linq (yes, Linq-to-Objects), System.Xml.Linq (yes, Linq-to-XML), System.IO, etc., etc. For example, see the assemblies included in Mono for Android.
So, can you use your existing Windows Mobile app as-is on Android? No, because Mono for Android doesn't provide System.Windows.Forms.
However, it should be possible for you to refactor your existing code to follow a Model/View/Controller design pattern (or MVVM, or...), abstracting away the UI (View) so that you can replace it for various platforms, e.g. an iOS UI with MonoTouch, a WP7 UI with XAML, an Android UI with Mono for Android, an HTML UI with ASP.NET MVC, etc., etc. You won't get a "write once, run anywhere" experience, but you will be able to provide the user with native user interfaces which are consistent with their chosen platform.
For example, see the MIX11 Conference Apps, which utilize a common code base while providing platform-specific UIs for iOS, Android, and WP7.
look at titanium and phonegap.
My suggestion is to have a quick look at WP7. It's quite easy to jump in to, even more so if you have Visual Studio (which you do) and C# experience of any sorts. Then you should be able to more easily guesstimate how long it would take you to develop a C# application (and possibly port that to Android using MonoDroid).
And yes, Titanium & PhoneGap are options, but I personally think MonoDroid looks better.
What platform are you getting the most requests for? I am guessing Android, as that seems the most likely. I have seen a lot of people saying MonoDroid is really solid.
I'm just beginning to teach myself Java coding, in hopes of building a few blackberry apps.
I assume I should:
learn the basics.
buy a blackberry app building book - learn the ropes
acuqire necessary software - here's where my questions begin...
Do I use Eclipse as the IDE? What about the Java API? Remember, I'm a complete newb, so my jargon may be somewhat...well...wrong. But, I think these two peices are initial steps, no?
And most importantly, should I even be trying to code on my Macbook Pro? Or should I stick to my IBM compatibable, and learn from there?
Thanks for your help!
I'll answer each of your questions separately.
Yes, you have the basics of how you should learn. More than anything, it is important to understand the concepts of the Java language before you go too far in development because understanding those concepts can be the difference between a successful application and a failure (which will, ultimately, discourage you and perhaps cause you to give up).
With respect to what IDE you can use to code, you can use Eclipse (my personal favorite), NetBeans, or, just a notepad. Oracle's Java Development Kit (JDK) is what provides the Java compiler that you actually need to build your code and get it to run. However, a solid IDE can ease the process as well as provide a large number of features to make your development much easier.
It does not matter where you develop. A major advantage of Java is that it is platform independent. You can code Java on a Mac and it will work on a PC and it will work on Linux, etc, etc. All you need is the proper JDK to build Java for that specific platform. So, don't worry about that and work on the machine that is best suited for your needs.
You may want to browse around StackOverflow for a bit and read up on some of the other beginner questions on Java. Other than that, I would highly going out and getting a good Java development book and reading the tutorials that are available online.
Hope that helps get you started. Good luck and welcome to StackOverflow!
Blackberry Development on Mac OS X
The new eclipse blackberry plugin for OS X does not have a simulator so if you want ot debug you will need to hook up an actual blackberry(or run the simulator from a windows vm).
Blackberry uses Java ME and some rim classes(net.rim namespace).
Documentation is here http://www.blackberry.com/developers/docs/6.0.0api/index.html
Note that just because a class with the same name as a regular(java SE) class is there does not mean it has all of the same functionality.
Also why do you want to develop for the blackberry specifically?
You can use Eclipse as an IDE, it would certainly do the job. I'm partial to Netbeans myself, and it would do the job too. XCode is Apple's own IDE, and from what I hear you can do Java development with it (it's been a while since I last used it). Finally, I hear from other sources that IntelliJ might be worth considering.
Particularly important to note is that all of these work fine on a Mac, so there's absolutely no need to move to a different platform (Windows, etc) unless you want to. I know from experience that both Eclipse and Netbeans both work on a PC, so you could consider those if you do decide to change to PC. XCode isn't released for PC on the other hand. I don't know about IntelliJ.
As for the Java API, all of these IDEs should install a copy of the Java Development Kit (JDK) when they are installed. This includes all of the API files, compilers, tools and documentation you should need to get started.
We're about to build an app for both iPhone and Android, and it would (of course) be glorious to only build one application that could work on both platforms. My question is, how easy is it to drop out of these cross-platforms into native code for certain views/activities?
In other words, if I find that Titanium is terrible for a particular task, can I just write that in Objective-C for iPhone and Java for Android or does that involve a bunch of hacks? I'm hoping we'll be able to build the basic stuff cross-platform, but I'd still like to be able to drop to native code if I start hitting snags or some hardware feature is poorly supported. We're leaning towards Titanium since we (as a shop) are unfamiliar with Ruby, but Rhodes is something we're definitely looking into as well.
From what I've read, the jury is out on these frameworks, so I'd like to have fallback options in case the app becomes buggy/unwieldy halfway through. I realize that a lot of this depends on exactly what you want to do with the app, but we're still trying to figure out what we CAN do cross-platform first...
you can write modules for each of the platforms, how easy it is to drop out and integrate them into you application would depend upon what you are trying to accomplish.
http://developer.appcelerator.com/doc/mobile/iphone/module_sdk
http://developer.appcelerator.com/doc/mobile/android/module_sdk
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.