Safari: использование dtrace для исследования синхронизации вкладок iCloud

Я изучаю, как Safari синхронизирует вкладки через iCloud.

Для начала я действительно хочу знать, как Safari обновляет свой общий список вкладок, что означает мониторинг его или какого-либо фонового демона для создания и изменения файлов. (Моя гипотеза такова: когда я открываю новую вкладку на своем телефоне, iCloud отправляет push-уведомление на мой Mac, который обновляет список Safari «iCloud Tabs».)

Я пытаюсь использовать dtraceдля мониторинга открытия файла Safari с помощью чего-то простого, например:

sudo dtrace -n 'syscall::open*:entry /execname == "Safari"/ { printf ("%s", copyinstr(arg0)); }'

но dtraceраспечатывает эту ошибку:

dtrace: error on enabled probe ID 7 (ID 160: syscall::open:entry): invalid user access in action #1 at DIF offset 24

(Это та же ошибка , о которой кто-то спрашивал на форумах Apple )

При отладке странной проблемы с разрешениями iTunes с помощью DTrace была информация о аналогичной проблеме с iTunes, но я не совсем понимаю, какие обратные сальто они выполняли, чтобы gdbзаставить iTunes работать dtrace.

  1. Может ли кто-нибудь помочь мне понять Отладка странной проблемы с разрешениями iTunes с помощью DTrace : чем вызвана ошибка и каково ее разрешение?
  2. Есть ли у вас какие-либо дополнительные знания/информация о синхронизации вкладок iCloud? Какой процесс их синхронизирует? Где они хранятся на диске?

Ответы (1)

Файл, содержащий вкладки iCloud:

~/Library/SyncedPreferences/com.apple.Safari.plist

Это двоичный файл, поэтому вы можете использовать его plutilдля преобразования копии в JSON/XML для обработки. Я ожидал, что синхронизация будет через bird, но некоторые легкие исследования с помощью brctl log -wи другие легкие отслеживания не отражают изменения, которые я вношу в базу данных вкладок. На github есть довольно много хороших проектов , которые анализируют этот файл на python, JS, а также хорошее приложение для строки меню:

Знание того, где данные сохраняются на диске, показывает, что syncdefaultsdэто процесс владения:

sudo fsusage -w | grep com.apple.Safari

К сожалению, эта частная структура и демон практически не задокументированы Apple, за исключением того, что вы можете почерпнуть из списка запуска службы.

🙌 это фантастика, спасибо! Теперь я могу погрузиться в свою резервную копию Time Machine для некоторых потерянных вкладок…
Я также не знал о проектах, которые читают этот файл. Прохладный!