flutter for macOS:如何访问“用户选择的”桌面文件和文件夹

kak*_*kyo 8 permissions desktop-application sandbox flutter

我的设置

  • macOS 大苏尔
  • Xcode 12.5.1

通过 macOS 沙箱,我可以访问

  • 用户选择的文件
  • 下载文件夹
  • 图片文件夹
  • 音乐文件夹
  • 电影文件夹

全部具有读/写权限。

但是,当我使用官方file_selectorpath_provider. 我仍然无法引用下载/音乐/电影/图片之外的任何文件和文件夹。

我总是得到

OS Error: Operation not permitted, errno = 1
Run Code Online (Sandbox Code Playgroud)

每当我尝试访问上述目录之外的目录时。

期待

我希望通过授予User selected file权限,我应该能够允许 file_selector 访问用户 Documents/Desktop 文件夹。否则,如果用户需要与这些预定义文件夹分开的权限,那么用户如何“选择”文件呢?

我从本机开发帖子中读到需要调用本机函数NSOpenPanel

谁能告诉我怎么做吗?难道flutter不支持这样的User selected File功能吗?

我应该诉诸平台方法渠道吗?这听起来有点疯狂。

kak*_*kyo 19

根据其他答案自己解决了。要旨

  • 应用程序沙箱将禁止应用程序访问沙箱之外的文件/文件夹,但以下用户文件夹除外:Downloads/Movies/Music/Pictures. 例如,您将无法使用以下方式访问主文件夹
path.join(path_provider.getApplicationDocumentsDirectory(), '..');

Run Code Online (Sandbox Code Playgroud)

这只会给你

OS Error: Operation not permitted, errno = 1
Run Code Online (Sandbox Code Playgroud)
  • 在沙盒模式下,只能访问有限的位置,必须在 Xcode 项目中通过 Xcode GUI 或直接在权利文件上进行配置。

  • 对于内部工具或开发目的,禁用沙盒就足够了。禁用它的方法有

    • 在 Xcode 项目Signing & Capabilities面板中,单击类别右端的“X”按钮App Sandbox
    • 编辑 plist 文件DebugProfile.entitlementsRelease.entitlements设置字段
<key>com.apple.security.app-sandbox</key>
<false/>
Run Code Online (Sandbox Code Playgroud)

此后,file_selectorAPI 将能够访问应用程序沙箱之外的文件。

  • 应用程序需要请求哪些权限,以便用户可以将文件保存到其中的任意位置(包括可移动卷和网络卷)?这是否还需要禁用沙箱?如果是,并且开发人员不想走那么远,应用程序是否可以检测用户是否选择了禁止位置并显示正确的错误消息? (2认同)