Право песочницы на сценарий 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

Там вы идете!

Другие вопросы по тегам