Можно ли предоставить изолированному приложению доступ к файлу, отправленному из AppleScript?

Я добавляю поддержку AppleScript в свое изолированное приложение Mac App Store. Я хотел бы, чтобы пользователь мог добавлять файлы в приложение через скрипт, используя команду, которую я написал, например:

add file at path "/path/to/some/file/on.disk"

Я указал параметр команды как тип file, поэтому он передается моему приложению как NSURL, и я могу видеть путь URL-адреса файла (po url.path) в отладчике.

Это определение команды в файле sdef:

<!-- Contained by a suite -->
<command name="add file at path" code="ABCDABCD">
    <direct-parameter description="A file to add to the app" type="file" />
</command>

Когда я пытаюсь создать закладку с областью безопасности для этого файла, я получаю сообщение об ошибке:

Не удалось открыть () элемент

Мне нужно иметь возможность читать файл при последующих запусках приложения, поэтому я создаю закладку. Этот код создания закладок:

NSData *fileBookmark = [url bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope
                     includingResourceValuesForKeys:nil
                                      relativeToURL:nil
                                              error:&error];

Я попытался окружить код [url start(stop)AccessingSecurityScopedResource], но ничего не изменилось.

Обновить

Я также определил, что приложение не может прочитать содержимое файла или скопировать его в контейнер приложения. У приложения со сценарием нет доступа к файлу, кроме его пути.

Обновление 2

Я также попытался поместить скрипт в каталог ~/Application Scripts/bundleid (NSApplicationScriptsDirectory) и запустить его из NSUserScriptTask внутри моего кода Cocoa, и это дало те же результаты (файл по URL-адресу по-прежнему не читается).


person Dov    schedule 26.01.2015    source источник


Ответы (1)


Что ж, оказывается, проблема не в моем приложении, а скорее в AppleScript, который я использовал для его вызова. Вам нужно отправить дескриптор файла или псевдоним, например:

add file at path posix file "/path/to/some/file/on.disk"
add file at path "path:to:some:file:on.disk" as alias

Когда вы просто указываете путь (POSIX или другой), он все равно проходит как NSURL, отсюда и мое замешательство, но без пробивания дыры в песочнице.

Такое поведение неочевидно, и его трудно устранить, поэтому я отправил запрос.

person Dov    schedule 02.02.2015