I thought that the highlight of today’s WWDC Keynote was “Handoff," technology that allows iOS and Mac OS apps to share data in real time. In one demo, Craig Federighi began composing an email on an iPhone, and then he completed/sent it with a desktop Mac. Another demo involved opening a web page on a Mac, and then showing it to a friend using an iPad. Apple didn’t announce whether this technology will be available to third parties, or only in first-party apps (Apple often releases new OS features to internal apps before it makes them available externally). I’m guessing that even if this technology isn’t available to everyone this year, it will be by iOS 9.
The thing that excites me about this announcement is the potential of interoperable, run-anywhere applications. We are in the process of transitioning from having our applications and data tied to a single device to being able to access them anywhere. While this has actually been underway for quite a while in the data realm (thanks to DropBox, iCloud, etc...), this move begins the transition towards run-anywhere applications. One could argue that the advent of rich web applications was the beginning, but the longer-term goal is to allow even native apps to share data and run anywhere.
I can see a future where developers build a single version of their app that runs on iPhone, iPad, and Mac OS X (and hopefully Linux, Android, and Windows OSes, although let’s leave that discussion for another time). We already (sort of) have device-independence for the web in terms of responsive web applications - developers can build a single version that scales to a variety of different screen sizes and platforms. Since pretty much any device can run a web browser, we have a low level of device independence. However, web applications are still much slower than native apps, and lack direct low-level access to the hardware. In the long-run, I’m guessing that web apps will merge with native apps as web browsers improve in performance and gain greater hardware access (Google is doing some interesting things in allowing developers to build Chrome apps that look and work like desktop apps). But we aren’t quite at this vision of a unified platform, and won’t be there for quite some time (if ever - that would require too much cooperation between companies that hate each other).
iOS already has a mechanism to build apps for both the iPhone and iPad, although it isn’t as elegant as responsive design (developers use discrete layouts rather than designing a single layout that scales to the appropriate screen size). So, for now, that will have to do. Now the big question is whether it’s possible to extend similar support to the Mac. Obviously there would need to be an elegant way to deal with differences between iOS and the desktop, such as the touch/click difference, window chrome/resizing, and multitasking. But, even if there were an API that glossed over these differences by default (specify one fixed window size and convert touches to clicks), it would be a good start. That way, you could get instant cross-platform compatibility, and could extend the apps to elegantly support each platform.
Now we have to consider data sharing, since it’s important to have not just run-anywhere applications but also access-anywhere data. The Mac OS App Store moves the desktop more towards a sandboxed version of the world, so it’s feasible that all of the data would be stored in Apple’s iCloud rather than on your hard drive (most of my data on my SSD is just program files - all of my data is in the cloud). Once we have everything stored on the cloud, and appropriate APIs to support access, we can easily have our data anywhere (and we do even today, so long as we have an appropriate application that can read/use that data). There’s still the need to synchronize data that hasn’t yet been written to a storage device (such as an email), but technologies like Handoff have tricks to handle just such a problem. When developing applications for the unified platform, developers will be able to annotate the data that needs to be available anywhere, and then the applications can take care of state synchronization between devices. If it’s truly a single code base that’s running everywhere, the synchronization problem is actually easier to solve, because you only have to write the logic once.
The result is that you can put down one device, pick up another, and continue working with the same applications. Sure we’ve sort of had this for years, but only in bits and pieces, and not as a single, coherent solution. In its latest attempt to tie us even more closely to the Mac platform, Apple actually shows us the high-definition version of this vision.