2012-03-26 2 views
0

Можно ли вызвать класс Objective-c из AppleScript в OSX 10.7?Вызов класса Objective-c из AppleScript в OSX 10.7

Я видел некоторые предложения для Snow Leopard или ранее, но никто, похоже, не работает.

AppleScript-Obj-C, похоже, является способом построения графического интерфейса, который использует AppleScript, но я хочу назвать класс, который я написал из сценария.

Следующая (который не работает) то, что я хотел бы сделать: -

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 

Я пошел по этому пути из-за связей, которые, казалось, чтобы указать, что это возможно.

Я мог бы написать программу Objective-c, которая называется AppleScript, но это кажется излишним, казалось, была простой задачей.

PS У меня есть тысячи фотографий, которые я ввел в JPEG COMments Windows, к сожалению, iPhoto не понимает их.

+0

Так вы используете applescript-objc? – TheAmateurProgrammer

+0

«Метод вызова» - это AppleScript Studio, который устарел в Snow Leopard. AppleScriptObjC может вызывать классы Objective-C и наоборот, в дополнение к возможности прямого вызова методов класса Cocoa - что такое класс JpegCom? –

+0

Спасибо всем, кто прокомментировал. Я начал подозревать, что вы не можете вызвать Objective-C из AppleScript. Я попробовал приложение AppleScriptObjC, созданное с помощью Xcode, но мне не нужен графический интерфейс - просто простой скрипт. Все примеры, которые я смог найти, - это графический интерфейс (и сделать приложение Objective-C намного проще). Если бы я мог использовать мой основной скрипт и просто предоставил обработчик в AppleScriptObjC, это было бы идеально. – Milliways

ответ

1

Когда я хочу выполнить такую ​​же задачу, как и вы, и мне нужно что-то из объектива-c, я считаю, что самое легкое решение - превратить часть object-c в инструмент командной строки в Xcode. Затем я вызываю инструмент из applesript, используя «make shell script». У меня есть много примеров этих инструментов на моем сайте: 1) код для инструмента unix и 2) как использовать инструмент из applescript. Поэтому в основном вы создаете инструмент, который принимает один параметр (например, путь к изображению) и возвращает комментарий. Посмотрите here для моих примеров инструментов. Любой из пунктов в меню «Обмен кодами» поможет вам в этом подходе.

+0

Спасибо. Легко забыть о традиционном подходе к трубопроводу UNIX.Ваши скрипты были очень полезны. У меня уже была консольная программа (C++), и было всего несколько минут работы, чтобы преобразовать ее в подходящий инструмент. – Milliways

1

Нет, вы не можете вызвать Objective-C из обычного автономного AppleScript, запускаемого из редактора AppleScript или в меню сценария. Вам нужно будет создать сценарий в приложении AppleScriptObjC, создаваемом с помощью Xcode, или выполнить его в специальной среде, такой как ASObjC Runner.

Для случаев, когда я просто хочу вызвать пару Objective-C методов, я бы, вероятно, использовал do shell script для вызова Python и использования моста PyObjC. Таким образом, ваш скрипт остается совместимым с обычным AppleScript, и вам не нужны вспомогательные исполняемые файлы. Например:

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

Это классно Майкл. Я это запомню. Для этого вопроса, где он хочет назвать свой класс и начать его с пути, я не уверен, что ваше решение будет работать. – regulus6633

+0

@ regulus6633 Мой подход определенно проще всего для системных классов. Мне было непонятно, откуда пришел его класс. Если он уже скомпилирован как фреймворк, он может импортировать эту фреймворк из Python. В противном случае ему нужно использовать Xcode для компиляции источника, и он может либо создать гибридное приложение AppleScriptObjC, либо фреймворк, либо инструмент командной строки, как вы предлагаете. Инструмент, вероятно, будет простейшим. –

1

Вы можете сделать скрипт AppleScriptObjC с помощью редактора AppleScript. Перейдите в меню «Файл»> «Создать» из «Шаблон»> «Адаптер Apple Cocoa-AppleScript».

Это будет работать как стандартный скрипт без какого-либо графического интерфейса, но вы также можете получить доступ к функциям Cocoa, как вы можете, используя AppleScriptObjC в Xcode. Вы также должны использовать классы Objective-C, как в Xcode.

Смежные вопросы