I saw this report about Steve Ballmer having some time at the WWDC keynote via DaringFireball.
7 minutes of the June 7 keynote by Apple CEO Steve Jobs has been blocked off for a presentation by Microsoft (MSFT) to talk about Visual Studio 2010
This is so crazy, that I just can’t believe it, but let’s just assume that Ballmer is speaking at WWDC about Visual Studio – what could that be about?
Visual Studio for iPhone
My employer, Atalasoft, is a VS Partner, and I have 3 versions of Visual Studio on my machine. I also own a MacBook, write iPhone apps, and I’m currently writing a book about iPhone development for Manning. I am intimately familiar with VS and Xcode. I would absolutely love to use VS to make iPhone apps for work. Xcode isn’t bad, but VS fits in our process already. At home, I have a Mac and an svn server, so Xcode is what I want, but at work we use Visual Studio, C#, and TFS for all of our work already—it would just be easier to use them for iPhone too.
Visual Studio 2010’s release concentrated on extensions, specifically the kind that alternative languages need. F#’s support was built on those extensions, as are the Iron series languages. It’s meant for .NET supporting languages, but it doesn’t have to be. There is no technical reason why VS couldn’t be extended to support Objective-C, LLVM, etc. – they can even stay within the bounds of Apple’s Section 3.3.1
3.3.1 — Applications may only use Documented APIs in the manner prescribed by Apple and must not use or call any private APIs. Applications must be originally written in Objective-C, C, C++, or JavaScript as executed by the iPhone OS WebKit engine, and only code written in C, C++, and Objective-C may compile and directly link against the Documented APIs (e.g., Applications that link to Documented APIs through an intermediary translation or compatibility layer or tool are prohibited).
But why would Microsoft want to do this? I don’t think they would.
How MonoTouch does it
If 3.3.1 was extended (or clarified by Apple) to allow the Mono style of intermediary layer, then I could imagine it being interesting to Microsoft.
In Mono, there is a 1-to-1 correspondence between a CocoaTouch API call and a .NET function wrapped around it. Every single class and method has been wrapped this way, so the feel of programming against the phone API is just a change to the syntax of the language, not a new API – as if Apple just supported C# syntax. You also get .NET system libraries and garbage collection, but your code is very iPhone targeted, which is what Apple wants.
You can read about MonoTouch from Mono’s lead, Miguel de Icaza.
We bring the C# language, garbage collection, a type safe system […] while getting access to every single iPhone OS API that they want to.
We […] are not really an abstraction layer over the iPhone OS, but merely a compiler that talks to the native APIs.
We released the iPad support 24 hours after Apple released the SDK. We released the iPhoneOS 4.0 support within days of the release (mostly because every one of us was pretty bummed out). Our APIs are a 1:1 mapping to the iPhone APIs.
But, MonoTouch still requires you to use Apple’s Interface Builder to build your GUI. It still requires you to use a Mac.
If Microsoft adds a .NET wrapper around CocoaTouch and also starts generating GUI resources from their designer, it would make it possible to develop iPhone apps on a Windows machine with standard tools.
Enterprise Development (and RIM and Android)
Jobs is probably hearing that the corporate world wants this. RIM and Android both use Java tools, and Jobs needs to beat them in business (or at least challenge them).
Even if Jobs doesn’t allow these apps in the App Store, he’s already said that MonoTouch apps are allowed in the Enterprise Developer Program with internal distribution. This might be enough, if there was also Visual Studio support. Enterprises make tons of custom apps that they never intend to distribute – they need a way to make those quickly, and a lot of them already know .NET and Visual Studio.
Another reason Apple might be ok with this is that the Unity game framework’s iPhone support is built on top of .NET (via Mono), and Apple can’t afford to lose games made with Unity. They aren’t rejecting them yet, and games don’t really lose much when written on a compatibility layer because they seldom use built-in components or rely on device features.
So, I don’t think Ballmer will be at WWDC, but he’s proven that he loves developers, and developers want to make iPhone apps, so maybe … (nah, no way).