ScriptingBridge开篇

本文只是草稿


一、OSX 开发中的appleScript支持

在OS X开发中,我们可以使用苹果脚本的,主要是由NSAppleScript的支持,例如退出一个程序,我们可以如下代码实现:

NSString* script = [NSString stringWithFormat: @"tell application \"%@\" to quit", appName];
NSAppleScript* as = [[[NSAppleScript alloc] initWithSource: script] autorelease];
[as executeAndReturnError: nil];

二、Scripting Bridge

Scripting Bridge技术的目的是在javasc,Ruby, Python,以及 Objective-C等语言中向脚本支持的应用发送apple  event。

举例子,我们要获取iTunes当前播放的音乐名称

Applescript中,直接在苹果脚本编辑器中写入以下代码,运行即可:

tell application "iTunes" to get the name of the current track

Ruby中可用Scripting Bridge frameworks来查询和控制应用,本例中使用如下代码:

#!/usr/bin/ruby

require "osx/cocoa"
include OSX
OSX.require_framework 'ScriptingBridge'

iTunes = OSX::SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")

puts iTunes.currentTrack.name

Python中和ruby类似:

#!/usr/bin/python

from Foundation import *
from ScriptingBridge import *

iTunes = SBApplication.applicationWithBundleIdentifier_("com.apple.iTunes")

print iTunes.currentTrack().name()

Objective-C中尽管有发送Apple Events的机制,但是新的Scripting Bridge设计可以简化代码:

#import 
#import 
#import "iTunes.h"

int main()
{
iTunesApplication *iTunes = [SBApplication applicationWithBundleIdentifier:@"com.apple.iTunes"];

NSLog(iTunes.currentTrack.name);
}

三、如何生成应用头文件

注意到上面的例子中,我们导入了“iTunes.h”这个头文件,现在我们来生成该文件。

mac:~ mamong$ sudo ln -s /Applications/Xcode5.app/Contents/Developer/usr/bin/sdef /usr/bin/sdef

mac:~ mamong$ sudo ln -s /Applications/Xcode5.app/Contents/Developer/usr/bin/sdp /usr/bin/sdp

mac:~ mamong$ sdef /Applications/iTunes.app | sdp -fh --basename iTunes

 
  



四、iTunes里有什么

简单的观察一下,iTunes 的脚本编程 API 组织是这样的:在 iTunesApplication 下,可以找到多个来源 (iTunesSource),来源有许多种,比如 music library,比如 CD,比如 iPod 等等,而每个来源里,又按照播放列表 (iTunesPlaylist) 来组织,而每个播放列表中,显而易见地有多个曲目 (iTunesTrack),在上面这个例子里,我们要找的第一个来源 (sources()[0]) 的第一个播放列表 (playlists()[0]),正是你的 iTunes Music Library。援引自http://blog.jjgod.org/2007/11/10/python-itunes-scripting/








你可能感兴趣的:(objective-c,Mac开发)