首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用macOS不工作的ScriptingBridge读取当前播放的轨道

使用macOS不工作的ScriptingBridge读取当前播放的轨道
EN

Stack Overflow用户
提问于 2019-04-26 13:18:52
回答 2查看 567关注 0票数 4

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

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

代码语言:javascript
复制
sdef /Applications/iTunes.app | sdp -fh --basename "iTunes" 

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

代码语言:javascript
复制
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)
}

代码编译得很好。当我运行代码时,我得到以下输出:

代码语言:javascript
复制
iTunes is running...
nil
nil

currentTrack是零,但iTunes正在播放一首歌。我在这里错过了什么?我已经试过禁用沙箱了,但没有用。我使用的是macOS Mojave、Xcode 10.2和iTunes 12.9.4。另外,当iTunes没有运行时,它将被启动吗?为什么?

是否还有其他方法可以获得当前正在播放的iTunes歌曲?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-04-27 01:58:34

关键是你必须在某一时刻看到下面的对话框

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

如果您没有看到该对话框:

  • 在应享权利中,将沙箱关闭
  • 在Info.plist中,添加一个Privacy - AppleEvents发送用法描述条目,其值为任意字符串。

运行应用程序。如果它仍然不能工作,那么在终端中这样说:

代码语言:javascript
复制
tccutil reset AppleEvents

然后再运行这个应用程序。

票数 11
EN

Stack Overflow用户

发布于 2019-04-27 05:01:50

马特提供的解决方案有效。

我注意到,如果将以下键添加到应享权利文件中,仍然可以启用沙箱功能:

代码语言:javascript
复制
    <key>com.apple.security.temporary-exception.apple-events</key>
    <array>
       <string>com.apple.iTunes</string>
    </array>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55868521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档