Ich habe vor ein paar Tagen und auch eher zufällig entdeckt, dass mein Adressbuch, was auf den Macs und diversen Mobilgeräten mit dem angebissenen Obst drauf via iCloud syncronisiert wird, Unmengen von gleichnamigen Gruppen enthält.

Gruppen, die ich vor hunderten von Jahren mal angelegt hatte, um mit Freunden, Familie und Bandkollegen en bloc zu kommunizieren. Dementsprechend hatte ich genau vier solcher Kontaktgruppen: Family, Friends, Kunden, popsicle (meine Gitarrenband, schauen Sie hier).

Wie dieser Screencapture, den ich vor drei Tagen machte und auf Twitter veröffentlichte, zeigt, sind aus diesen vier nun fast 40.000 Gruppen geworden:

Wow. Erst war ich amüsiert, als ich dann aber feststellte, dass diese sinnlosen Gruppenduplikate sich auch auf den Rechner syncronisiert haben, wurde mir das doch etwas zu schräg.

Also versuchte ich, diese Gruppen zu löschen. Zuerst direkt in der Adressbuch-App auf dem Mac. Es stellte sich heraus, dass man zwar Adressen, bzw. Kontakte, per "alles markieren" auf einen Rutsch löschen kann -- aber nicht die Gruppen. Diese gehen nur einzeln: Gruppenname klicken, löschen, warten bis die Nachfrage kommt, bestätigen, warten, fertig -- es dauert 19 Sekunden, bis eine Gruppe gelöscht ist. Ein kurzes Abtauchen in `~/Library/Application\ Support/AddressBook/Sources/Metadata/` zeigte, dass dort knapp 38.000 ABGroup.abcdg Dateien liegen. Alter Schwede.

Also nächste Anlaufstelle das Webinterface der iCloud unter icloud.com. Aber auch hier kann man die Gruppen nur einzeln löschen, es gibt keine Möglichkeit, mehrere zu markieren.

Auf den iOS Geräten gibt es überhaupt keine Möglichkeit, Gruppen zu löschen. Ich installierte mit eine 3rd Party Appp aufs iPhone, wo man mit "swipe" Bewegung die Gruppe löschen kann und swipte einen Abend lang beim Filmkucken nebenher, ohne dadurch irgendeine erkennbare Veränderung an der Länge des Scrollbar-Indikators in der Gruppenliste herbeizuführen. Dafür schmerze dann einen Tag später die Daumenwurzel. App also wieder gelöscht.

Mein nächster Versuch war dann, den Hauptrechner von der iCloud abzumelden. Auf die Frage, ob die Kontakte lokal gespeichert werden sollen, ablehnend reagiert, und gehofft, so die oben beschriebenen Metadaten loszuwerden.
Um auf Nummer sicher zu gehen, habe ich sogar das komplette `~/Library/Application\ Support/AddressBook/` Verzeichnis geleert und dann den Rechner neu gestartet.
Danach den Rechner wieder mit dem iCloud-Konto verbunden, und gewartet, bis sich die Adressen aus der iCloud wieder auf den Rechner syncten. Da ich nur knapp 150 Kontakte drin habe, ging das relativ schnell, und zu meiner Freude waren auch die Gruppen verschwunden.

Erstmal.

Einen Tag später waren sie wieder da.

Damn.

Mittlerweile hatte ich auch das halbe Internet leergesucht, und recht wenig Infos zu dem Problem gefunden, aber aus den Fragen und Antworten auf verschiedenen Foren und in den Apple-Support Diskussionen wurde klar, dass es wohl wirklich nicht vorgesehen ist, dass man mehrere Gruppen auf einmal löscht. Alle Beschreibungen behandeln, wie man eine Gruppe löscht, und dass sich das dann auch zurück in die iCloud synct, und die Gruppe dann dort auch verschwindet. Dass das bei tausenden von Gruppen eine nicht machbare Variante ist, die alle einzeln von Hand zu löschen, ist noch niemand aufgefallen.

Nächste Anlaufstelle war dann Twitter, wo ich das Video veröffentlichte (siehe oben). Unter den Antworten dort war ein Hinweis von Eric (@yatil, Danke, danke, danke!!) auf ein AppleScript, das lokal über die Gruppen loopt und sie löscht.
Ich habe einige Test damit gemacht und nachdem es 5h lief (und gebannt von meiner Twittertimeline verfolgt wurde), ohne dass ich irgendein Feedback hatte, ob da nun was gelöscht wird oder nicht, abgebrochen.

In der Zwischenzeit hatte sich auch der Apple-Support via Twitter gemeldet, und gemeinsam sind wir verschiedenene Maßnahmen durchgegangen, die aber alle unterm Strich nichts gebracht hatten, die Gruppen bleiben in der iCloud erhalten.
Sogar, wenn man ALLE Kontakte löscht. Ich hatte sie zuvor in eine vcf exportiert und lokal weggesichert. Dann direkt im Webinterface der iCloud alle Kontakte gelöscht, und das hat sich auch auf meine Geräte gesynct. Resultat war dann halt knapp 38.000 leere Gruppen und keine Kontakte. Seufz.

Irgendwann konnte der Apple-Support da auch nicht mehr weiterhelfen und ich bekam eine Fallnummer und die Möglichkeit, einen Anruf mit einem Support-Mitarbeiter zu vereinbaren.

Auf meine wiederholte Frage, ob Apple selbst nicht einfach direkt irgendwo einen Delete Knopf drücken kann, um die Gruppen zu kicken, bekam ich keine Antwort.

Also nahm ich mir nochmal das AppleScript vor und machte kleine Testläufe, um zu sehen, wie lange das Löschen damit dauern würde. Interessanterweise wurde die Zeit, die es braucht, immer kürzer (auf den einzelnen Datensatz bezogen), je mehr Gruppen man löscht. 25 Gruppen dauert 40 Sekunden, 50 Gruppen eine Minute. Das ist alles noch viel zu lange, aber immerhin bekommt man so mehrere auf einen Rutsch weg.

Ein kleines Intermezzo hatte ich noch mit der Idee, dass die Infos zu den Gruppen im oben beschriebenen Application Support Verzeichnis in sqlite Datenbanken liegen, und man vielleicht dort datenbankseitig was drehen könnte. Leider stellte sich raus, dass die DB, in der offenbar der Kram verwaltet ist, verschlüsselt ist, und zwar so, dass man weder mit dem iCloud-Passwort, noch mit dem lokalen Superuser-Passwort was machen kann.

Ok, dann also das Telefonat mit dem Apple Support. Die waren supernett, konnten aber auch nicht helfen (und waren selbst erstaunt, dass man nicht mehrere Gruppen markieren und löschen kann). Nach vielen Ideen und haben Sie schon X probiert, trennten wir uns wieder ergebnislos -- so einen Fall hatten die wohl auch noch nicht. Interessant war, dass Apple selbst wohl tatsächlich nur ein iCloud Account komplett löschen kann, nicht aber einzelne Inhalte, zumindestens auf der Ebene des Adressbuchs. Irgendwie beruhigend, wenn auch hier mit meinem akuten Problem nicht wirklich zielführend.

Status im Moment: Ich habe das AppleScript etwas angepasst und lasse das nun in 500er Häppchen durchlaufen.

set counter to 0
display dialog "Name of group to delete?" default answer ""
set theGroupName to text returned of result
display dialog "Number of groups to delete?" default answer ""
set theGroupLimit to text returned of result
tell application "Contacts"
	repeat
		try
			set theGroup to group theGroupName
			delete theGroup
			set counter to counter + 1
			if counter > theGroupLimit then
				exit repeat
			end if
		on error
			exit repeat
		end try
	end repeat
	save
	display dialog "Removed " & counter & " instances of the group" with icon caution buttons {"OK"} default button "OK"
end tell

Stand momentan: Noch 28.050 Gruppen to go.

Screenshot, showing a fraction of the 28050 group files

Ein Hoch auf die Technik.