Правильные права на автоматическое открытие каталога в macOS - PullRequest
0 голосов
/ 21 октября 2019

Я создаю приложение с электронным, которое сохраняет текст в файлы в выбранной пользователем директории. При запуске приложения пользователь выбирает каталог, в котором должны храниться его данные. Я сохраняю этот каталог с помощью electron-settings, и при следующем запуске приложения каталог автоматически загружается снова.

Локально все отлично работает, но у меня возникают проблемы с его упаковкой для файла .app для macOS и после подписи.

Мои права в настоящее время выглядят так:

<?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>

, но по очень очевидной причине проверка Apple отклонила приложение с read /доступ на запись к / ?

Ответы [ 2 ]

1 голос
/ 22 октября 2019

Попробуйте сохранить каталог не только с electron-settings, но и как Security Scoped Bookmark . После этого вы можете снова получить доступ к этому каталогу.

0 голосов
/ 11 ноября 2019

спасибо @mahal tertin за указание в правильном направлении закладок в области безопасности.

начиная с версии 6.0.0 для электроники, метод dialog.showOpenDialog() возвращает обещание, которое разрешается в закладках filePaths и безопасности в области.

с app.startAccessingSecurityScopedResource(bookmark) теперь вы можете использовать эту закладку для доступа к предыдущему ресурсу.

Я написал подробное сообщение в блоге с примерами кода для получения дополнительной информации: https://developapa.com/security-scoped-bookmark/

...