一尘不染

使用ScriptingBridge无法读取macOS中当前播放的曲目

swift

我正在尝试使用ScriptingBridge阅读iTunes当前正在播放的曲目。我在这里找到了其他两个线程,但似乎没有一个对我有用(macOS
Mojave和iTunes 12.9.4)。

我使用以下命令创建了iTunes.h文件:

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

我正在创建脚本桥的实例,如下所示:

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当前播放的歌曲?


阅读 163

收藏
2020-07-07

共1个答案

一尘不染

关键是您必须在某个时候看到显示以下内容的对话框

MyApp希望访问以控制“ iTunes”。允许控制将提供对“ iTunes”中的文档和数据的访问,并在该应用程序内执行操作。

如果您尚未看到该对话框:

  • 在权利,把沙箱 关闭

  • Info.plist中 ,添加一个Privacy-AppleEvents Sending Usage Description条目,其值为任意字符串。

运行应用程序。如果仍然无法正常工作,请在终端机上说:

tccutil reset AppleEvents

并再次运行该应用程序。

2020-07-07