问题标签 [cfpreferences]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
400 浏览

macos - 无法将屏幕保护程序空闲时间设置为 root

我使用的脚本是

但后来当我去查看 mac 中的桌面和屏幕保护程序设置时。15分钟后我没有找到开始。

但是当我给

输出为 900

即使我尝试杀死 cfprefsd 守护进程,但仍然没有设置这个新值

请谁能告诉我我在哪里做错了

0 投票
1 回答
225 浏览

macos - 如何在 OS X 中存储所有系统用户共有的会话值

在我的 mac OS X 应用程序中,我使用 NSUserDefaults 在会话中存储值。此 NSUserDefaults 仅保留相应系统级用户的会话值。但现在我想使用所有系统级用户通用的会话值。如果我从管理员存储会话值,则任何系统用户都应该访问它(例如:来宾用户)。

建议您的答案以实现这一目标。

编辑内容:

我已经使用 CFPreferences 来存储所有系统用户的会话值,并参考 michael 的答案。

代码:

在 CFPreferences 中保存值

从 CFPreferences 中检索

但它总是检索 nil 值。请指出我在这里缺少的东西。

0 投票
2 回答
12966 浏览

osx-mavericks - 在 OS X 10.9.5 上使用 killall cfprefsd 刷新首选项缓存会导致过度唤醒

我在网上搜索显示终止信号触发 cfprefsd 守护进程重新读取所有 plist 文件。看这里

当 killall cfprefsd 执行时,系统会冻结(显示可怕的沙滩球),直到它完全重新启动守护程序(这在我的系统上可能需要 1-5 分钟)。在另一台 Macbook(运行 10.9.4)上运行sudo killall cfprefsd.

这是我在日志中找到的。有什么想法会导致过度唤醒吗?我在哪里寻找导致此问题的问题?

PS 我怀疑一个或多个 plist 可能已损坏。我如何找出哪个?

2015 年 3 月 15 日更新:

kill -15 <pid>我已经使用(我有 2 个:root 和我自己)运行了几次 cfprefsd 重新启动。虽然过去两者似乎都被过度唤醒(同时被终止)所困扰,但在我的测试中,它似乎只适用于 root 用户。所以我可以比较来自 fs_usage 的记录中的时间戳:

系统冻结时:

没有任何冻结:

launchd及时创建新的 cfprefsd 进程并启动该进程似乎存在问题,因为在此间隔期间系统冻结(注意在此间隔期间 CPU 几乎空闲)

0 投票
1 回答
778 浏览

cocoa - 如何将 CFPreferencesSetAppValue 与容器一起使用?

OS X + Excel 2016

我们不会说英语的人希望我们的计算机本地化,但我们想使用 Excel 英语公式。为此,我们需要让 Excel 使用另一种语言,从而为应用设置 AppleLanguages GlobalPreference 以覆盖系统设置。

=SUM() 比 =SOMME() 或 =NPV() 比 =VAN() 更容易学习和讨论

主意

为了让我的用户更容易,我正在编写一个 Python+Cocoa 应用程序,它基本上会询问用户他/她想要的语言并将其存储在首选项文件中。

在 CLI 中,要将(仅)Excel 设置为英文,请运行:

 我的问题

我跑:

问题是它写入 ~/Library/Preferences/com.microsoft.Excel.plist 而不是 ~/Library/Containers/com.microsoft.Excel/Data/Library/Preferences/com.microsoft.Excel.plist

如何告诉 CFPreferencesSetAppValue 写入 Container 而不是 home ?

附录

0 投票
1 回答
334 浏览

ios - NSUserDefaults 基于用户的用户

我们的 iOS 应用程序允许各种用户使用外部服务登录应用程序,我希望这些用户中的每一个都能够存储自己独特的偏好。

如果不为每个用户创建一个,NSUserDefaults就无法存储用户特定的默认值NSDictionary,此时这听起来像是我的最后手段。

我确实看到它CFPreferences可以存储用户、应用程序、主机等的首选项,这听起来像我想要的,但级别要低得多。

我的问题是,是否有任何子NSUserDefaults类可以轻松地允许通过用户默认设置用户?或者,是否有更高级别的库使用CFPreferences?只是为每个用户的偏好寻找一个好的解决方案。

0 投票
1 回答
472 浏览

macos - CFPreferences 任何主机和任何应用程序域行为

在 osx 上使用 CFPreferences 设置首选项时,有不同的 Preference Domains

通过阅读苹果开发指南,我了解到对于current-usercurrent-applicationcurrent-host首选项,它将存储在~/Library/Preferences/< application bundle name >.plist中。对于any-usercurrent-applicationcurrent-host首选项,它将存储在/Library/Preferences/< application bundle name >.plist中。

但是在哪里存储其他域组合的首选项?例如当前用户、当前应用程序、任何主机?首选项是否会在设定的时间内(CFPreferencesSetAppValue后跟同步)传播到连接到本地网络并以当前用户身份登录的所有主机上的~/Library/Preferences/<应用程序包名称>.plist ?或者在查询所有主机时读取期间完成了魔法(但在这种情况下如何处理来自不同主机的冲突首选项)?

对于任何应用程序域,同样的问题是,当前用户、任何应用程序、当前主机等域的首选项将存储在哪里?

0 投票
0 回答
159 浏览

macos - AirDrop 在 macOS 中禁用检测和设置

我想在我的 macOS 机器上获取当前的 AirDrop 状态。

DisableAirDrop我曾经通过读取域中的值来检查它,com.apple.NetworkBrowser但这似乎在最新的操作系统版本(High Sierra 及更高版本)中已被弃用,现在它并没有真正禁用空投。

相反,我检查DiscoverableMode域中的值com.apple.sharingd是否设置为Off以下方式:

defaults read com.apple.sharingd DiscoverableMode | grep 'Off'

我想知道这个字段(DiscoverableMode)是否仅适用于空投?

此外,有什么方法可以检查所有活动用户,而不仅仅是当前用户?

谢谢

0 投票
1 回答
232 浏览

macos - 作为 root 时如何访问不同用户的 NSUserDefaults?

如果我的应用程序具有访问权限(例如运行 as 时root),它如何访问特定用户的首选项?

例如,假设用户从普通(管理员)帐户重新启动我的常规应用程序(捆绑包)作为 root,例如使用 sudo,如下所示:

甚至来自一个应用程序

如果我的应用程序现在调用NSUserDefaults.standardUserDefaults,它将访问存储在根用户主目录中的首选项。

我想让我的这个应用程序能够访问登录用户的首选项。

0 投票
0 回答
289 浏览

swift - 修改 SCPreferences 持久存储:无效参数

目前正在尝试修改/Library/Preferences/com.apple.Bluetooth.plist以便以编程方式删除蓝牙设备并遇到错误。

首先,当SCPreferencesSetValue被调用时,系统配置说

错误域=com.apple.SystemConfiguration 代码=0“成功!” UserInfo={NSDescription=成功!}

但是,当我尝试时SCPreferencesCommitChanges,框架告诉我

错误域=com.apple.SystemConfiguration Code=1002 “无效参数” UserInfo={NSDescription=无效参数}

我不明白设置值如何成功,但使用常规首选项对象提交值失败......任何帮助将不胜感激。谢谢!


0 投票
0 回答
56 浏览

swift - 安全地读取-比较-写入 UserDefaults 值

我正在编写一个为我配置一些 UserDefaults 值的实用程序,例如用于根据我的个人喜好初始化新的 Mac。

它从输入文件中读取一组配置。CFPreferencesSetValue然后,它使用API将指定的首选项应用于各种应用程序。我使用它而不是NSUserDefaults,因为后者不允许您写入NSGlobalDomain( /Library/Preferences/.GlobalPreferences.plist)。

它工作得很好,但有一个转折点:我希望能够检测哪些应用程序的偏好值实际上发生了变化,哪些应用程序已经有了所需的偏好。这允许我仅在必要时自动重新启动“脏”应用程序,例如 Finder、Dock 等。

我通过这样做来实现这一点:

  1. 读取现有偏好的值
  2. 将刚刚读取的值与从配置文件中读取的所需值进行比较
  3. 记下哪些域的值需要更改
  4. 应用首选项更改
  5. 重启脏域对应的应用。

问题是我有一个最后写入获胜的场景。如果没有任何类型的事务/锁定机制,完全有可能有人会在我脚下更改偏好,而我会覆盖他们的更改。如果我只是更改我自己的应用程序的首选项,这不会是一个问题,但鉴于我将要更改NSGlobalDomain(这是相对较高的“流量”),这是一个等待中的错误。

有没有办法安全地进行此更改,而不会有最后写入获胜破坏其他更改的风险?