iCloud and the problem with opaque sync
iCloud was meant to make data ubiquitous -- to magically handle syncing everything that really needs syncing between iOS and OS X devices, so users simply have the most up-to-date stuff, backed up and available, all the time and everywhere, without worrying. And it is. Except when it isn't. And when it isn't, it's almost as opaque to developers building against its APIs as it is to users wondering where their stuff is. So what to do?
Tapbots' Paul Haddad spoke about the challenges of iCloud sync, especially document sync, on this week's episode of the Debug show. Other developers, however, have already chosen to leave iCloud behind. Vemedio have chosen to do just that with the upcoming Instacast 3.
[iCloud sync is] gone, thank god. Making iCloud reliable is nearly impossible for a 3rd party developer. The app APIs are confusing, unclear and unreliable. There were so many problems on so many levels that we decided to roll out our own sync solution. If something now does not work correctly, we at least have the possibility to fix it ourselves. Another advantage is that the new sync is much faster and works instantly, at least when both devices are on the same local network.
Developer Steve Streza outlines some of the concerns on Informal Protocol:
iCloud’s biggest problem is that it goes out of its way to obscure a lot of this detail from you. Their pitch is that creating apps with the document system and putting them in iCloud means they will all sync magically and you don’t have to worry and we’ll handle it for you thank you very much. But the reality of syncing data is that it’s tough, and network availability is not always reliable or fast (especially on mobile). You have to write a lot of nonobvious code to handle updates and problems. Building for iCloud once means you limit yourself to only Apple devices; you can never get that data synced to an Android device or make it accessible via the web (short of later building your own system, updating your apps, and making them push iCloud-stored data to your own server). And iCloud has not exactly gained notoriety for its stability or its friendliness to developers. The only real debugging tools you have are a web app that lets you see what’s in an iCloud folder and some rather verbose logging flags you can turn on that tell you some stuff about the syncing process. In other words, it’s not easy. I’ve tried to integrate iCloud no less than 6 times in various app prototypes, and every single time I’ve ran from it.
Streza does point out, however, how hard rolling your own solution can be. That's true if you're an indie developer, and just as true if you're Apple. Google, Amazon, and Facebook are internet services companies. Apple isn't. They're having to become one, and you don't pivot from software to services on a dime.
iCloud is still a work in progress, and it will likely continue to improve in future iOS and OS X versions. Hopefully it'll continue to improve independent of iOS and OS X as well, as the advantage of server side services should include decoupled development and hardware that's capable of receiving updates when they're ready, irrespective of the state of client-side OS updates.
The cloud in general, and its increasing importance in every day computing, continues to be a huge challenge for Apple, and one they absolutely have to nail. Fortunately, even their strongest cloud competitors, like Google, are still falling on their faces every once and a while. But time isn't on Apple's side here.
Let's hope everyone in Eddy Cue's internet services division is working on making iCloud and related server-side infrastructure not only ubiquitous, but far more modern, reliable, and scalable for users and developers alike.