iCloud & TimeTag

If you've been a customer of TimeTag for a while, you know that the number one thing it's missing is a service to keep all the records in sync with one another. And you probably know that I've promised that syncing is "Just around the corner" for several years now...with nothing shipped yet. 

The lack of syncing isn't because of a lack of trying. I can't count the number of hours I've spent reading about implementing iCloud, watching developer videos, reading tutorials, testing out sample projects, etc. The problem is that there's really two types of iCloud syncing. There's the one that's actually super simple to implement: the file based one. You just save your files, and each one gets synced in some magic folder in the sky. That works just great.

The other iCloud is one based on Core Data. You see, Core Data is what they call a wrapper around a sqlite database. Which is all fancy talk for "it's where all the records go". When iCloud was announced, I thought for sure that since I used only Apple technologies, I could just flip a switch in my app and say : Hey app, stick this in iCloud instead of on the device. But nope, that couldn't be further from the truth. 

There's hundreds and hundreds of lines of boilerplate code that need to go into it and there's even hundreds more to deal with all the various scenarios (like the user turns off iCloud, iCloud isn't available, the user switches iCloud accounts, etc).

So why not try to use another service, like Parse or Dropbox? They have their downsides too. Parse requires a user to sign up, which most people hate to do (me included). It also has a cost associated with it, which I would ultimately have to pass onto the user in some form. It also would still have a ton of work behind the scenes: While Parse is super simple to setup, it's tougher to build a syncing agent that pushes changes out to all the devices running the app.

Dropbox is just a file system in the cloud, so I'd have to basically store the database as a file online, which has a ton of issues associated with it. If a bad network save occurs, it risks damaging the records, and then nothing has access. And again, it has a lot of the same issues as Parse, in terms of telling different devices that something has changed, what did change, etc. 

Basically it's just been an incredibly frustrating experience. There is some good news though. Apple is continuing to invest in iCloud and has lined up some much needed changes for when iOS 7 rolls out to make it easier to integrate. I'm also about to launch a new app built around iCloud from the start which has taught me a lot about how it works (and how it doesn't) so I can bring that knowledge to TimeTag next. 

I'll continue to learn and read and struggle until iCloud finally ships with TimeTag--because as a user of the app myself, I too really want it to keep everything in sync.  

I do appreciate everyone's patience!  I probably want it more than you do, so bear with me while I figure out how to ship it (and make sure it *really* works well).