2013-08-14 4 views
1

Je construis un paquet d'installation avecComment utiliser "write par défaut" correctement depuis pkgbuild/productbuild?

pkgbuild --component MyApp.app ... --scripts scriptsdir MyApp.pkg 

et je voudrais définir quelques paramètres utilisateur par défaut après l'installation. Je fis donc un script postinstall avec:

defaults write com.mycompany.MyApp key -string value 

Cependant, cela ne fonctionne pas - les paramètres écrits dans /var/root/Library/Preferences, et ne sont accessibles par sudo defaults read.

Ainsi, au lieu que j'essayé ceci:

defaults write ~/Library/Preferences/com.mycompany.MyApp key -string value 

Maintenant, ils sont écrits au bon endroit, mais les autorisations sont fausses - stat montre les autorisations sur le fichier plist sont -rw------- 1 root wheel et defaults read ne peuvent pas y accéder . Comment puis-je faire en sorte que cela fonctionne correctement?

Répondre

4

Ne faites pas cela.

Si votre application nécessite que certaines valeurs par défaut soient utilisées, au premier lancement, notez qu'elles ne sont pas présentes et écrivez-les.

Vous supposez trop sur l'installation: que l'utilisateur effectuant l'installation est l'utilisateur principal du logiciel; qu'un seul utilisateur sur la machine pourrait être intéressé par l'utilisation du logiciel; que tout le monde est connecté du tout!

Au lieu de cela, votre application doit configurer son environnement par défaut lors du premier lancement. Cela fonctionnera pour tous les utilisateurs sur la machine, y compris les utilisateurs créés après votre logiciel est installé.

+0

Oui, j'apprécie certainement la valeur de '- [NSUserDefaults registerDefaults:]'. Mais ma motivation dans ce cas particulier est une volonté de séparer la configuration interne de l'entreprise des "défauts par défaut" actuels - le but est de le faire sans modifier le code source, afin qu'il puisse être publié proprement comme logiciel open source . Dans ce cas, les hypothèses d'installation que vous avez mentionnées sont en fait valides. – jtbandes

+1

Donc, si vous êtes convaincu que l'écriture de valeurs par défaut dans un script postflight est la bonne chose à faire, considérez 'sudo -u $ USER par défaut écrire ...' 'man sudo' pour obtenir le concept de base. Alternativement, changez le propriétaire après l'écriture. Mais sachez que votre script va se casser si vos hypothèses sont fausses, et votre paquet ne peut pas être installé par des systèmes automatisés (puisque $ USER ne sera pas forcément une valeur utile). – gneagle

Questions connexes