启用 AppSand 盒时如何从 USB 大容量存储设备读取

Posted

技术标签:

【中文标题】启用 AppSand 盒时如何从 USB 大容量存储设备读取【英文标题】:How to read from usb mass storage device when AppSand box is enabled 【发布时间】:2016-01-27 16:09:18 【问题描述】:

在我的应用程序中,当用户连接 USB 设备(电话)时,我使用NSWorkspaceDidMountNotification 通知用户通过执行NSAlert 检测到设备。

如果接受,应用程序继续从设备复制(读取)文本文件内容。在我启用 AppSandbox 之前,这一直很好。 我已启用 USB 授权,但现在当应用程序尝试复制时,我收到以下错误。

错误读取文件内容:错误域=NSCocoaErrorDomain 代码=257“无法打开文件“Office.txt”,因为您无权查看它。” UserInfo=NSFilePath=/Volumes/OfficeDrive//documents/Office.txt, NSUnderlyingError=0x600000049390 Error Domain=NSPOSIXErrorDomain Code=1 "Operation not allowed"

如果启用 AppSandbox,是否可以从 USB 设备读取数据。

【问题讨论】:

【参考方案1】:

如果您被沙盒化,您只能访问用户明确授予访问权限的文件:

用户指定的文件。当用户明确打开这些文件或将这些文件拖放到应用程序上时,沙盒应用程序(具有适当的权利)会自动获得对任意位置文件的访问权限。

(App Sandbox Design Guide)

因此,您必须打开一个文件对话框(可能已经指向您从通知中找到的位置)并让用户选择它才能获得访问权限。

远程相关的 SO 帖子:

OS X App Sandboxing and arbitrary files access - Update to Document-based?

【讨论】:

以上是关于启用 AppSand 盒时如何从 USB 大容量存储设备读取的主要内容,如果未能解决你的问题,请参考以下文章

启用沙盒时应用无法加载

win10突然不能使用usb大容量存储设备(移动硬盘)的解决方法

如何使用 USB 声卡在 Windows 10 上启用 android 模拟器声音?

如何在未启用 USB 调试的情况下使用 adb tcpip?

如何防止安装所有 USB 大容量存储设备?

手机USB无法连接电脑了,求高手,,,