Чтение файла в песочнице Mac OSX

Я пытаюсь прочитать файл в режиме песочницы вне песочницы приложения. Я просмотрел этот пост objColumnist и, безусловно, Apple App Sandbox Design Guide документация.

В документации четко указано, что вам нужен NSOpenPanel или NSSavePanel для чтения/записи файлов в Security-Scoped Bookmarks.

Если ваше приложение использует папку для загрузки или обработки, которая находится за пределами контейнера приложения, получите первоначальный доступ, представив диалоговое окно NSOpenPanel, чтобы узнать о намерении пользователя использовать определенную папку.

Мой вариант использования немного отличается, я хочу прочитать файл из Finder. Например, когда пользователь нажимает какую-либо горячую клавишу из Finder, я получаю выбор из Finder (используя мост сценариев для выбора файла), а затем читаю этот файл. Следовательно, я не могу создать файл Security-Scoped Bookmarks.

Итак, есть ли альтернативный способ чтения файла закладок. Или есть другой способ, кроме моста сценариев, чтобы получить выбор средства поиска, который также подходит для песочницы приложения.


person Mirza Bilal    schedule 03.02.2015    source источник


Ответы (2)


Есть способ сделать это: используйте NSService для публикации File-Service в меню Finder > Services https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/SysServices/Articles/overview.html#//apple_ref/doc/uid/20000850-BCIDHJJA

Пользователь выбирает файл в Finder, вызывает службу через контекстное меню, ярлык/горячую клавишу или меню Finder. Вы получите закладку с областью безопасности, с помощью которой вы сможете получить доступ к файлу.

Способ с AppleScript не будет разрешен в Mac App Store, поскольку вы не можете получить право на поиск скриптов.

person mahal tertin    schedule 03.02.2015
comment
Выглядит интересно, попробую - person Mirza Bilal; 03.02.2015
comment
Это почти все, что я искал, но его можно запустить только с помощью ярлыка, установленного NSKeyEquivalent в info.plist или установленного в Системных настройках -> Клавиатура -> Ярлыки. Есть ли способ запустить службу с помощью какого-то глобального ярлыка, который я зарегистрировал. Например, я хочу, чтобы пользователи устанавливали/обновляли ярлыки в настройках моего приложения. - person Mirza Bilal; 04.02.2015
comment
Вероятно, вам лучше задать это в новом вопросе. Насколько я знаю, вы не можете использовать CGEvent Services в изолированной среде для доступа к глобальным ярлыкам: developer.apple.com/library/mac/documentation/Carbon/Reference/ - person mahal tertin; 04.02.2015

За исключением «Загрузки», «Изображения», «Фильмы» и «Музыка», вам обязательно нужно согласие пользователя на чтение файла.

Ваше приложение может зарегистрироваться для чтения определенных типов файлов с помощью UTI, а затем вы можете реализовать соответствующий метод делегата приложения, чтобы открыть файл, который пользователь дважды щелкает в средстве поиска. Например, как страницы открываются, когда пользователь дважды щелкает документ страницы.

Кроме того, (если вы не используете песочницу) ваше приложение ограничено по соображениям безопасности. Единственный способ пройти через песочницу — это использовать powerbox, который прозрачно обрабатывается NSOpenPanel и NSSavePanel и не может быть доступен напрямую вам, разработчику.

person Rob Sanders    schedule 03.02.2015