Чтение текущей воспроизводимой дорожки в macOS с помощью ScriptingBridge не работает - PullRequest
1 голос
/ 26 апреля 2019

Я пытаюсь прочитать текущий воспроизводимый трек iTunes с помощью ScriptingBridge.Я нашел здесь несколько других тем, но никто, кажется, не работает для меня (macOS Mojave и iTunes 12.9.4).

Я создал файл iTunes.h, используя следующую команду:

sdef /Applications/iTunes.app | sdp -fh --basename "iTunes" 

Я создаю экземпляр Scripting Bridge следующим образом:

if let itunes: AnyObject = SBApplication(bundleIdentifier: "com.apple.iTunes")
{
  if itunes.isRunning
  {
    Swift.print("iTunes is running...")
  }

  Swift.print(itunes.currentTrack?.name)
  Swift.print(itunes.currentTrack?.album)
}

Код компилируется нормально.Когда я запускаю код, я получаю следующий вывод:

iTunes is running...
nil
nil

CurrentTrack равен нулю, но iTunes воспроизводит песню.Что мне здесь не хватает?Я уже пытался отключить песочницу, но безрезультатно.Я использую MacOS Mojave, Xcode 10.2 и iTunes 12.9.4.Кроме того, когда iTunes не работает, он будет запущен?Почему?

Есть ли другой способ получить воспроизводящуюся в настоящее время песню iTunes?

Ответы [ 2 ]

4 голосов
/ 27 апреля 2019

Ключевым моментом является то, что в какой-то момент вы должны увидеть диалоговое окно с надписью

MyApp хочет получить доступ к элементу управления iTunes.Разрешение на управление предоставит доступ к документам и данным в «iTunes», а также для выполнения действий в этом приложении.

Если вы не видели это диалоговое окно:

  • В разрешениях отключите «песочницу» , отключите .

  • В Info.plist добавьте запись Конфиденциальность - AppleEvents Sending Usage Description с некоторымипроизвольная строка в качестве значения.

Запустите приложение.Если это все еще не работает, то скажите это в Терминале:

tccutil reset AppleEvents

и снова запустите приложение.

0 голосов
/ 27 апреля 2019

Решение, предоставленное Мэттом, работает.

Я заметил, что функция песочницы все еще может быть включена, если я добавлю следующий ключ в файл разрешений:

    <key>com.apple.security.temporary-exception.apple-events</key>
    <array>
       <string>com.apple.iTunes</string>
    </array>
...