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.
They might sell a few more Mac desktops this way but I can't see it being a large number in the grand scheme of things.
One of the reasons I bought an Android instead of an iPhone was because I can develop for it using the computer I already have.