2012-03-26 52 views
0

是否可以在OSX 10.7中從AppleScript調用Objective-c類?在OSX 10.7中調用AppleScript中的Objective-c類10.7

我看到了一些關於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視頻,不幸的是iPhoto不理解這些。

+0

那麼你使用的是applescript-objc嗎? – TheAmateurProgrammer 2012-03-26 01:24:40

+0

「call method」來自AppleScript Studio,它在Snow Leopard中已棄用。 AppleScriptObjC可以調用Objective-C類,反之亦然,除了能夠直接調用Cocoa類方法 - 什麼是類「JpegCom」? – 2012-03-26 01:35:51

+0

感謝所有評論。 我開始懷疑你不能從AppleScript調用Objective-C。 我曾嘗試使用Xcode創建AppleScriptObjC應用程序,但我不想要GUI - 只是一個簡單的腳本。我能找到的所有例子都是GUI(並且製作Objective-C應用程序要容易得多)。如果我可以使用我的主腳本,並且在AppleScriptObjC中提供了一個處理程序,這將是理想的。 – Milliways 2012-03-27 00:42:07

回答

1

當我想做一個像你這樣的簡單任務,並且我需要objective-c的東西時,我發現最簡單的解決方案是將objective-c部分轉換爲Xcode中的命令行工具。然後我使用「do shell腳本」從applesript中調用該工具。我在我的網站上有很多這些工具的例子:1)unix工具的代碼; 2)如何使用applescript中的工具。所以基本上你可以製作一個接受一個參數的工具(例如圖像的路徑)並返回評論。看我的工具示例here。 「代碼共享」菜單下的任何項目都將幫助您採用這種方法。

+0

謝謝。很容易忘記傳統的UNIX管道方法。你的腳本非常有幫助。我已經有了一個控制檯程序(C++),只需幾分鐘就可以將它轉換成合適的工具 – Milliways 2012-03-27 00:11:05

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()'" 
+0

這非常酷Michael。我會記住的。對於這個問題,他想調用他自己的類並使用路徑初始化它,但我不確定您的解決方案是否可行。 – regulus6633 2012-03-26 22:17:15

+0

@ regulus6633我的方法對系統類來說絕對是最簡單的。我不清楚他的課程是從哪裏來的。如果它已經被編譯爲一個框架,他可以從Python導入該框架。否則,他需要使用Xcode來編譯源代碼,並且可以按照您的建議製作混合AppleScriptObjC應用程序,框架或命令行工具。該工具可能是最簡單的。 – 2012-03-27 23:31:55

1

可以使用AppleScript編輯器做出AppleScriptObjC腳本。轉到文件>從模板新建> Cocoa-AppleScript Applet。

這將像標準腳本一樣運行,沒有任何GUI,但您也可以在Xcode中使用AppleScriptObjC時訪問Cocoa功能。你也應該能夠像使用Xcode一樣使用Objective-C類。