Ich untersuche, wie Safari Registerkarten über iCloud synchronisiert.
Zunächst möchte ich wirklich wissen, wie Safari seine freigegebene Liste von Registerkarten aktualisiert, was bedeutet, dass es oder ein Hintergrund-Daemon auf Dateierstellung und -änderungen überwacht wird. (Meine Hypothese ist: Wenn ich einen neuen Tab auf meinem Telefon öffne, sendet iCloud einen Push an meinen Mac, der die Liste „iCloud Tabs“ von Safari aktualisiert.)
Ich versuche zu verwenden dtrace
, um die Dateiöffnungen von Safari zu überwachen, mit etwas Einfachem wie:
sudo dtrace -n 'syscall::open*:entry /execname == "Safari"/ { printf ("%s", copyinstr(arg0)); }'
gibt aber dtrace
diesen Fehler aus:
dtrace: error on enabled probe ID 7 (ID 160: syscall::open:entry): invalid user access in action #1 at DIF offset 24
(Dies ist derselbe Fehler , den jemand in Apples Foren gefragt hat .)
Das Debuggen eines seltsamen iTunes-Berechtigungsproblems mit DTrace enthielt Informationen zu einem ähnlichen Problem mit iTunes, aber ich verstehe nicht ganz, welche Backflips sie durchgeführt haben, um gdb
iTunes dazu zu bringen, -fähig zu werden dtrace
.
Die Datei, die die iCloud-Tabs enthält, ist:
~/Library/SyncedPreferences/com.apple.Safari.plist
Es handelt sich um eine Binärdatei, mit der Sie plutil
eine Kopie zur Verarbeitung in JSON/XML konvertieren können. Ich habe erwartet, dass die Synchronisierung über erfolgt, bird
aber einige leichte Höhlenforschungen mit brctl log -w
und andere leichte Schnüffeleien spiegeln keine Änderungen wider, die ich an der Registerkartendatenbank vornehme. Es gibt einige nette Projekte auf Github , die diese Datei in Python, JS sowie eine nette Menüleisten-App analysieren:
Zu wissen, wo die Daten auf der Festplatte verbleiben, zeigt, dass dies syncdefaultsd
der Eigentümerprozess ist:
sudo fsusage -w | grep com.apple.Safari
Leider sind dieses private Framework und dieser Daemon von Apple im Grunde nicht dokumentiert, abgesehen von dem, was Sie aus der launchd-Liste für den Dienst entnehmen können.
cbowns
cbowns