我写了一个沙盒应用程序,用于处理Yosemite(10.10)下的USB驱动器。 当应用程序完成其内容时,我想为用户提供弹出设备的选项。
在Yosemite下没有问题,我成功使用了
DADiskUnmount()
和
[NSWorkspace unmountAndEjectDeviceAtURL:error:]
但在小牛队(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
有没有办法让我的应用程序正确?
如果有人可以帮我解决这个问题会很好!
答案 0 :(得分:0)
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中允许这样做。