Несколько раз, когда я писал письма через 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
Для ускорения синхронизации воспользовался командой, найденной на
/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.
В заключение хочу сказать, что я описал бесплатное решение, использующее штатные средства системы. Раньше я использовал платную систему