Saturday, January 15, 2011

How I synchronize OS X Contacts with Google Contacts and my iPhone

Abandon all hope, ye who enter here. Dante.

This one is for Martin.

I have synchronized my OS X Address Book entries with Google Contacts and MobileMe/iPhone for over a year. It mostly works. This is how I would do the Google Calendar part of it if I were starting out today. The MobileMe stuff is relatively easy [1] and I won't describe it further.

Before I begin, however, I require any reader to pass through three gates of informed consent ...

Gate 1. “Do I feel lucky?” Well do ya, punk?

If there's anything in this post you don't understand, you shouldn't try this. It could blow your Address Book apart. You might spend months reassembling it.

Gate 2. Read my 2011 resolution on managing complexity.

This is on the premature adoption end of things. It's taken about twenty years of boring, career destroying committee work to develop an incomplete and flawed standard sharing calendars and invitations. We're ten years of pain away from a similar standard for exchanging contact information.

Gate 3: Scan my Synchronization is Hell post.

Ok, you're informed. If you proceed, as a fringe benefit, you may come to understand why healthcare, a trillion dollar industry, seems stuck in the dark ages of IT. If it's hard to get address books to communicate, how much harder is it to send patient records from system A to system B? You may start to understand things like Halamka's post on a "Universal Exchange Language" for healthcare (heavens, but he's an optimist).

I use OS X Address Book as the "source of truth". That's where I add new addresses, and that's where I define what gets pushed to Google. If most of your contacts are in Google you would take a different approach.

Step 1: Buy Spanning Sync's Contact Cleaner ($5, App store) and try Spanning Sync ($25 a year, $20 if you use my referral code NXC8PS, 15 day free trial). I don't use it sync calendars, just contacts.

Step 2: Back up Address Book. Then use Contact Cleaner to clean it up; note warnings about unusual suffixes and the like. Sync works best with a first name, last name for individuals (no spaces) and a string (with spaces) for "companies".

Step 3: Define a group in Address Book that you'll sync to Google Contacts. Start small and build up. I call mine "Google Sync. Configure Spanning sync to only sync that group:

Screen shot 2011-01-15 at 11.00.46 AM.png

Step 4: After sync used Contact Cleaner again. Try a few reps until you're no longer getting duplicate or messed up contacts.

Step 5: As you use Google, keep an eye out for duplicates. Use Google's merge tool opportunistically. It works well, better than OS X Address Book merge.

Step 6: Over time add more names to the Address Book Google Sync group. Until you've got every address you care about synchronizing.

- fn --

[1] Apple controls both data models and they're roughly congruent, at least if you're on 10.6.6. I don't sync via iTunes because I already own MobileMe and it lets me sync to my accounts on multiple machines. The rest of my family can't sync directly because we all share one iTunes account, they have to sync to MobileMe and separately to their OS X accounts on multiple machines.


Martin said...

Thanks a lot!

Still confusing is that Mac OS X Address Book does not show the respective groups for each address book entry.

JGF said...

There's a trick to showing the groups:

Whenever anyone starts talking about Apple's usability, it's good to have examples like this. Their usability peak was 1993. They've been coasting ever since.

Google's contact/group relationship representation is mediocre, but Apple's is a complete fail.

Martin said...

Thanks again!

Martin said...

Another issue: Why can I only sync my contacts between my Mac and my Google Contacts if I allow Spanning Sync to open a port 80 connection to

JGF said...

@Martin - interesting!

The help file says

"Some users have reported issues between Spanning Sync and Little Snitch, while others have reported that the two work fine together. The trick seems to be that you need to allow port 80 and port 443 access to the following:

/Library/PreferencePanes/Spanning Sync.prefPane
/Library/PreferencePanes/Spanning Sync.prefPane/Contents/Resources/Spanning
/Library/PreferencePanes/Spanning Sync.prefPane/Contents/Resources/Spanning Sync"

Might be for update notification? Or license enforcement?

Martin said...

I got the following answer from the (very responsive) Spanning Sync support:

This architecture allows Spanning Sync to be much more secure than client-only sync solutions, and makes it possible for us to adapt to changes in the Google Calendar API without requiring our customers to install new software.

JGF said...

@Martin -- so they're acting as a proxy for Google's Calendar. That makes sense, esp. given the issues with Google Calendar API and bugs.

Of course if they went out of business the service would stop working - which is one reason to stick with the 1 year license.

This is really an app/service combination, not a classic standalone app.

Martin said...

It makes sense but it is another US-based middleman I have to trust in. I had always hoped that BusyMac would extend BusySync's capabilities to contacts but Spanning Sync seems to be the only usable option if you do not want to rely on Mac OS X' default functions.

BTW, I have noticed that Spanning Sync does not show contact groups created in Google Apps in the configuration window. Can you reproduce this issue?

JGF said...


I don't think Spanning Sync pays attention to Google contact groups.

Martin said...

That's also the answer I got from the Spanning Sync support. Disappointing … I'm now trying to figure out what exactly distinguishes Spaning Sync from the default address book sync function of Mac OS X.

Martin said...

'This is the final release of SpanningSync.'

From the description of the SpanningSync update I received today. 'Final' indicated the end of SpanningSync.

JGF said...

Thanks for the update Martin. Not surprising!