Warning: This is a biased view. Don’t take it too serious. It’s just a phone…
I bought an iPhone 3GS in 2009 and started programming apps for it soon afterwards. Initially, the learning curve was rather steep. There was Objective C, the Model View Controller paradigm and hundreds of APIs.
I’m an astrophysicist, working on extra-solar planets and Saturn’s rings. An app on exoplanets was therefore an obvious choice as a Hello World program. In August 2009, I submitted version 1.0, which was a simple list of all discovered planets. The app was static, so I had to resubmit a new version to Apple whenever a new planet was found. I wrote the app just for fun. It was never my intention to earn money with it. There is some advertisement in the app, which helps to pay the fee for the Apple developer program ($100 per year).
In November 2010, after 19 iterations the app arrived at version 4.3 and has matured a lot. It has many OpenGL visualizations, animations and push notifications. Looking at the reviews, people seem to like it. That impression is also supported by the download numbers which have reached 200.000.
I receive many e-mails from people, asking for an Android version. With this post I’m trying to explain my biased view on why there is no Exoplanet app for Android yet.
Last month, I even received an e-mail from Angana Ghosh, the product manager for the Android SDK at Google. She asked me about the possibility of developing for Android. I started programming for the iPhone because I have an iPhone, so there was a hurdle because I didn’t own an Android phone. Google was kind enough to send me a free Droid for development. So that problem was solved.
But there is still no Exoplanet App for Android.
First of all, I am really disappointed by the Android phone. Similar to Woz’s experience, I have the impression that every single app is better on the iPhone. If I start developing an Android version of my app now, it would not be as polished and slick as the iPhone counter part. And because I’m doing this just for fun in my free time, why should I spend time on something that will make thing worse. Suppose I build model trains in my free time. Why would I start building another one if I already knew that it will not look as good as the one that I already have.
Second, the development of iPhone apps is really fun. The entire SDK, including the APIs, the IDE, the documentation, the profiler and debugger are great and well-thought-out. The distribution via Apple’s App store is easy and convenient. The whole discussion about app rejections is largely exaggerated. My app got rejected only once, because it crashed during startup. I’m glad Apple takes a look at it before it get’s pushed to several hundred thousand users.
Now let’s compare this with Android. This is an official video for the Google’s App Inventor. Do I need to say anything else? It’s so shockingly bad, it’s hard to find words that describe it. Of course, there is the real Android SDK. But come on, Google. Do we really want to use apps based on this App Inventor? Well, I don’t want to. And that is also a reason why I’m hesitating to be part of the Android community.
Finally, let’s look at the technical side. From a hardware perspective, there aren’t real differences. There is of course the fragmentation issue. But that also exists on the iPhone. One version of the exoplanet app crashed on older devices which ran iOS 3.1 instead of 3.2. But I’m still able to keep track of all devices on which iOS runs and I fixed this bug quickly. That’s just not possible on Android.
I mentioned earlier that the iOS SDK is so great. Here’s why I think so. Objective C is first of all a great language. It’s just C. Plus something on top of it that makes it easier to handle all those buttons and text field that one necessarily encounters in a graphical user interface. I created a few more apps (Hydro, Gravity Tree) which use the same C code that runs on super computers. It’s very easy to glue that code to an interface with Objective C. Many of the new Objective C features are only wrappers. So, these are still C under the hood, and they are fast!
And then there is UIKit, CoreAnimation and all that stuff that makes an iPhone app look and feel slick. If you use the Exoplanet app, go to the Milky Way screen and click the little (i) on the bottom right. It starts an animation that exchanges an OpenGL view (with points sprites, textures and lines that create the milky way) with a WebKit view (which is used to render the text). That’s done with only four lines of code. And it makes a huge difference compared to simply replacing one view with the other. If you sign up for the Apple developer program, you get access to days worth of videos from previous conferences. By watching those, it becomes clear that this kind of thing is the real difference between iOS and Android. A lot of man power has gone into the development of the user interface classes and their optimization. Maybe you don’t mind the pixel perfect transitions or the responsiveness. But I do and I think they are great.
That’s the reason why there is no Exoplanet App for Android yet. Sorry.