在 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 上自动打开目录的适当权利的主要内容,如果未能解决你的问题,请参考以下文章