Here is a nice comparison. Buy a mobile device and try to use the standard developer tools to put Hello World on it.
Android: Download Eclipse (Windows, Linux or Mac) and the Android SDK (Windows, Linux or Mac) - no accounts or registration needed for either of these. In your phone menus enable development and connect via USB. In Eclipse make your hello world project, and hit Run or Debug. Enjoy.
Apple: You must buy a Mac. In the App Store (requires an account) or the developer site (requires an account and registration) download Xcode. Create your project. Connect the phone via USB. Right click to enable it for development and then do some song and dance with Apple to get permission to use "your" device for development. (I haven't yet worked out the exact dance required and how much it costs.)
I don't know what it looks like for WP7 but assume it is substantially similar to Apple.
- Download the SDK (free), which includes Visual Studio (For Windows Phone) Express IDE. It also includes an emulator tool. http://create.msdn.com/en-us/home/getting_started
Obviously only runs on Windows.
- To deploy to your phone, you'll need to become an app hub member ($99 per year). Or there's numerous ways to unlock your phone for app deployment (if you search hard enough). And then you can just deploy from within Visual Studio to a USB connected device.
http://msdn.microsoft.com/en-us/library/ff928362(v=vs.92).as...
There's probably more to it, but I personally have yet to deploy a WP7 app to a device. I've written a few test apps though.
WP is utterly painless re: deployment; plug it in, give it a dev certificate (automated, you only sign in to apphub), and hit run from MSVS.
What I was more impressed with, they handle signing your xap for release as well; it's all automatic (slightly less so on Android, much less so on iOS).
What specifically do you have to do to get that dev certificate? Is that for you or for the device? (Note I'm only talking about the case where you want to put you own app on your own device, not about publishing it to the general public.)
Hopefully my original post inspires someone to try this with all the platforms. I'm particularly aware of the requirements to create accounts and registrations, the size of downloads, how limited your choice of host environments is etc.
The next fun step is how do you get your hello world onto a friend's device without using a cable or requiring them to be in your presence.
Besides paying the $99 for a dev account (that allows you to publish to the marketplace), you can pay ~$10 for a personal app account, which allows you to load 10 apps of your own creation onto your device. Much cheaper if you just want to put your own app on your own device.
I have to pay to load applications I wrote myself on my own device?
This is even more ridiculous than just locking down the platform. This is
a slap in the face. Good thing WP7 is failing to reach the mass market so far.
I seriously hope it stays that way.
You're paying for an affordable, restricted developer account. This is better than iOS. Don't feign outrage or spew hyperbole just because it's not 100% of what you demand. You can't defend your argument that a $10 dev account is somehow worse than a $99 dev account.
My point is that this is ridiculous in the first place. There is no reason
to disallow people from running their own code on their own devices.
It's even worse like this. What they are doing is essentially making an undesirable
situtation, then capitializing on that by offering you a slightly less shitty
solution (which is still far from reasonable):
"Hey, you could buy a $100/y dev account, but we're so incredibly generous
that we'll allow you to run a few programs at a premium of $10!"
They are charging for something that should be one of the most essential
freedoms of a computing device. This is insane, no matter how you try
to sugar-coat and excuse it.
The basic argument is, it's a cell phone. It's an embedded device. It's not a computer (as proved by the "post-PC-world" phrase). A traditional cell phone could run apps (Tetris, Snake, etc). A game console is built to run "apps" (video games). Yet no one is loudly complaining that they cannot run their own software there for free. A smartphone is more closely related to a game console than a traditional personal computer.
Will we reach the point where smartphone (or smartphone like devices in the future) are considered computers and we can use them freely? I hope so. It might happen. It might not. What we can count on is there will always be the choice on the market for those who require that choice. Not everyone does. I have a Windows Phone. I've never been bothered by not being able to install my own software. I also have an HP Touchpad with Android and WebOS, the two freest OSes on the market right now. Never sideloaded. I don't need to.
My point? Your outrage is misplaced, for several reasons listed above. People often talk about consumer choice, but the rubber meets the road when consumers willingly make an informed decision (in my case) that the crowd doesn't understand. I bought a Palm Pre not because of the freedom, but because of the UX. I bought a Windows Phone for the same reason. Sometimes a smartphone is just a smartphone. You might not understand my choice, but I do and that's what counts in the end.
Neither of your point disproves the fact that it's ridiculous. It's not
about whether you want to run your own applications or not, it's about
having that choice whenever you want to. On every computing device. This
is - or should be - a fundamental Freedom, one which you should not be able
to sign away, not even by an "informed choice".
Citing examples like feature phones and gaming consoles isn't helpful, either.
Just because nobody complained in the past doesn't make it okay. Also,
as the quite active homebrew scene around most consoles proves, there
is value in being able to run your own stuff on gaming consoles. You might
remember the deep shit that Sony got themselves into when they decided to
turn off OtherOS on the PS3 for no reason whatsoever.
Anyways, I think consoles - while owning quite a few myself - are a thing
of the past. They're eventually going to die. The coming next generation might be
the last we see.
You pay $99 for an App Hub registration, then sign in to the device registration app on the desktop with the device plugged in. After that, it's pretty much automatic. I haven't done that much WP dev yet, so I'm not sure about friend's devices, but so far it's been relatively painless.
(Well, except Windows making installing VS and the Zune software almost impossible, but that's just what happens with Windows. On a clean install. After installing all the updates it wanted. Of which half failed the first time. And rebooting. And rebooting again. But none of that is related to Windows Phone, except that as Apple doesn't make tools for their competitors OSes, Microsoft doesn't either.)
Just as an aside, you get free registration with App Hub as a student via DreamSpark (or at least you did about a year ago; I assume it's still the case.)
The Apple song and dance involves creating developer certificates, project-specific code-signing certs, installing them all on your Mac and your device, and then setting up XCode to use the correct certificate combinations for the correct projects in the correct environments when signing the code (I can't say for certain how this all works because I basically trial-and-errored it until it miraculously started working). It is free (with your account) as long as you don't want to distribute your application on the app store, or even use it on your own device without having to renew your code-signing certificates every few months. Otherwise it's $100/year.
I still haven't figured out how to do the song and dance. (All I want to do is run hello world on "my" device.) You eventually end up at this technical note, which of course leaves out any links:
This process is truly the most cryptic thing to ever come out of Apple from a developer standpoint (30 years developing Apple software). Amazing that this comes from the company for the rest of us. Believe it or not, it is super streamlined now compared to what it was like when it first opened for business! All of this effort to keep you from writing software for something you bought.
I can understand the hoops if you want to sell your app on the official Apple store, but I think it would be very reasonable to allow devs to create and sideload apps. It's your device, your risk. That seems like a post-Jobs compromise that everyone could live with.
The net result is that if anyone just wants to play home hobbyist I sure won't be recommending going the Apple route. Then again I suppose Apple is keen on keeping the riff raff out!
Even installing Xcode was a nightmare for me. It was a brand new Mac so there were a whole bunch of system updates. I told it to go ahead and do those. In App Store I found Xcode and said to install that. You don't get any indication of progress at all. A while later I came back to the machine to discover it wants to reboot, so I let it.
Can't find Xcode anywhere so I look back in the App Store. There is an install button but clicking it has no effect. My best guess is that it never occurred to anyone at Apple that a 1.8GB download could be interrupted by a reboot (from Apple's own system update tool) and that being able to continue would be useful. I had to do lots of Googling before figuring out I wasn't the only one and I could do a manual Xcode download from Apple's developer site. Then it took a lot of faffing around to figure out /Developer versus /Applications and how things were looking for it. I'm still not sure it is right, why I have to create symlinks but at least everything works.
For me the single most amusing thing about Macs and the legendary attention to detail is how the first thing I did was use Finder to go into Applications. Despite being on a 1920x1200 screen the default Finder window size is smaller than the Applications view so there were both horizontal and vertical scrollbars to look around the contents. Why can't the icons auto-arrange based on window width? If using a fixed area, why default to a window size smaller than the fixed area? Why default to postage stamp sized window on such a large screen?
Yep, about that XCode installation: They screwed up when they first made it MacAppstore-only. It has become much better now, it can also update through the appstore without redownloading the whole multiple GB package. The whole Lion software generation was pretty half baked from start if you ask me. It's getting better again now. It sounds stupid but I think as well that Lion has been Apple's Vista. I just hope ML will be their Windows 7.
I had to learn Objective-C, how to use a Mac and Xcode inside of a month, because the company we normally outsourced this kind of development to didn't have time.
Never in my wildest dreams would I've guessed that the actual programming would be the easiest part.
Chances are you were forced to use something called iTunes. Now people do not think twice about iTunes.
But back then there was just no sensible reason, from the user's perspective, not to let a user add/remove music from an iPod without jumping through an additional hoop. People had to spend countless hours deciphering the protocol in order to build programs that could do what iTunes did: add/remove music.
Out of the box, the iPod was literally unusable without first installing some Apple software.
No matter how wonderful the design of an Apple device, the hoop jumping just becomes increasingly tiresome. I'm too tired to do the Apple dance.
The alternative at the time was to buy an mp3 player with no way for normal people to load or buy music. It's precisely because of the lack of hoop jumping that iPod took off. Don't confuse the customer experience with the developer experience. Apple has always considered ease of use for end users a top priority and ease of use for programmers to be a distant nth.
When iTunes came out, there was no way to buy music with it either. It was that way for several years.
Adding to that, when iTunes came out, most people didn't put any thought into ID3 tags. When they imported their music, their library became one big mess.
Windows support was not immediate either. It took some time. I used to use a program written by a student at Williams College. I forget the name. It was more simple and faster than iTunes. Then for a while I used a Perl script. I must admit, in retrospect, Apple knew what they were doing. I just couldn't see the point in iTunes. I doubted whether their $1/song "music store", and forcing users to use it by forcing them to install iTunes, would ever fly.
IIRC correctly most of the older MP3 players didn't need any software beyond what was built into Windows.
Of course this was the era of Windows 95/98 so how well that worked overall it's difficult to say.
No matter how much you might try to excuse it, there is no greater user friendliness
than a device simply identifying as data storage to the OS. It's ridiculous to have
to use a separate program when you could just use your file manager.
That's a consequence of cutting deals with the music industry. Apple had to block users using their iPods as devices for copying music around to enable the iTunes store to work. There are all kinds of trade off in iTunes design, but in the end it's the only significant end to end solution out there, even after all this time. (Kindle Fire is close.)
Oh and anything that involves the file system is not friendly for a surprisingly huge number of users.
>Oh and anything that involves the file system is not friendly for a surprisingly huge number of users.
"User friendliness" in this case also includes developers, who could easily write a
program that interacts with the device. For example, any media player could be used
to synchronize music (if it supports that feature).
On the device, tap the menu button, then tap "Xterm"
Type in 'nano helloworld.py'
Enter the text 'print "Hello, World!"'
Ctrl-x, ctrl-s to save the file
Enter 'python helloworld.py' and press enter
Of course, as Maemo is based on Debian, you can easily install Ruby, PHP or even a C compiler.
WP:
Despite a modest launch and a limited distribution in terms of markets, Nokia's N9 model has reached sales estimated between 1.5 and 2 million devices. According to Nokia's own quarterly report and analyst company Canalys analyses, the combined deliveries of the comparable Lumia devices summed to approximately 1.2-1.5 million in the last quarter.
The N9 is the next in the series after the N900, and aside from a lot of very cute UI changes, and a lack of a keyboard (which was relegated to the N950), it still runs on Maemo (though branded MeeGo) and is a Linux phone.
Oh, and they switched to rpms from debs, I think. I can see how that would make you think they were unrelated:)
Download AIDE from play market
Enable apps from untrusted sources
Start coding
Run your app!
AIDE really is a fantastic achievement, i had a play about with it when my laptop died a few weeks back and i was itching for some coding! It's a fully-fledged development environment with code completion, refactoring and many other cool features. Something surreal about writing android apps on an android device!
Installing xcode is staggeringly more pleasant than installing eclipse in my experience. The developer certificate song and dance is a total pain in the butt, but note that you can test and build your hello world for iOS without a device at all, no hoops to jump, and it works really well.
Installing xcode is staggeringly more pleasant
than installing eclipse in my experience
People saying that don't really know what they are talking about. Installing Eclipse involves these steps:
1) install Java, which on my Ubuntu is just "sudo aptitude install openjdk-6-jdk" and that's it
2) download an archive from Eclipse.org and unzip it somewhere
3) there is no step 3
Installing the Android plugin is equally easy. Then there's always IntelliJ IDEA which is probably the best IDE and comes with Android integration built in. The community version was recently open-sourced too.
After you registered on the app store, which requires giving them name, sex, email, address, phone number and going through the account validation email and "password must contain X special characters and you need six different security questions" hoops.
Last time I checked, Java SDK or Eclipse didn't want my A/S/L.
If you just bought a Mac in order to develop for iPhone then yes, you need to create an Apple ID and jump through all the hoops. Like if I wanted to run that aptitude command I would have to download, install Ubuntu and learn unix first.
But if you already are a mac user then you already have an Apple ID. It is absurd to say that you need it to download Xcode.
Really? The App Store makes Xcode installs fairly easy (though upgrading from pre-App Store Xcode breaks things in my experience), but what could be simpler than downloading Eclipse's zip, and then unzipping it?
Or do you mean it's a pain setting up the Android SDK within Eclipse? This could certainly be more stream lined (though I think it's fairly simple to setup as well).
That's a brutal over-simplification of what you need before developing for Android. "Downloading the Android SDK" is actually a dozen steps of installs, updates, add-ons, setting up emulator devices and so on.
The Apple dance takes a couple minutes to do and costs $99/year.
"Downloading the Android SDK" is actually a dozen
steps of installs, updates, add-ons, setting up
emulator devices and so on.
That's not true. The first time I did it, it took me something like 10 minutes. I must say that I was already familiar enough with Eclipse to install the plugin without much struggling (though it can't get any easier, unless it came built-in). Beginners should also try out IntelliJ IDEA which comes with Android integration built-in.
The Apple dance takes a couple minutes to
do and costs $99/year.
That's also not true. It took me somewhere between 2 and 3 hours. And you don't have to pay $99 for getting the Hello World on your phone, but you do have to fuck around with certificates for signing the binary and you also have to read a lot of documentation.
You are right that joining Eclipse and the Android SDK is not as seamless as it should be. Technically you don't need Eclipse and the SDK can create Hello World for you in addition to building and deploying it. (Another minor difference I noticed between Android and Xcode/iOS is that a auto-created Android project printed "hello project" on the screen while the iOS one was blank.)
As for the Apple dance, can you point me to the URL or actual documentation I can follow to get all the certificates, admin and whatever else it wants? All I can find is doc saying I need to do it, but nothing saying how to do it!
There is a "iOS Provisioning Portal" and the "Development Provisioning Assistant", a 4-step wizard that guides you through creating the necessary profiles, but they are behind a login. There's a few SSs over at PhoneGap docs: http://www.adobe.com/fr/devnet/dreamweaver/articles/phonegap...
Ahem, if you are registering from something like India. You will have to fax some documents to them for review. There is no option to even pay online. In fact, this song and dance is so time consuming that, I haven't bothered to register an account myself.
It was for Apple obviously. Only apple can require you to pay $99 and fax them your proof of identity just for running a app on your own device (actually, I no longer remember which document they asked, but I remember I didn't had time or motivation to scan and fax those documents).
You either got lucky or did the Apple dance a lot more recently than some of us. When I did the Apple dance, I had to wait more than a month before my application to be a developer was "approved", then it took weeks to figure out how to get the certificate stuff working. Even after I got it working it was fragile - my ability to put an app on the phone was never something I could expect would just work - it would spontaneously break with a cryptic error for no apparent reason.
If you are using the simulator, you also need to setup that separately in a complicated process, and then it runs damn slow. YOu need to match versions as well. I had an old eclipse, and there was no warning, but I could not get the newer android sdks.
Apple have it right once you have installed xcode. And if you only want to run in the simulator, you do not need to worry about certs.
They both could improve, but are also light years ahead of BB.
"Downloading the Android SDK" is actually not a dozen steps of installs and updates.
It involves downloading one archive, unpacking it, running the SDK manager, checking checkboxes for target platforms you want to develop for and waiting for a couple of minutes, until it downloads. You can also set-up emulator devices for the different platforms.
That's quite a short of complications you speak of.
Yeah, it was significantly more difficult to set up an Android dev environment than it was to get Xcode working. Not to mention, the Android SDK is actually a ton of different SDKs for every possible version of the OS, with a bunch of device-specific SDKs on top of those.
Don't even get me started on emulators. AVD Manager is a joke.
The reason a mac is required for development is that iOS and OS X are essentially the same operating system - they just have different user interfaces. When you run your app under the iOS "simulator", it is actually running as a native OS X app, linked against a version the iOS user interface libraries that have been compiled for OS X.
For Apple to support development on other platforms, as far as I can see the only practical option would be to provide an alternative to the simulator which runs a variant of iOS inside a virtual machine. While this is certainly technically feasible to do, and you could make the argument that they should provide such a tool, it does involve a lot more than simply porting a few user-space tools to run on a different OS. Android also benefits in this regard from using Java, which already has compilers available for all major platforms.
It is also worth nothing that the Android emulator, at least last time I checked, is extremely slow to the point of being unusable. When I was developing for Android I found the only realistic option was for me to test on a real device. The speed of the iOS simulator is one of the main things I prefer about iOS development in comparison to Android.
For the sound of it, the job would be compiling a cross-target version of GCC/LLVM and putting QEMU, an iOS ISO and some libs in a TGZ. Could hardly be called a major feat of engineering.
Another thought: your point is valid, but they should use something other than qemu (e.g. they could probably just buy VMWare with their loose change), and make sure it is running x86 code, not arm. The ARM emulation is I believe the main source of the performance problems in the Android emulator, since it relies on software translation rather than hardware-assisted virtualisation. I've never understood why Google don't use x86 in their emulator, given that almost all Android apps are written in Java.
I think it would be a moderately difficult engineering task, but certainly not outside Apple's capabilities. Ultimately it's a question of whether or not Apple sees benefits in doing so, which I suspect they don't.
It's also interesting to note that back in the dying days of NeXT, when they realised they weren't going to make much money from hardware, they switched to a software-only approach and actually did a port of all the Cocoa frameworks to Windows NT, and you could write Cocoa applications and have them run on windows. So it's not impossible to do this, but given the amount of changes that have happened to the APIs since that time it would probably be easier to go down the VM route.
Porting XCode and emulators to windows/linux is probably a huge undertaking, the technology stack is completely different. In addition, the cost of a Mac for development ($599 for a mini) is not stopping anybody, and most iOS developers will already have one, so there's little return to be had.
$599 for a mini would be stopping me for me one. Since I'm not getting paid to do mobile development $599 is money that could get me a holiday or a used car, I'm not trying to make angry birds here; just a few tools to make my life easier. Besides it seems silly to spend all that money on a low spec Mac when I already have a perfectly serviceable workstation that I have invested in.
Even if it cost them a fair amount of money to port it all over, they're Apple so they have the money in the bank. Plus I can imagine the ROI would be fairly significant when you consider how many more people could get into casual iOS development and then potentially make it into a full time thing.
Xcode and the entire stack behind it do not run on Windows or Linux. It would take a team of engineers months to pull it off, then another team to continuously support it. In those months, the feature set of Xcode and the compilers will have improved again and there would never be a stable version for a different platform.
Porting Xcode to Windows or Linux would probably be the worst idea Apple ever made.
Xcode is just the IDE right? No particular need to port that if you can just use Eclipse or the command line tools. The simulator could come later as long as you can test on a device so all your really looking at is a objC compiler and a linker.
Whilst I'm sure it's not a trivial task something tells me that there is more to this than technical limitations.
Along with XCode comes the iOS simulator, debug tools, publishing/packaging and certificate handling. And of course there is more to it: diminishing returns.
> Porting XCode and emulators to windows/linux is probably a huge undertaking
Apple doesn't need to port their software to Windows or Linux at all but simply allow to use OSX in an emulator. Even this is forbidden by Apple (it's not a surprise).
I think it was a huge mistake of Apple to allow iOS development on Macs only. If they hadn' make this mistake almost all people would develop for iOS mobile devices now, and Android wouldn't have had any chance to win. In some sense Steve Jobs himself was the main reason that Android became so successful :-)
> In addition, the cost of a Mac for development ($599 for a mini) is not stopping anybody,
It has stopped me. I have a pretty good PC, and I never accepted that I would have to buy an additional Mac solely to fed my iphone. It's a waste of room and money. For that reason I use Android.
The cost for a Mac Mini is big enough for me.
Yes I can afford it (I actually do own one), however a Mac Mini is a desktop and that's so 1998 that I can't stand it.
Personally I have a pretty close and loving relationship with my workstation. That's why it needs to be a laptop.
I sometimes work at home, lying on my sofa. I sometimes work while drinking a fresh orange juice or a caffe latte at a nearby coffee shop. I sometimes take trips and work from wherever.
I can't stand being tied to a physical location and working through remote desktop is too painful to bother, feasible if something is burning, but not otherwise.
If you think the Apple dance is bad for getting an app on your own phone, try distributing for beta testing!
People have written Apps to help you work around how difficult it is (eg TestFlight), but even then your beta testers have to download & sign up for some random 3rd party app, then request your app just to be able to test it. Compare that to Android: enable 3rd party apps via the settings menu, then email them the app.
They've now made is possible to do "over the air" distribution, whereby you put up your .ipa file on your website and email your users a link. They can then go to this link on their iPhone or iPad and it will install from your site.
Although it saves you from having to email large files, you do still need to collect your users' UDIDs and add them to your provisioning profile (embedded in the app).
It has been a while for me but from what I can recall you are ready to go once you download the blackberry IDE. There may be an eclipse plugin for that now so you don't have to download the whole monster.
I didn't forget Blackberry. I tried to develop for it in the past. There were a never ending series of downloads. You had to keep registering, repeatedly filling in the same detailed information before they begrudgingly handed over anything. After filling up my machine with bloatware I was unable to even get hello world to appear in an emulator. The chance of getting anything on my device was zero, and they required all sorts of extra certificates and payment to use any of the useful APIs.
I hate when people list "buy a mac" as the first step for iOS development. Some of us already have one. In order to develop for Eclipse, I'd have to buy/own a computer as well.
And some of us don't. It is presumed that you need a computer to run an IDE, but it is not presumed that you need a Mac. So saying that you need to have Mac to do something is quite an informative statement.
I own 5 personal computers, out of which 3 are desktops and 2 are laptops, with 2 of them running Windows, 2 Ubuntu and 1 of them Mac OS X.
Eclipse and Java work on all 5 computers. XCode works on only one. And because that OS X machine is a desktop, I barely ever use it, which is why I bought an Android instead of an iPhone.
Android: Download Eclipse (Windows, Linux or Mac) and the Android SDK (Windows, Linux or Mac) - no accounts or registration needed for either of these. In your phone menus enable development and connect via USB. In Eclipse make your hello world project, and hit Run or Debug. Enjoy.
Apple: You must buy a Mac. In the App Store (requires an account) or the developer site (requires an account and registration) download Xcode. Create your project. Connect the phone via USB. Right click to enable it for development and then do some song and dance with Apple to get permission to use "your" device for development. (I haven't yet worked out the exact dance required and how much it costs.)
I don't know what it looks like for WP7 but assume it is substantially similar to Apple.