【问题标题】:flutter for macOS : How to access "user-selected" desktop files and foldersFlutter for macOS:如何访问“用户选择的”桌面文件和文件夹
【发布时间】:2021-06-24 10:46:36
【问题描述】:

我的设置

  • macOS 大苏尔
  • Xcode 12.5.1

使用 macOS 沙盒,我已启用访问权限

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

都具有读/写权限。

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

我总是得到

OS Error: Operation not permitted, errno = 1

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

期待

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

我从原生开发者帖子中了解到,需要调用原生函数 NSOpenPanel。

谁能告诉我怎么做?是不是flutter不支持这种用户选择的文件功能?

我应该求助于平台方法频道吗? 这听起来有点疯狂。

【问题讨论】:

    标签: flutter permissions desktop-application sandbox


    【解决方案1】:

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

    • App Sandboxing 将禁止应用程序访问沙盒之外的文件/文件夹,这些用户文件夹除外:Downloads/Movies/Music/Pictures。例如,您将无法通过使用访问主文件夹
    path.join(path_provider.getApplicationDocumentsDirectory(), '..');
    
    

    这只会给你

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

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

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

    此后,file_selector API 将能够访问应用沙箱之外的文件。

    【讨论】:

    • 应用程序需要请求哪些权限,以便用户可以从中将文件保存到任意位置(包括可移动卷和网络卷)?这是否还需要禁用沙盒?如果是,并且开发人员不想走那么远,应用程序是否可以检测用户是否选择了禁止的位置并显示正确的错误消息?
    猜你喜欢
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2021-12-10
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多