Несколько раз, когда я писал письма через GMail, оказалось, что email’ы отсутствовали в адресной книге GMail, но при этом я их аккуратно записал в адресную книгу на Маке. Вспомнив, что в настройках Address Book кроме синхронизации с MobileMe есть ещё и синхронизация с Google, я решил сделать единую адресную книгу для всех используемых мною сервисов.

Предупреждение: обязательно сделайте бекапы адресной книги в Mac OS X и в Google.

Для начала я удалил из адресной книги в учётной записи GMail всех, кроме людей, с которыми я общаюсь по Google Talk. Сразу предупреждаю – у меня трижды были ситуации, когда при полной ресинхронизации удалялись контакты GTalk, в итоге могла теряться авторизация и приходится её повторять (или самому, или же контактам). Например, вот вообщения, которые были получены во время чистки, хотя этот контакт не удалялся:

|2009-09-25T12:57:47|7|from|N---|unsubscribe
|2009-09-25T12:57:48|8|from|N---|unsubscribed
|2009-09-25T12:57:48|7|from|N---|unsubscribe
|2009-09-25T12:57:48|8|from|N---|unsubscribed

Затем я включил синхронизацию в Address Book с Google, согласился с предупреждением, и ввёл имя и пароль учётной записи GMail

Для ускорения синхронизации воспользовался командой, найденной на форуме MacRumors (Terminal.app). При наведении на команду появляется toolbar, через который можно её скопировать, пока привожу так, а потом буду разбираться с нормальным представлением текста.

/System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync

При выполнении выдались ошибки, но если процесс повторить, провести вычистку дублей (ниже), то они исчезают:

ole-mac:~ ctrld$ /System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync
2009-09-25 11:51:44.398 gconsync[14521:903] [10af20] |ISyncSession|Warning| com.google.ContactSync: transitioning to cancel - session cancelled by server: SyncServer failed to merge the changes from some clients: ISyncSessionCancelledException session cancelled
2009-09-25 12:02:02.821 gconsync[14599:903] [10af20] |Miscellaneous|Error| SyncServices precondition failure in [ISyncConcreteSession _commitAcceptedChangesAndStartAnotherTransaction:]: you have unresolved references to the following records - you must resolve all references before you can commit your changes: (
    "gcon:8043E07A48134EB4AE9C7577303B4CF4",
    "gcon:D459FE78D1D4843A4F55A8B6C093C920",
    "gcon:4B5BCB55395EEDB3F9E0AD5D72B01A7E",
    "gcon:4BADF21324A3E74731111037F495D827",
    "gcon:64A7F1889C6ED59F4644C47EAF97EB9F"
)
2009-09-25 12:02:02.821 gconsync[14599:903] Top level exception caught [ISyncConcreteSession _commitAcceptedChangesAndStartAnotherTransaction:]: you have unresolved references to the following records - you must resolve all references before you can commit your changes: (
    "gcon:8043E07A48134EB4AE9C7577303B4CF4",
    "gcon:D459FE78D1D4843A4F55A8B6C093C920",
    "gcon:4B5BCB55395EEDB3F9E0AD5D72B01A7E",
    "gcon:4BADF21324A3E74731111037F495D827",
    "gcon:64A7F1889C6ED59F4644C47EAF97EB9F"
)
ole-mac:~ ctrld$ /System/Library/PrivateFrameworks/GoogleContactSync.framework/Versions/A/Resources/gconsync --sync com.google.ContactSync
ole-mac:~ ctrld$

Также может выдаться окно с сообщением о конфликте синхронизации с предложением выбрать, какой контакт правильный. Обратите внимание, что новая запись имеет дополнительное поле “Google Talk”, по крайней мере для тех, с кем вы общаетесь по GTalk.

Затем следует чистка дубликатов в Address Book, их редактирование, слияние и удаление. Приготовьтесь к задвоениям/затроениям контактов, их придётся вычистить вручную и повторить синхронизацию указанной выше командой, и снова повторить процесс.

В итоге синхронизация работает, при создании контакта в GMail он синхронизируется в Address Book. Я пока не смотрел, как часто производится синхронизация, но я думаю так же часто, как и с MobileMe.

В заключение хочу сказать, что я описал бесплатное решение, использующее штатные средства системы. Раньше я использовал платную систему Spanning Sync, и она удовлетворяла всем моим запросам по синхронизации. Она кроме адресной книги позволяет синхронизировать календари (в iCal же можно только подписываться на внешние календари, включая Google, но это не то, что нужно).