如何操作com.apple.spaces.plist中的App Bindings配置?
macOS com.apple.spaces的app-bindings属性读写方案
你可以通过两种方式实现app-bindings的读写操作:
方法一:偏好域读写(无私有API依赖,适用所有公开版本macOS)
app-bindings属性本质存储在用户全局偏好的com.apple.spaces域下,你可以直接读写该偏好键实现操作:
- 读取命令:
defaults read com.apple.spaces app-bindings,返回结构为bundle ID对应空间UUID的字典 - 写入命令:
defaults write com.apple.spaces app-bindings -dict [要更新的bundle ID] [对应空间UUID] - 操作完成后需要重启Dock生效:
killall Dock - 编程实现可直接调用
CFPreferences或NSUserDefaults接口操作对应域的app-bindings键即可。
方法二:私有API方案(仅适用于非上架应用)
确实存在未公开的Core Graphics私有API支持直接操作App绑定,无需手动重启Dock,接口声明如下:
// 获取主CGS连接ID extern CGSConnectionID CGSMainConnectionID(void); // 给指定Bundle ID的App绑定到对应空间ID extern OSStatus CGSSetWorkspaceAppBinding(CGSConnectionID cid, CFStringRef bundleID, CGSSpaceID spaceID); // 查询指定Bundle ID的App绑定的空间ID extern OSStatus CGSGetWorkspaceAppBinding(CGSConnectionID cid, CFStringRef bundleID, CGSSpaceID *outSpaceID); // 删除指定App的空间绑定 extern OSStatus CGSRemoveWorkspaceAppBinding(CGSConnectionID cid, CFStringRef bundleID);
调用时注意:
- 传入的
CGSSpaceID为你通过现有CGSSpace相关接口获取的系统内部空间ID,和偏好中存储的UUID会自动映射同步 - 该类私有API无官方兼容性保证,不同macOS大版本可能存在接口变更,无法通过App Store审核。
内容的提问来源于stack exchange,提问作者a_kira
相关产品推荐
相关产品推荐

