【问题标题】:Unmount USB device in sandboxed Mavericks application在沙盒小牛应用程序中卸载 USB 设备
【发布时间】:2015-09-12 00:14:13
【问题描述】:

我在 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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 嘿!现在我想把这个提交给 MAS……你能解释一下每一行,或者给我一个资源链接,我可以在那里阅读这些信息吗?我想正确解释为什么我在我的权利文件中写了这个,以便它可以被接受。
    • 嗯,我想只是实话实说,它在 Aperture 的权利文件中,如果没有它,在 Mavericks 下弹出将不起作用。您是否尝试过删除其他一些行?就像只留下“允许授权-获得”行进行卸载,看看它是否有效?他们可能更有可能在允许的情况下批准它。
    • 当我离开允许授权-权利-获得(权利名称“system.volume.external.unmount)”时它工作......现在我正在等待审查:)
    猜你喜欢
    • 2012-11-10
    • 2013-08-15
    • 1970-01-01
    • 1970-01-01
    • 2021-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    相关资源
    最近更新 更多