Wat is ~/Library/Group Containers op een Mac, en wat mag je verwijderen?
Open ~/Library/Group Containers op een Mac die al een tijd in gebruik is en je vindt een kolom mappen met namen als UBF8T346G9.Office, group.com.apple.notes of 9K33E3U3T4.net.shinyfrog.bear. Sommige bevatten een paar kilobytes aan instellingen, sommige de hele database van een app, en een paar horen bij apps die je lang geleden hebt verwijderd. De namen lezen als ruis, dus mensen met weinig ruimte legen de hele map, en daar gaat het mis.
Dit bericht behandelt wat de map is, hoe je de namen leest, hoe je uitzoekt welke geïnstalleerde app een groep nog gebruikt, en welke groepen een verwijderde app heeft achtergelaten die je naar de prullenmand kunt verplaatsen.
Wat de map is
Een App Group is een gedeelde ruimte die een ontwikkelaar declareert in de codehandtekening van een app, onder de entitlement com.apple.security.application-groups. De documentatie van Apple over de App Groups-entitlement beschrijft die als de manier waarop meerdere apps van één ontwikkelteam containers en sleutelhanger-toegangsgroepen delen en met elkaar praten. Op een Mac krijgt elke groep een map op ~/Library/Group Containers/<group id>, en het systeem voegt Library/Application Support, Library/Caches en Library/Preferences daarin toe de eerste keer dat die wordt gebruikt.
Apple noemt twee vormen van identifiers:
group.<group name>, geregistreerd op de Apple Developer-website, hetzelfde formaat dat iOS gebruikt.<team identifier>.<group name>, een macOS-formaat dat begint met de Team ID van tien tekens van de ontwikkelaar en geen registratie nodig heeft.
De mapnaam is de identifier, dus een gewone lijst vertelt al welke vorm elke groep heeft.
Waarom een groep de app overleeft
Eén app is zelden het enige lid. De hoofdapp, de widgets, de deel- of Finder-extensies en de helpertools treden vaak toe tot dezelfde groep zodat ze dezelfde instellingen en bestanden lezen. Een ontwikkelaar kan ook meerdere aparte apps in één groep zetten: de Office-apps van Microsoft delen UBF8T346G9.ms, UBF8T346G9.Office en UBF8T346G9.OfficeOsfWebHost, en Pages, Numbers en Keynote delen group.com.apple.iWork.
Bij verwijderen gaan macOS en iOS uit elkaar. De documentatie van Apple bij containerURL(forSecurityApplicationGroupIdentifier:) zegt dat het systeem op iOS een groepsmap verwijdert zodra elke app in de groep weg is, terwijl het op macOS de map de eerste keer aanmaakt dat een app die nodig heeft en nooit verwijdert. Een app naar de prullenmand slepen laat de groepen precies staan waar ze stonden.
Wat erin zit, varieert sterk. Het kan een klein voorkeurenbestand zijn, een cache, of echte gegevens. Microsoft waarschuwt dat de drie gedeelde mappen van Office naar de prullenmand verplaatsen Outlook-gegevens verwijdert, en WhatsApp bewaart ontvangen media in group.net.whatsapp.WhatsApp.shared en group.net.whatsapp.WhatsApp.private, wat tientallen of honderden gigabytes kan worden.
De mapnamen lezen
| Naamvorm | Voorbeeld | Wat het meestal betekent |
|---|---|---|
group.<bundle id> |
group.com.apple.testflight |
Genoemd naar precies één app, hier TestFlight |
group.<bundle id>.<suffix> |
group.net.whatsapp.WhatsApp.shared |
Verankerd aan de volledige id van één app, gebruikt door die app of de extensies |
group.<shared name> |
group.com.apple.iWork, group.net.whatsapp.family |
Gedeeld door meerdere apps, geen id van één app in de naam |
<TeamID>.<bundle id> |
9K33E3U3T4.net.shinyfrog.bear |
Eén app, Mac-stijl, hier Bear |
<TeamID>.group.<name> |
G78RJ6NLJU.group.at.EternalStorms.Yoink |
Een groep binnen een team, één app of meerdere |
<TeamID>.<short name> |
UBF8T346G9.Office, UBF8T346G9.ms |
Voor de hele suite, genoemd naar een product of de leverancier |
Twee dingen maken dit lastiger dan het oogt. Een Team ID noemt de ontwikkelaar, niet de app: elke Microsoft-groep op de Mac begint met UBF8T346G9., of die bij Teams hoort of bij Office. En een naam die op een bundle-id lijkt, is niet altijd de id van de huidige app: Teams houdt UBF8T346G9.com.microsoft.teams terwijl de app zelf com.microsoft.teams2 is. De naam is een aanwijzing. De handtekeningen van de geïnstalleerde apps zijn het bewijs.
Waarom op grootte sorteren en verwijderen misgaat
De grootste mappen hier zijn meestal de mappen die in gebruik zijn. Een lijst op grootte zet een mailopslag, een notitiedatabase of de media van een chatapp bovenaan, en geen daarvan is cache.
De eigen apps van Apple staan hier ook. group.com.apple.notes en group.com.apple.reminders horen bij Notities en Herinneringen, group.com.apple.iWork bij Pages, Numbers en Keynote, en namen die met systemgroup. beginnen zijn systeemgroepen. Geen van deze is een restant, ook als je de naam niet herkent.
Een gedeelde groep overleeft elk van de leden. Word verwijderen maakt UBF8T346G9.Office niet wegwerp zolang Excel of Outlook nog geïnstalleerd is, en die verwijderen zet de apps die blijven terug of maakt ze stuk.
Is een groep eenmaal verwijderd, dan brengt niets de inhoud terug. Een app die de groep nog nodig heeft, krijgt de volgende keer dat hij erom vraagt een nieuwe, lege map, maar wat erin zat is weg tenzij je een kopie hebt bewaard.
Uitzoeken wie een groep bezit
Begin met een alleen-lezen blik op wat er staat en hoe groot het is:
ls ~/Library/Group\ Containers
du -sh ~/Library/Group\ Containers/* 2>/dev/null | sort -h | tail -15
De eerste regel toont elke groep. De tweede toont de vijftien grootste, de grootste als laatste. macOS kan vragen of Terminal gegevens van andere apps mag gebruiken; weiger je, of meldt een map een rechtenfout of geen grootte, dan is die niet gemeten, en dat maakt hem niet leeg.
Controleer daarna welke ontwikkelaar een geïnstalleerde app heeft ondertekend en welke groepen die declareert:
codesign -dv "/Applications/Microsoft Teams.app" 2>&1 | grep TeamIdentifier
codesign -d --entitlements - "/Applications/Microsoft Teams.app" 2>/dev/null
De regel TeamIdentifier hoort te passen bij het voorvoegsel van de groepen die je vermoedt. De tweede opdracht toont de entitlements van de app, en de groepen waar die bij hoort staan onder com.apple.security.application-groups.
Zoek je elke geïnstalleerde app die een bepaalde groep nog declareert, doorzoek dan hun handtekeningen:
find /Applications ~/Applications -maxdepth 3 -name "*.app" -prune 2>/dev/null |
while read -r app; do
codesign -d --entitlements - "$app" 2>/dev/null | grep -qF "UBF8T346G9.Office" && echo "$app"
done
Elke regel die het afdrukt, is een app waarvan de eigen handtekening de groep claimt, en die groep blijft. Een leeg resultaat is een sterke aanwijzing, geen bewijs. De lus leest alleen de buitenste handtekening van elke app, terwijl widgets, extensies en helpers in een app eigen handtekeningen dragen, en hij kijkt niet naar apps die buiten die twee mappen zijn geïnstalleerd.
Welke je veilig kunt verwijderen
Een groep is een restant dat je kunt verwijderen als dit allemaal geldt:
- De naam draagt de volledige id van een app die je hebt verwijderd, of een Team ID waarmee geen van je geïnstalleerde apps is ondertekend.
- Geen geïnstalleerde app declareert die, gecontroleerd zoals hierboven, inclusief apps buiten
/Applications. - Het is geen Apple-groep: niets dat begint met
group.com.apple.ofsystemgroup., tenzij het de exacte groep is van een apart gedownloade Apple-app die je hebt verwijderd, zoals TestFlight. - Je hebt binnenin gekeken en hebt niet nodig wat er staat. Media van een chatapp of een Outlook-opslag zijn nog van jou nadat de app weg is.
Sluit daarna alles van die ontwikkelaar af, verplaats de map naar de prullenmand in de Finder met Ga › Ga naar map, en laat de prullenmand een tijd met rust voordat je die leegt. Installeer je de app later opnieuw, dan begint die met een verse groep. Restbestanden verwijderen na verwijderen behandelt de rest van ~/Library, en wat Mac-opschoners nooit mogen verwijderen noemt de andere plekken die wegwerp ogen en dat niet zijn.
Hoe Mole ermee omgaat
Mole verwijdert group containers alleen tijdens het verwijderen van een app. Het zoekt groepen die naar de bundle-id van die app zijn genoemd, groepen die de Team ID dragen, en groepen die zijn gedeclareerd in de handtekeningen van de app en van de extensies, inlogonderdelen, XPC-services en helpers daarin. Een map group.<bundle id> die exact naar de app is genoemd, is standaard geselecteerd. Een map <TeamID>.<bundle id>, een groep die alleen met de id van de app begint, of een gedeelde groep die de app declareert, staat in de lijst zonder vinkje, en een groep die een nog geïnstalleerde app met een langere, specifiekere id bezit, staat helemaal niet in de lijst.
Vlak voordat elke groep wordt verplaatst, controleert Mole opnieuw. Het leest de geïnstalleerde apps van dezelfde ontwikkelaar en de actieve systeemextensies opnieuw, en weigert de groep als een daarvan die declareert, als de beoordeelde app is veranderd of opnieuw geïnstalleerd, of als die inventaris niet op tijd te lezen is. Een ja voor één rij wordt nooit hergebruikt voor de volgende. De groepen group.com.apple. van Apple blijven beschermd, afgezien van de exacte groep van een apart gedistribueerde Apple-app zoals TestFlight, dus Pages verwijderen laat group.com.apple.iWork staan voor Numbers en Keynote. Toen ik Microsoft Teams op een test-Mac verwijderde, bleven drie groepen staan, UBF8T346G9.com.microsoft.teams, UBF8T346G9.com.microsoft.oneauth en UBF8T346G9.com.microsoft.entrabroker, en Mole meldde ze als beschermd in plaats van te gokken. UBF8T346G9.Office van Office en de verwanten worden met opzet met rust gelaten.
Alles wat een verwijdering weghaalt, gaat naar de prullenmand. Buiten een verwijdering staat Group Containers op de lijst van Mole met beschermde locaties voor gebruikersgegevens. De sectie restbestanden in Clean biedt nooit group. of gedeelde groepen aan; de enige group containers die het kan tonen, zijn mappen <TeamID>.<bundle id> per app waarvan geen geïnstalleerde software de id claimt, en het toont er geen als die controle niet kan afronden. Voor de rest van het opruimbeeld, zie welke caches op de Mac kun je veilig verwijderen en de verwijdergids voor Office.
Veelgestelde vragen
Kan ik de hele map Group Containers verwijderen?
Nee. Die bevat gegevens van apps die nog geïnstalleerd zijn, inclusief Notities, Herinneringen, iWork en de mail- of chatapps die je gebruikt. Verwijder afzonderlijke groepen pas nadat je hebt gecontroleerd dat geen geïnstalleerde app ze declareert.
Waarom staat een groep er nog nadat ik de app heb verwijderd?
Op macOS maakt het systeem een groepsmap aan wanneer een app die voor het eerst nodig heeft en verwijdert die nooit, en dezelfde groep kan nog in gebruik zijn bij een andere app of extensie van die ontwikkelaar. De app naar de prullenmand slepen raakt die niet aan.
Wat gebeurt er als ik een groep verwijder die een geïnstalleerde app nog gebruikt?
De app verliest wat erin stond, zoals instellingen, aanmeldstaat of lokale gegevens, en krijgt een lege map de volgende keer dat hij erom vraagt. Verplaats groepen naar de prullenmand in plaats van ze meteen te wissen, zodat je er een terug kunt zetten als een app stopt met werken.