【问题标题】:Call an Objective-c class from AppleScript in OSX 10.7在 OSX 10.7 中从 AppleScript 调用 Objective-c 类
【发布时间】:2012-03-26 01:07:18
【问题描述】:

是否可以在 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 不理解这些。

【问题讨论】:

  • 那么你在用applescript-objc吗?
  • "call method" 来自 AppleScript Studio,在 Snow Leopard 中已被弃用。 AppleScriptObjC 除了可以直接调用 Cocoa 类方法外,还可以调用 Objective-C 类,反之亦然——“JpegCom”类是什么?
  • 感谢所有评论的人。我开始怀疑你不能从 AppleScript 调用 Objective-C。我确实尝试过使用 Xcode 创建的 AppleScriptObjC 应用程序,但我不想要 GUI - 只是一个简单的脚本。我能找到的所有示例都是 GUI(制作 Objective-C 应用程序要容易得多)。如果我可以使用我的主脚本,并在 AppleScriptObjC 中提供一个处理程序,那将是理想的。

标签: objective-c applescript osx-lion


【解决方案1】:

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

【讨论】:

  • 谢谢。很容易忘记传统的 UNIX 管道方法。你的脚本很有帮助。我已经有一个控制台程序(C++),只需几分钟就可以将其转换为合适的工具
【解决方案2】:

不,您不能从 AppleScript Editor 或脚本菜单运行的常规独立 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()'"

【讨论】:

  • 这很酷迈克尔。我会记住的。对于他想调用自己的类并使用路径对其进行初始化的问题,我不确定您的解决方案是否可行。
  • @regulus6633 我的方法对于系统类来说绝对是最简单的。我不清楚他的课是从哪里来的。如果它已经编译为框架,他可以从 Python 中导入该框架。否则,他需要使用 Xcode 编译源代码,并且他可以按照您的建议制作混合 AppleScriptObjC 应用程序、框架或命令行工具。该工具可能是最简单的。
  • 从优胜美地开始,这已经成为可能:mjtsai.com/blog/2014/10/29/applescript-and-yosemite
【解决方案3】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    • 1970-01-01
    • 1970-01-01
    • 2012-12-12
    • 1970-01-01
    相关资源
    最近更新 更多