iCloud, perhaps more than any Apple software product, is meant to "just work." When Apple introduced iCloud, it made clear its hopes to eradicate settings menus and file systems in favor of automation. Steve Jobs pledged to do a better job than he did on MobileMe, Apple’s notoriously horrible stab at web services a few years ago. With iCloud, changes you make to documents on your computer show up instantly on your iPhone and vice versa. "It just works," Jobs exclaimed when he first demoed the service in 2011. "Everything happens automatically," Jobs continued, "and it’s really easy to tie your apps into iCloud’s storage system."
"Everything happens automatically"
Nearly two years later, customers demand iCloud integration more than ever from third-party developers, but it’s a total mess to implement. "iCloud hasn’t worked out for us," wrote Daniel Pasco, CEO of development studio Black Pixel this past week. "We spent a considerable amount of time on this effort, but iCloud and Core Data syncing had issues that we simply could not resolve." Pocket lead developer Steve Streza piled on with a cutting tweet: "Remember that @blackpixel has many of the brightest people in Cocoa development. If they couldn’t get iCloud working, who can?"
"I’ve rewritten my iCloud code several times now in the hopes of finding a working solution," wrote developer Michael Göbel in a blog post, and "Apple clearly hasn’t." The problem is this: Apple has failed to improve the way it syncs databases ("Core Data") with iCloud, yet has continued to advertise and market iCloud as a hassle-free solution.
"The promise of iCloud’s Core Data support is that it will solve all of the thorny issues of syncing a database by breaking up each change into a transaction log. Except it just doesn’t work," said a very prominent developer who asked not to be named in order to stay in Apple's good graces. iCloud apparently chokes hard on the databases it’s supposed to be so proficient at handling. From a user perspective, this means that despite a developer’s best efforts, data disappears, or devices and data stop syncing with each other.
"Many of these issues take hours to resolve and some can permanently corrupt your account," one top developer told me. "AppleCare has been unable to assist our customers who run into these issues." Unfortunately, many apps that want to sync files require the use of databases with parts that all rely on each other. "iCloud is, without a doubt, a great tool for straightforward file saving," says Money app developer Jumsoft, referring to iCloud’s Document-based sync feature utilized by apps like Clear and Day One. Removing Core Data from the app "would make [it] little more than simple spreadsheets," Jumsoft said.
"iCloud is, without a doubt, a great tool for straightforward file saving"
Many problems stem from the fact that Apple doesn’t account for edge cases where users do unexpected things, like sign out of one Apple ID and sign in with another. "How do we handle a user who starts the app logged out of iCloud but later logs in and resumes the app?" wrote one developer in Apple’s support forums. "The reality of syncing data is that it’s tough, and network availability is not always reliable or fast [...] You have to write a lot of nonobvious code to handle updates and problems," Streza wrote in a blog post. The only way to resolve these kinds of issues is to respond to support emails one by one, and in some cases help reset each user’s iCloud data manually, a big waste of time for developers.
iCloud errors which lead to corrupted files or data loss jeopardize customer loyalty. "I too have been receiving customer complaints and one-star ratings," wrote developer Brian Arnold in Apple’ support forums. "I have yet to receive a suitable response as to why the problems are occurring, or what I might be able to do about them." Apple’s support forums are littered with complaints about syncing with iCloud.
"iCloud with Core Data is a developer’s worst nightmare"
"iCloud with Core Data is a developer’s worst nightmare," a developer told The Verge. "It’s frustrating, maddening, and costs hundreds of support hours." One of the toughest parts is that customers demand iCloud support after seeing Apple marketing, yet developers can’t deliver. "One key thing to understand is that user’s perception of iCloud’s functioning is largely based on apps that do not use Core Data for their sync," AgileTortoise developer Greg Pierce told me.
When Apple does use iCloud, it most often doesn’t even use Core Data to sync information. Apps like Keynote, for example, use the far simpler Document-based syncing method. Keynote must work, so Apple keeps a close eye on Document-based syncing functionality. And when it does rely on Core Data, Apple’s software has no more luck than third party developers. Apple’s simple Trailers app uses Core Data to sync, and periodically loses track of user Favorites. "The best Apple technologies are ones they use themselves," one developer told me.
Apple keeps quiet
"Can anyone from Apple comment on this situation?" asked developer Justin Driscoll in Apple’s support forums. "I’m scheduled to run a promotion for the app (which I’ve already paid for) tomorrow and now it looks like I have to remove the app from sale instead." Apple hasn’t been helpful with developers struggling with iCloud syncing, and has instead elected to deflect support requests towards the next iOS or Mac update.
The issue dates back more than a year to Apple’s Worldwide Developers Conference in 2012, where hordes of developers lined up outside Apple support desks hoping to get answers about why iCloud was so difficult to implement. Apple’s documentation on integrating iCloud into apps has been sparse, and developers hoped to get answers from Apple. "You could mistakenly be led to believe that integrating iCloud in your Core Data app will be a walk in the park," developer Drew McCormack wrote a month before WWDC. "Unfortunately, at this juncture, nothing could be farther from the truth."
Just wait until iOS 6, Apple said to developers at WWDC. The company also released sample code developers could use to build out CoreData syncing, but the code was incomplete at best. "From iOS 5 to iOS6, things got 100 percent better, but not nearly good enough," one developer told me. The problem is partly due to the fact that Apple only had four people leading the company’s work on Core Data as of last year, a source close to Apple has told me. The company has simply not expressed any desire to fix Core Data syncing.
Apple declined to comment on this story.
Many veteran developers have learned their lesson and given up on iCloud’s Core Data syncing entirely. "Ultimately, when we looked at iCloud + Core Data for [our app], it was a total no-go as nothing would have worked," said one best-selling iPhone and Mac developer. "Some issues with iCloud Core Data are theoretically unsolvable (stemming from the fact that you’ve put an object model on top of a distributed data store) and others are just plain bugs in the implementation," he said. Syncing alternatives exist, but none of them live up to the goals iCloud set out to achieve nearly two years ago: creating a seamless syncing solution that "just works" without logging in or setting up anything.
So what about Dropbox? It seems to be the most popular solution. First, integrating Dropbox means asking users to sign up for and and authorize one more app. "As much as I like Dropbox both personally and for Elements, I want to support iCloud because it’s one less barrier to entry for customers who don’t have or don’t want a Dropbox account just to sync files," Elements app developer Justin Williams told me.
"I want to support iCloud because it’s one less barrier to entry for customers"
Second, Dropbox uses Document-based syncing. If you’ve ever tried to sync an iPhoto library with Dropbox, you know that Dropbox also chokes on databases. As Jumsoft and several developers have confirmed, document-syncing isn’t what they’re after: the dream is to have databases on two or more devices that stay perfectly in sync. In truth, nobody has been able to do the job well in the iOS space, so iCloud was a beacon of hope at its inception.
The final reason to spend hours toiling over iCloud? Apple loves to feature apps that effectively implement its solutions, like in-app purchases, Game Center, and iCloud syncing. "If you don’t incorporate iCloud into your apps, Apple will never feature them," Göbel wrote. For developers, being featured can mean the difference between a breakout hit and total bust.
The waiting game
WWDC 2013 is just around the corner, and while many of iCloud’s syncing issues have been fixed, dozens of bugs remain unsquashed. So can these issues ever be solved? "[Apple’s] approach to the problem was very novel and interesting, and perhaps they will ship a version of it that works – but it functions very differently than typical sync solutions in that there is not a central server hub that maintains the ‘truth in the cloud,’" Pierce told me. "Because of this there is a lot of fragility to the implementation, and I’m not sure it will ever scale well to larger data sets," he said. In layman’s terms, it’s damn hard to keep databases with countless interdependent parts in sync.
"Our only recourse is to throw bugs into the black hole that is Apple’s Radar bug-filing system."
"Our only recourse is to throw bugs into the black hole that is Apple’s Radar bug-filing system and hope that they fix stuff," another top iOS developer told me. It would be one thing if Apple made clear it was working to improve Core Data sync, but I’ve been told that there’s close to zero communication with developers about its progress. There’s only the occasional murmur, at WWDC or on the street between developers and Apple employees, who acknowledge the issue but provide no timeline on a solution. "I would love for Apple to tell us they fixed everything with iCloud in iOS 7 and we can finally use it without issue two years later, but I’m not getting my hopes up," one developer told me. Another who has thus far adamantly supported iCloud said, "If Apple doesn’t fix it in iOS 7, we’ll have to abandon ship."