本文只是草稿
一、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 <Foundation/Foundation.h>
#import <ScriptingBridge/ScriptingBridge.h>
#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/