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

时间:2015-06-25 11:48:17

标签: objective-c cocoa usb osx-mavericks appstore-sandbox

我写了一个沙盒应用程序,用于处理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

有没有办法让我的应用程序正确?

如果有人可以帮我解决这个问题会很好!

1 个答案:

答案 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中允许这样做。