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

Proper entitlements to automatically open directory on macOS

我用 electron 构建了一个应用程序,可以将文本保存到用户 selected 目录中的文件中。在应用程序启动时,用户 selects 应该存储其数据的目录。我用 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>

当我 select 一个目录时一切正常,但是当我关闭应用程序然后尝试 read/write 文件到同一目录时我得到一个 'permission denied' 错误。 (手动 select 目录再次按预期工作)

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

我已经尝试使用

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

但出于非常明显的原因,苹果验证拒绝了具有 read/write 访问 /

的应用程序

尝试不仅用electron-settings而且用Security Scoped Bookmark保存目录。重启后即可再次访问该目录。

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

自 electron 6.0.0 以来,dialog.showOpenDialog() 方法 returns 一个解析为文件路径和安全范围书签的承诺。

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

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