Правильные права на автоматическое открытие каталога в macOS

Я создаю приложение с помощью электрона, которое сохраняет текст в файлы в выбранном пользователем каталоге. При запуске приложения пользователь выбирает каталог, в котором должны храниться его данные. Я сохраняю этот каталог с помощью 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 отклонила приложение с доступом для чтения/записи к / ????


person Nicolas Gehlert    schedule 21.10.2019    source источник


Ответы (2)


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

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

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

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

person Nicolas Gehlert    schedule 11.11.2019

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

person mahal tertin    schedule 22.10.2019
comment
спасибо за Ваш ответ. только сегодня наткнулся на закладки в области безопасности и их использование в электронном electronjs.org/ docs/api/ напишет подробный ответ после полной реализации - person Nicolas Gehlert; 22.10.2019