Доступ к файлам из изолированной среды в Cocoa

#objective-c #macos #cocoa #appstore-sandbox #nsopenpanel

#objective-c #macos #cocoa #appstore-изолированная среда #nsopenpanel

Вопрос:

Mac OS 10.12 (Sierra), Xcode 8, изолированное приложение macOS, скомпилированное для OS X 10.10. Сценарий следующий:

  1. Доступ к каталогу контейнера приложения.
  2. Перечислите все файлы внутри него
  3. Прибыль.

Затем я хочу получить доступ к какому-либо другому каталогу из контейнера. Это выглядит так:

  1. получить URL-адрес файла каталога (т.е. file:///Users/ что угодно)
    • 1.5 если для этого URL-адреса сохранена закладка, перейдите к 5
  2. откройте его с помощью Powerbox (т.Е. NSOpenPanel) и подтвердите
  3. если подтверждено, сделайте закладку
  4. сохраните закладку где-нибудь (я использую [NSUserDefaults standardUserDefaults])
  5. затем разрешите URL-адрес из этой закладки
  6. вызовите startAccessingSecurityScopedResource по этому URL (всегда возвращает NO)
  7. перечислять
  8. вызовите stopAccessingSecurityScopedResource по тому же URL

Все соответствующие разрешения изолированной среды предоставляются в файле конфигурации приложения.

Как ни странно, эта процедура выполняется только один раз в каждом каталоге вне контейнера! при второй попытке перечисление возвращает пустой результат. Я довольно потерян. Есть идеи?

Обновление: похоже, что если я проверяю URL-адрес через NSOpenPanel каждый раз, когда хочу получить к нему доступ, только тогда можно получить доступ к каталогу. Но вся сделка с закладками должна сохранять вызов Powerbox по тем же подтвержденным URL-адресам, не так ли?

Комментарии:

1. Чтобы у людей было больше шансов помочь, помимо простого угадывания, вам нужно показать код, который вы используете (а) для получения URL, (б) создания и сохранения закладки и (в) восстановления и использования закладки — отредактируйте свой вопрос и добавьте эти сведения. В вашем outline . HTH нет ничего явно неправильного