让人爱恨交加的AppleScript
今天终于完成了我这个假期参加的学校Summer Studentship的工程,一个用AppleScript写的Video Blog压缩发布程序。虽然还有很多需要改进之处,不过至少这已经是一个可用的测试版了。:)
这两个月来,我对AppleScript的知识从无到有,感触很多。
AppleScript早在Mac OS时期就已经存在了,在现在的Mac OS X时代更是被进一步的发扬光大。它的地位很类似Windows下用于Office的VBA——不过VBA只能控制Office的各个组件,而AppleScript则是贯穿整个Mac OS X系统,几乎所有的程序都有提供AppleScript的接口。使用AppleScript的Script Editor的Open Dictionary功能就可以看到完整的列表了。
AppleScript的表现形式也堪称大全:
- 默认可以通过简单的对话框和用户进行交互;
- 可以做成droplet的形式,对你拖拽到它的图标上的文件进行操作;
- 可以设置为Folder Action,自动监控指定文件内的文件的变化;
- 对于没有提供AppleScript接口的程序,现在还可以通过Universal Access来实现GUI编程方式控制;
- 最后,也是最具杀伤力的功能就是可以使用Xcode中的AppleScript Studio来生成带有完整GUI的,完全本地化的Apple应用程序。
这种完全的控制能力可以说不光完全超越了Windows平台下面的任何一种语言,而且也凌驾于类Unix操作系统上提供类似功能的shell脚本语言。
这次我的这个程序就是使用AppleScript Studio制做的,看起来和其他的Apple应用程序没什么区别。
编AppleScript程序的感觉很像Visual Basic,入门容易提高难。这是让我又爱又恨的主要原因。
AppleScript的设计目标大概是要老少咸宜,只要你懂英语,很多简单的程序你就能看个八九不离十。但是就是这个原因,我习惯了C语言的简洁,让我改用另一种说英语的方式写程序格外的痛苦。
举个例子,比如一个访问一个数组的a的第2个元素,用C语言就是
a[1]
而用AppleScript要写成
item 2 of a
甚至可以更人性化的写成
the second item of a
这在描述一些比较复杂的过程的时候副作用尤为明显,还好你可以用Python或者别的脚本语言写好,然后用”do shell script”命令调用。
在GUI界面的调用上,用AppleScript也会显得很拖沓,给你们看个例子
set myContent to contents of text view 1 of scroll view "scrollerContent" of tab view item 1 of tab view 1 of window "main" as string
把这种对象的层次关系用这么多的”of”来表现是不是够晕菜的 :)
另一个方法是用tell来层次化的表现,好看一点了,不过也还是够受的:
tell window "main"
tell tab view 1
tell tab view item 1
tell scroll view "scrollerContent"
set myContent to contents of text view 1 as string
end tell
end tell
end tell
end tell
AppleScript Editor多少还支持你手工换行缩进一下,AppleScript Studio霸道的很,你只能使用它的自动缩进,所以就只能将就看了。另外AppleScript Studio的程序调试能力几乎为0… 特别是一些runtime的错误,就是给个出错代码,错误出在哪都不知道。:(
结论:想做一些Mac OS X下的交互性小脚本,AppleScript绝对是首选;想搞RAD,还是免谈吧。同时还是很感叹于Mac OS X的易用性——Windows平台下什么时候能有一个这么方便的工具语言出现呀(别提那些倒胃口的VB, OLE之类的)。
PS. 苹果有时候也满黑的,像QuickTime Player,居然把全屏放映这样的基本功能都要放到收费29.99美刀的QuickTime Pro中去。可是实际上,所有的Pro版的功能,比如导入、导出、编辑等,都可以直接通过AppleScript调用免费版的QuickTime Player实现。看来想省钱就要搞点技术含量呢…
Links:
- AppleScript的官方文档
- 超强悍的AppleScript论坛 – MacScripter BBS
(不是吹的,几乎所有的问题都是google了一圈,最后回到这里找到的答案) - 王咏刚写的“AppleScript语言简介” (你不会没听过这个牛人吧?)
January 9th, 2006 at 9:11 pm
有了Java,Windows Mac是一家,哈哈哈哈哈哈哈