Reading currently playing track in macOS using ScriptingBridge not working

亡梦爱人 提交于 2019-12-06 10:53:25

问题


I am trying to read the currently playing track of iTunes using ScriptingBridge. I found a couple of other threads here but no one seems to be working for me (macOS Mojave and iTunes 12.9.4).

I have created the iTunes.h file using the following command:

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

I am creating an instance of the Scripting Bridge as follows:

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)
}

The code compiles fine. When I run the code, I get the following output:

iTunes is running...
nil
nil

The currentTrack is nil, but iTunes is playing a song. What am I missing here? I already tried disabling the sandbox, but to no avail. I am using macOS Mojave, Xcode 10.2 and iTunes 12.9.4. Also, when iTunes is not running, it will be started? Why?

Would there be another way to get the currently playing song of iTunes?


回答1:


The key thing is that you must at some point see the dialog that says

MyApp wants access to control “iTunes“. Allowing control will provide access to documents and data in “iTunes“, and to perform actions within that app.

If you have not seen that dialog:

  • In the Entitlements, turn sandboxing off.

  • In the Info.plist, add a Privacy - AppleEvents Sending Usage Description entry with some arbitrary string as its value.

Run the app. If it still doesn't work, then say this in the Terminal:

tccutil reset AppleEvents

and run the app again.




回答2:


The solution provided by matt works.

I noticed that the sandboxing feature can still be enabled, if I add the following key to the entitlements file:

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


来源:https://stackoverflow.com/questions/55868521/reading-currently-playing-track-in-macos-using-scriptingbridge-not-working

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!