2017-10-04 3 views
0

Lors de l'utilisation de CFPreferences pour définir des préférences sur osx, il existe différents Preference Domains.CFPreferences any-host et n'importe quel comportement de domaine d'application

En lisant le guide de développement de la pomme, je comprends que pour -utilisateur actuel, -application en cours, -hôte actuel de préférence, il sera stocké dans ~/Library/Preferences/< application Nom du paquet > .plist. Et pour tout utilisateur, -application en cours, -hôte actuel de préférence, il sera stocké dans /Library/Preferences/< nom de l'ensemble des applications> .plist.

Mais où stocker les préférences pour d'autres combinaisons de domaines? Par exemple utilisateur actuel, application en cours, n'importe quel hôte? Les préférences seront-elles propagées pendant le temps défini (CFPreferencesSetAppValue suivi de synchroniser) à ~/Library/Preferences/nom du groupe d'applications> .plist sur tous les hôtes connectés au réseau local et connectés en tant qu'utilisateur actuel? Ou la magie est faite pendant la lecture lorsque tous les hôtes sont consultés (mais comment gérer les préférences de conflit de différents hôtes dans ce cas)?

Même question pour le domaine d'application, où la préférence sera-t-elle stockée pour un domaine tel que utilisateur actuel, n'importe quelle application, hôte actuel?

Répondre

1

La "valeur par défaut" pour les préférences est utilisateur actuel, application en cours, n'importe quel hôte. En utilisant le nom de paquet com.example pour un exemple, ces préférences seraient conservés à

~/Library/Preferences/com.example.plist 

Ce qui rend ce « tout-hôte » est l'hypothèse que votre répertoire est stocké sur un partage réseau. Il n'y a aucun mécanisme supplémentaire pour le synchroniser entre les ordinateurs. De manière générale, vous devez toujours utiliser any-host à moins que vous ne définissiez une valeur qui doit être spécifique à la machine physique sur laquelle l'utilisateur est assis.

Préférences qui sont définies pour l'hôte actuel sont stockés dans le répertoire ByHost, avec un nom de fichier qui comprend un UUID pour l'ordinateur, tels que:

~/Library/Preferences/ByHost/com.example.74263C97-28D5-4AF0-8E7A-3169F1CCB545.plist 

Préférences qui sont définies pour toutes les applications sont stockées sous le nom de paquet .GlobalPreferences, par exemple:

~/Library/Preferences/.GlobalPreferences.plist 

et de même pour toutes les applications,-hôte actuel:

~/Library/Preferences/ByHost/.GlobalPreferences.74263C97-28D5-4AF0-8E7A-3169F1CCB545.plist 

Les préférences définies pour tous les utilisateurs suivent le même modèle, sauf sous /Library/Preferences.

+0

Merci! Réponse très utile et complète. Donc, pour les paramètres de n'importe quel utilisateur, any-host, l'hypothèse serait que le répertoire racine doit être stocké sous un partage réseau? – yijiem

+0

@yijiem Au moins '/ Library' devrait être partagé.En pratique, les paramètres de tout utilisateur sont effectivement locaux à la machine, qu'ils soient définis comme hôte actuel ou non; seuls les paramètres actuels sont réellement partagés en pratique. – duskwuff