Safari: Verwendung von dtrace zur Untersuchung von iCloud Tab Sync

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 dtracediesen 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 gdbiTunes dazu zu bringen, -fähig zu werden dtrace.

  1. Kann mir jemand helfen, ein seltsames iTunes-Berechtigungsproblem mit DTrace zu debuggen : Wodurch wird der Fehler verursacht und wie lautet die Auflösung?
  2. Haben Sie zusätzliche Kenntnisse/Informationen über die Synchronisierung von iCloud Tabs? Welcher Prozess synchronisiert sie? Wo werden sie auf der Festplatte gespeichert?

Antworten (1)

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 plutileine Kopie zur Verarbeitung in JSON/XML konvertieren können. Ich habe erwartet, dass die Synchronisierung über erfolgt, birdaber einige leichte Höhlenforschungen mit brctl log -wund 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 syncdefaultsdder 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.

🙌 Das ist fantastisch, danke! Jetzt kann ich in meinem Time Machine-Backup nach verlorenen Tabs suchen …
Ich wusste auch nichts über die Projekte, die diese Datei lesen. Cool!