In contrast to many Apple frameworks, the iCloud stack is very weird, and almost feels “tacked on”. The basic idea for a developer, is that by moving document files to a special location, they are ‘moved into iCloud’. Although it is easy to visualise this process, it is cumbersome to implement. If a user turns iCloud off, for example, the onus is on the developer to move all the files back into the local application storage, ensuring to handle edge cases appropriately (such as disabling iCloud on one device, but not others). Later, if the user re-enables iCloud, the developer has even more work to do, matching and merging documents in the cloud with those that, until a moment ago, lived in the confines of the local device only. Another layer of complexity arises when the document model needs to change (by an app update): What happens if the user has two devices, but has only updated one of them?
Alongside the blips in Apple’s backend (which developers have no means to debug) these incompatibilities mean that integrating iCloud is frustrating and painful; it is much more work than it should be. Low-level APIs are important, for applications that require deeper customisation and behaviour, but the lack of a simple API has deterred almost everybody. Even complex apps would benefit from a higher-level “save to iCloud” command sometimes, as you don’t always need specialised behaviour to perform some actions.
The fear I have is that iCloud may follow the path of Apple’s other cloud initiatives; it fails and Apple rebrands it in a couple of years. This pattern has been shown throughout the past: iTools to .Mac, .Mac to MobileMe, MobileMe to iCloud. However, the improvements made in iOS 6 and their repeated statements on their commitment to iCloud give me confidence that these issues will be resolved. Consequently, iCloud will work as it should: like magic.
In some places, it does act like magic. Photo Stream is simply great. Logging in to a new iOS device and seeing all the bookmarks from your Mac is fantastic. It is a shame other areas, particularly those involving third-party apps, let the service down.