在沙盒 Mavericks 应用程序中卸载 USB 设备

Unmount USB device in sandboxed Mavericks application

我写了一个沙盒应用程序来处理 Yosemite (10.10) 下的 USB 驱动器。 当应用程序完成其内容后,我想为用户提供弹出设备的选项。

在Yosemite下没问题,我成功使用了

DADiskUnmount() 

[NSWorkspace unmountAndEjectDeviceAtURL:error:]

但是在 Mavericks (10.9) 下,这两种方法都行不通。 我仔细检查了我的整个代码,我非常有信心没有 SDK 冲突。

我收到以下错误消息

Sandbox denied authorizing right 'system.volume.external.unmount' by client <MyApp>

我获得了所有与 USB 相关的权利,使用了安全范围的书签(有 startAccessingSecurityScopedResource 和没有),修复了测试设备上的磁盘权限,使用不同种类的 USB 设备进行测试,检查设备上是否有打开的文件并尝试了 kDADiskUnmountOptionForce。

system.volume.external.(adopt|encode|mount|rename|unmount) 

授权只出现在10.8和10.9上。来源:link

有没有办法授予我的应用程序此权限?

如果有人能帮助我,那就太好了!

Aperture 使用沙箱 "big red button" (com.apple.security.temporary-exception.sbpl) 来执行 system.volume.external.mount/unmount.

来自Aperture's entitlements file

<key>com.apple.security.temporary-exception.sbpl</key> <string> (begin (allow authorization-right-obtain (right-name "system.volume.external.mount")) (allow authorization-right-obtain (right-name "system.volume.external.unmount")) (deny network-outbound (with no-log) (regex #"^/private/tmp/launch-")) (allow file-ioctl (literal "/dev/ptmx") (literal "/dev/null") (literal "/dev/tty") (regex #"^/dev/ttys")) (allow file-search) (allow ipc-posix-sem) (allow system-fsctl)) </string>

不知道 Apple 是否会在 MAS 中允许这样做。