我正在尝试阅读iTunes当前使用ScriptingBridge播放的曲目。我在这里找到了一些其他线程,但似乎没有人为我工作(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
nilcurrentTrack是零,但iTunes正在播放一首歌。我在这里错过了什么?我已经试过禁用沙箱了,但没有用。我使用的是macOS Mojave、Xcode 10.2和iTunes 12.9.4。另外,当iTunes没有运行时,它将被启动吗?为什么?
是否还有其他方法可以获得当前正在播放的iTunes歌曲?
发布于 2019-04-27 01:58:34
关键是你必须在某一时刻看到下面的对话框
MyApp想要访问控制“iTunes”。允许控制将提供对“iTunes”中的文档和数据的访问,并在该应用程序中执行操作。
如果您没有看到该对话框:
运行应用程序。如果它仍然不能工作,那么在终端中这样说:
tccutil reset AppleEvents然后再运行这个应用程序。
发布于 2019-04-27 05:01:50
马特提供的解决方案有效。
我注意到,如果将以下键添加到应享权利文件中,仍然可以启用沙箱功能:
<key>com.apple.security.temporary-exception.apple-events</key>
<array>
<string>com.apple.iTunes</string>
</array>https://stackoverflow.com/questions/55868521
复制相似问题