【问题标题】:iTunes 10.6.3 changes AppleScript interface?iTunes 10.6.3 更改 AppleScript 界面?
【发布时间】:2012-06-20 19:02:15
【问题描述】:

我有一个简单的 Ruby 脚本,它使用 rb-appscript gem 来控制 iTunes,现在我已经更新到 iTunes 10.6.3,它似乎坏了。

在 10.6.3 之前,这段代码可以按预期工作以获取当前选定的曲目:

Appscript.app('iTunes').selection.get()

现在它会产生以下错误:

RuntimeError: Unknown property, element or command: 'selection'

编辑:刚刚确认这在 py-appscript 中也被破坏了,因此它不与 rb-appscript 隔离。

这很奇怪,因为下面这段实际的 AppleScript 仍然有效:

tell application "iTunes" to get selection

Appscript.app('Finder').desktop.files.get() 等类似示例仍然有效。

我找不到任何信息来解释是否或为什么会更改此内容,或者我可以做些什么来更新我的脚本。我猜这与山狮的变化有关。

【问题讨论】:

  • 同样的变化也破坏了使用 AppleScript 和 ScriptingBridge 的远程脚本,Apple 比 py-appscript 更关心这两者。我强烈建议每个受影响的人去bugreport.apple.com 并提交你自己的错误作为我的openradar.appspot.com/radar?id=1788405 的副本;如果他们得到足够的报告,这可能会有所作为。

标签: ruby applescript itunes rb-appscript


【解决方案1】:

看起来 iTunes 10.6.3 是随 Mountain Lion 一起发布的沙盒功能。这是一篇谈论它的文章(也请阅读 cmets)http://www.leancrew.com/all-this/2012/06/the-first-nail-in-the-coffin-of-python-appscript/

可能会从山狮开始发生更多(如果不是所有事情的话)

【讨论】:

  • +1。但我不认为山狮在这里是相关的。问题在于 iTunes 是古老的遗留代码,正在被那些不想对内部进行彻底改变的人慢慢现代化。这导致他们在 10.2 中部分破坏专辑封面,在 10.4 中拖放,在 10.6.3 中编写脚本,但这些都与 OS X 版本无关(除了间接的,因为 Apple 永远不会放弃 QuickDraw/PICT、QuickTime、 32 位等,而 iTunes 仍然依赖它们)。
【解决方案2】:

我已在此处提供了此问题的修复:

https://github.com/mattneub/appscript/tree/master/rb-appscript

【讨论】:

  • 看起来不错,我得试试;我更新了我的原始脚本,直接调用osascript
  • 到目前为止,它在 iTunes 上运行良好,我每天都在积极调整。但是,如果我构建字典的方式有问题,请告诉我(理想情况下,您应该分叉、修复并输入拉取请求)。这绝对是一项正在进行的工作;最初的开发者已经放开了这个球,所以我们所有人都应该把它捡起来并让它继续前进。
【解决方案3】:

是的,他们肯定把它弄坏了。您可以将 rb-appscript 与 System Events 应用程序一起使用,以有条件地检查各种 UI 元素的子元素,以查看“selected”属性是否为真......例如:

i = 0
row_exists = true
selected_row = nil
while row_exists && !selected_row
    i += 1
    row_exists = app("System Events").application_processes["iTunes"].windows["iTunes"].scroll_areas[3].outlines[1].rows[i].exists
    if row_exists 
        if (app("System Events").application_processes["iTunes"].windows["iTunes"].scroll_areas[3].outlines[1].rows[i].attributes["AXSelected"].value.get == true)
            selected_row = app("System Events").application_processes["iTunes"].windows["iTunes"].scroll_areas[3].outlines[1].rows[i]
        end
    end 
end

然后,您可以从所选行的子项中提取所需信息。不过,这将是一种非常烦人的方式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-13
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多