Moving from Google Calendar to iCloud 

There’s a lot of awesomeness about Google Calendar. I’ve been using it, synced to my iPhone, iPad, and Mac, for pretty much everything but my work calendar (stupid Exchange). I used it so much that I even built a Greasemonkey script to automatically create Google Calendar entries from Evites. That’s not necessary any more (Evite finally added it natively), but it’s safe to say I used Google Calendar pretty exhaustively.

Over time, working with Google Calendar across all those devices became a bit tougher. It’s not really Google’s fault–I just wanted to do some stuff that wasn’t as easy to do. Syncing across multiple devices with all of them being able to read/write/update entries became a crapshoot as to whether or not an update would work. Weirdness with iCal (on the Mac) where all of a sudden it couldn’t authenticate to Google’s servers. I’m not sure where the fault lies (probably both on Google and Apple: Google tends to do some stuff non-standard; Apple seems to sometimes not handle non-standard stuff very well), but it would go flaky every now and then.

That being said, it still worked very, very nicely. Mostly. iOS 4 made it even easier when they added native Google Calendar syncing.

But, in iOS 5, Apple released iCloud, and with it, the chance to simplify a bit. I could drop some of the workarounds to go native Apple. So, as risky as that sounds (remember MobileMe … or hell, remember the trouble just downloading and activating iOS 5?), I decided to bite the bullet and move my calendar out of GCal to iCloud. Just one less thing that could go wrong…for better or for worse.

Google makes it very easy to get your data out. Within a minute, I had downloaded my .ics file with all of my historical events. Over to iCal, import, and boom.

It would fail every time.

After a bit of digging (using Console.app), I could see this error:

iCal: Component boundaries mismatch (VALARM VEVENT)

That lead me to think that maybe Google’s ics file had some sections that didn’t match right (I’m pretty smart, eh?). Thanks to Google’s search engine, I was able to figure out why Google’s Calendar wouldn’t give me my data.

I uploaded my ics to this iCalendar validator. I helpfully told me places where the file didn’t parse properly. Using my favorite text editor (hosted on Google’s code repository–is there anything these guys don’t do?), I fixed the problems.

Voila. Everything imported nicely. Moments later, I had my calendar on iCloud.com, on my phone, and on my iPad. Working exactly the same as it was before, but now I get to more easily take advantage of some of Mac OS’ and iOS’ niceties (data detectors, applications creating calendar events), and I can to take one “sync” out of my chain.[1]


  1. Unless of iCloud craters and I go rushing back to Google.  ↩