Я изучаю, как 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
.
Файл, содержащий вкладки 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, за исключением того, что вы можете почерпнуть из списка запуска службы.
банты
банты