在OS X应用程序上与iTunes交互

时间:2015-01-12 18:58:23

标签: objective-c

我完全不知道从哪里开始。我想在Objective-C中构建一个OS X应用程序,它将与iTunes交互,即添加歌曲,电影,按下播放或暂停等。

现在,我知道在Windows中,我可以使用COM来做到这一点,我已经尝试过了。 OS X中有类似的东西吗?应用程序通常如何相互通信或如何公开其API?

我应该阅读哪些协议?

2 个答案:

答案 0 :(得分:2)

目前,内置的Mac OS X相当于COM是 Apple events 。实现它们的最简单方法是使用AppleScript,但您不必这样做;你可以直接形成原始的Apple活动。

您使用Apple事件/ AppleScript选择了非常可通信的应用程序(iTunes)。

答案 1 :(得分:2)

您在OS X上寻找的是脚本或"自动化"和AppleScript。这是一个简短的故事,有一些链接可以帮助您前进:

主要应用程序(当然还有iTunes,我有一些经验)公开"脚本词典"对象,方法和属性等,可以通过系统脚本框架访问。

这通常由AppleScript环境中的脚本完成。 AppleScript是一种语言,它以OS X上的底层脚本基础结构为目标。您可以wade into that here。还有其他方法可以与该脚本基础架构进行对话,但您应该事先了解AppleScript语言,无论好坏,实际上是唯一的"头等舱"这样做的方式,因此应用程序响应的语义往往与AppleScript如何与它们进行对话无法区分。 (更多内容)

查看"脚本编辑器"应用程序(已安装在Mac上,只需使用Spotlight打开),这是标准(尽管是极简主义)用户级编辑器,并尝试使用File->Open Dictionary命令检查某些应用程序(如iTunes)的字典。

如果你想通过你的应用程序与iTunes交谈,而不是从你自己的一次性脚本,你有几个选择(这些很容易混淆,但实际上相当独立):

  1. ObjC Scripting Bridge。这是一种通过使应用程序看起来像一组本机ObjC对象来与应用程序进行交谈的方式。我自己已经发现这是以一种复杂的方式与iTunes进行交互的最便捷方式,一旦你理解了它的怪癖(概念映射不准确),但这里的意见会有所不同。
  2. AppleScriptObjC是一种技术,可让您直接在AppleScript中编写Cocoa应用程序的整个部分(类)。我认为这对于熟练的AppleScript程序员来说更有用,他们希望将他们的功能包装在一流的Mac应用程序中,而不是你所描述的内容。
  3. 您可以使用NSAppleScript类在Cocoa中执行AppleScript块。如果您想要使用iTunes进行的操作具有相当有限的表面积并且使用AppleScript更好或更容易表达,则非常有用。
  4. 我不知道您为iTunes互动所关注的复杂性,但是在您开始使用时需要了解一些重要事项:

    • 如果您已经是一名经验丰富的程序员,AppleScript可以成为一种语言的野兽。它具有一些令人惊讶的表现力,但它是古老的,狡猾的并且是为非程序员设计的(因此对程序员来说需要清晰的语法和熟悉的语义而感到困惑)。它周围的社区相当有限,但记录不佳。它继续跛行,但要注意苹果并没有给予它太多的爱。
    • 如果你想做任何重要的事情,即使是从Scripting Bridge,也要先学习AppleScript。语义将是相同的,如果您不了解他们如何映射到AppleScript,那么从Scripting Bridge方面就没有什么意义。同样,AppleScript仍然是通过脚本界面与应用程序交谈的唯一一流方式。我发现深夜的Script Debugger产品对于在学习过程中追踪AppleScript非常宝贵。
    • 您学到的重要提示:AppleScript(尤其是脚本桥)提供了一个面向对象的应用程序视图:对象,方法,属性。但这是一个方便而诱人的小说;它是一个位于实际IPC机制之上的抽象,称为Apple Events。特别是如果你来自COM这样的东西,你就越快地理解脚本实际上是一个事件+查询系统(而不是OOP界面)的方式,你就越快弄清楚如何绕过它有效。
    • 脚本编写的应用程序支持不一致,不完整,文档记录不清,并且有错误。我可以在iTunes中保证这个,这可能比大多数人好。准备好打击并解决各种令人惊讶的iTunes行为。当你到达他们时,随意提出问题;有一些知识渊博的人潜伏在这里。