在OSX 10.7中从AppleScript调用Objective-c类

时间:2012-03-26 01:07:18

标签: objective-c applescript osx-lion

是否可以在OSX 10.7中从AppleScript调用Objective-c类?

我已经看到了针对Snow Leopard或更早版本的一些建议,但似乎没有任何建议。

AppleScript-Obj-C似乎是构建使用AppleScript的GUI的一种方式,但我想调用我从脚本编写的类。

以下(不起作用)是我想做的: -

on getJpegComment(photoFile)
    set aJpeg to call method "initWithPath" of class "JpegCom" with parameter photoFile (does not work)
    return call method "comment" of aJpeg
end getJpegComment

tell application "iPhoto"
    tell album "Sale"
        set thePhotos to get every photo
    end tell

    repeat with aPhoto in thePhotos
        tell application "iPhoto"
            set aPhotoFile to image path of aPhoto
            set aComment to my getJpegComment(aPhotoFile)
            set comment of aPhoto to aComment

        end tell
    end repeat
end tell

我开始沿着这条路走下去,因为链接似乎表明这是可能的。

我可以编写一个名为AppleScript的Objective-c程序,但这看起来似乎有点过头了。

PS我有数以千计的照片,我已经输入了Windows的JPEG COMments,不幸的是iPhoto不理解这些。

3 个答案:

答案 0 :(得分:1)

当我想做一个像你这样的简单任务,并且我需要来自objective-c的东西时,我发现最简单的解决方案是将objective-c部分转换为Xcode中的命令行工具。然后我使用“do shell script”从applesript调用该工具。我在我的网站上有很多这些工具的例子:1)unix工具的代码,以及2)如何使用applescript工具。所以基本上你创建一个接受一个参数的工具(例如图像的路径)并返回注释。查看我的工具示例here。 “代码共享”菜单下的任何项目都可以帮助您实现这种方法。

答案 1 :(得分:1)

不,你不能从AppleScript编辑器或脚本菜单中运行的常规,独立AppleScript调用Objective-C。您需要将脚本构建到使用Xcode创建的AppleScriptObjC应用程序中,或者在ASObjC Runner等特殊环境中执行它。

对于我只想调用几个Objective-C方法的情况,我可能会使用do shell script来调用Python并使用PyObjC桥。这样,您的脚本仍然与常规AppleScript兼容,并且您不需要任何辅助可执行文件。例如:

do shell script "python -c 'from Foundation import NSDate; print NSDate.date()'"

答案 2 :(得分:1)

可以使用AppleScript编辑器制作AppleScriptObjC脚本。转到文件>模板新增> Cocoa-AppleScript Applet。

这将像标准脚本一样运行,没有任何GUI,但您也可以像在Xcode中使用AppleScriptObjC一样访问Cocoa功能。你也应该像在Xcode中那样使用Objective-C类。