在 macOS 上自动打开目录的适当权利

Posted

技术标签:

【中文标题】在 macOS 上自动打开目录的适当权利【英文标题】:Proper entitlements to automatically open directory on macOS 【发布时间】:2019-10-21 07:26:48 【问题描述】:

我用电子构建了一个应用程序,它将文本保存到用户选择的目录中的文件中。在应用程序启动时,用户选择应存储其数据的目录。我使用electron-settings 保存该目录,并在下一次应用启动时再次自动加载该目录。

在本地一切都很好,但我无法让它为 macOS .app 文件打包并在签名后工作。

我的权利目前如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>com.apple.security.app-sandbox</key>
    <true/>
    <key>com.apple.security.application-groups</key>
    <string>APPLE_GROUP_STRING</string>
    <key>com.apple.security.files.user-selected.read-write</key>
    <true/>
    <key>com.apple.security.files.bookmarks.document-scope</key>
    <true/>
    <key>com.apple.security.files.bookmarks.app-scope</key>
    <true/>
  </dict>
</plist>

当我选择一个目录时,一切正常,但是当我关闭应用程序然后尝试将文件读/写到同一目录时,我收到“权限被拒绝”错误。 (再次手动选择目录后,它按预期工作)

我需要设置什么权限才能允许在启动时访问目录? 还有另一种解决方法吗?也许有一个按钮可以直接打开目录而无需通常的文件选择对话框?

我已经试过了

<key>com.apple.security.temporary-exception.files.absolute-path.read-write</key>
<array>
    <string>/</string>
</array>

但由于非常明显的原因,苹果验证拒绝了具有对/ 的读/写访问权限的应用程序????

【问题讨论】:

【参考方案1】:

感谢@mahal tertin 用安全范围的书签指出了正确的方向。

从 electron 6.0.0 开始,dialog.showOpenDialog() 方法返回一个解析为文件路径和安全范围书签的承诺。

使用app.startAccessingSecurityScopedResource(bookmark),您现在可以使用该书签访问以前的资源。

我写了一篇包含代码示例的详细博客文章以获取更多信息:https://developapa.com/security-scoped-bookmark/

【讨论】:

【参考方案2】:

尝试将目录保存为electron-settings 和Security Scoped Bookmark。重启后即可再次访问该目录。

【讨论】:

感谢您的回答。就在这一天偶然发现了安全范围的书签,它们在电子electronjs.org/docs/api/… 中的使用将在完全实施后写出详细的答案

以上是关于在 macOS 上自动打开目录的适当权利的主要内容,如果未能解决你的问题,请参考以下文章

macOS 权利音频输入与麦克风

Windows 10“数字权利激活”永久性激活!!!

win10的数字权利激活和非数字权利激活有啥区别?

为啥 Apple 使用权利?

缺少 HealthKit 权利

添加应用组权利