【问题标题】:How do I use "defaults write" correctly from pkgbuild / productbuild?如何从 pkgbuild / productbuild 正确使用“默认写入”?
【发布时间】:2013-08-17 01:28:48
【问题描述】:

我正在构建一个安装程序包

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

我想在安装后设置一些用户默认值。所以我制作了一个postinstall 脚本:

defaults write com.mycompany.MyApp key -string value

但是,这不起作用 - 设置被写入 /var/root/Library/Preferences,并且只能由 sudo defaults read 访问。

所以我尝试了这个:

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

现在它们被写入正确的位置,但权限错误 - stat 显示 plist 文件的权限为 -rw------- 1 root wheel,而 defaults read 无法访问它们。我怎样才能让它正常工作?

【问题讨论】:

    标签: xcode macos permissions productbuild pkgbuild


    【解决方案1】:

    不要这样做。

    如果您的应用需要某些“默认”默认值才能运行,则在首次启动时,请注意它们不存在并将它们写出来。

    您对安装的假设过多:进行安装的用户是软件的主要用户;机器上只有一个用户可能对使用该软件感兴趣;任何人都已登录!

    而是让您的应用在首次启动时设置其默认环境。这将适用于计算机上的所有用户,包括在安装您的软件之后创建的用户

    【讨论】:

    • 是的,我非常欣赏-[NSUserDefaults registerDefaults:] 的价值。但我在这种特殊情况下的动机是希望将公司内部配置与实际的“'默认'默认值”分开 - 目标是在不修改源代码的情况下这样做,以便它可以作为开源软件干净地发布.在这种情况下,您提到的安装假设实际上是有效的。
    • 因此,如果您确信在飞行后脚本中写出默认值是正确的做法,请考虑 sudo -u $USER defaults write ... man sudo 以了解基本概念。或者,在写入后更改所有者。但请注意,如果您的假设错误,您的脚本中断,并且您的软件包可能无法通过自动化系统安装(因为 $USER 不一定会设置为有用的值)。
    猜你喜欢
    • 1970-01-01
    • 2023-02-17
    • 2012-10-03
    • 2013-08-25
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多