Право песочницы на сценарий iTunes через NSAppleScript
Я пытаюсь создать скрипт iTunes из NSAppleScript в моем приложении Какао, чтобы добавить файл в библиотеку.
В моем файле разрешений я добавил следующее:
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.itunes</key>
<array>
<string>com.apple.itunes.library.read-write</string>
</array>
</dict>
Затем я вызываю AppleScript так:
var error: NSDictionary? = nil
let appleScript = NSAppleScript(source: "tell application \"iTunes\" to add (POSIX file \"\(path)\") to library playlist 1")
let result = appleScript?.executeAndReturnError(&error)
но не получается с ошибкой -10004
: iTunes got an error: A privilege violation occurred.
Я пытался использовать iTunes в обоих направлениях (itunes
а также iTunes
) но ничего не работает. Я также попытался добавить, помимо права на чтение и запись, read
право. Наконец, я попытался добавить доступ для чтения и записи в папку "Музыка" пользователя (где хранится библиотека iTunes), но это тоже не помогло.
Есть ли другое обязательное право, о котором я не знаю, чтобы написать скрипт iTunes?
Я нашел эту ссылку в своем поиске решения ( ссылка), но она требует от пользователя выбрать определенную папку в его Library
папка, чтобы предоставить приложению доступ к выбранному пользователем файлу, а затем он требует, чтобы скрипт находился в отдельном файле, что на две вещи слишком много для того, что я хочу сделать. Я не доверяю пользователю в отношении управления файлами сценариев, и мне не нужен файл для 1 строки кода AppleScript. Еще один недостаток, как я понимаю NSUserAppleScriptTask
в том, что вы не можете сохранить состояние скрипта при нескольких вызовах, что не является проблемой в моем случае, но может быть для кого-то другого.
Спасибо
1 ответ
После обращения в службу технической поддержки разработчиков Apple, я смог решить эту проблему, то есть фактически 2 проблемы в одной.
Во-первых, права должны иметь правильно идентифицированные идентификаторы пакета. Для iTunes права должны быть такими (обратите внимание на заглавную T
в iTunes):
<key>com.apple.security.scripting-targets</key>
<dict>
<key>com.apple.iTunes</key>
<array>
<string>com.apple.iTunes.library.read-write</string>
</array>
</dict>
Тогда нарушение привилегий произойдет, если код AppleScript не включает of source 1
в конце, как это:
tell application "iTunes" to add (POSIX file "your/path/to/mp3.mp3") to library playlist 1 of source 1
Там вы идете!