Applescript внутри приложения какао - PullRequest
2 голосов
/ 12 июня 2009

Для приложения, которое я пишу, мне нужно получить доступ к элементам некоторых других приложений, для которых Applescript кажется наилучшим способом. Я использовал фреймворк Appscript, который работал хорошо, потому что он позволял мне создавать потоки и не блокировать мое приложение, когда Applescript занимал некоторое время. Тем не менее, сейчас я пытаюсь сделать мое приложение совместимым с 64-битной версией, и кажется, что платформа Appscript не поддерживает 64-битную версию. Есть ли «хороший» способ использовать Applescript в Какао, который не блокирует мое приложение, но все же дает мне полный контроль, который мне нужен?

- firen

Ответы [ 3 ]

6 голосов
/ 13 июня 2009

Кажется, что SBApplication должно работать, но я не использовал его раньше.

Согласно @ cocoadevcentral :

SBApplication: используется для выполнения вызовов сценариев между приложениями с Objective-C вместо AppleScript. Пример: получить текущий трек iTunes.

Вот выдержка из документации:

Класс SBApplication предоставляет механизм, позволяющий программе Objective-C отправлять события Apple в приложение с поддержкой сценариев и получать события Apple в ответ. Это позволяет этой программе управлять приложением и обмениваться данными с ним. Мост сценариев работает путем соединения типов данных между дескрипторами событий Apple и объектами Какао.

Хотя SBApplication включает методы, которые вручную отправляют и обрабатывают события Apple, вам никогда не придется вызывать эти методы напрямую. Вместо этого подклассы SBApplication реализуют специфичные для приложения методы, которые автоматически обрабатывают отправку событий Apple.

Например, если вы хотите получить текущий трек iTunes, вы можете просто использовать метод currentTrack динамически определенного подкласса для приложения iTunes, который обрабатывает детали отправки события Apple для вас, вместо того, чтобы вычислять более сложная альтернатива низкого уровня:

[iTunes propertyWithCode:'pTrk'];

Если вам нужно отправлять события Apple вручную, рассмотрите возможность использования класса NSAppleEventDescriptor.

Надеюсь, это поможет!

2 голосов
/ 15 июня 2009

Как упомянул Бленк, сценарийный мост вполне может быть подходящим вариантом, хотя он может оказаться несколько неэффективным, если вам придется перебирать большие массивы и т. Д.

Самый простой способ запустить Applescript в Какао - использовать NSAppleScript.

У Apple есть несколько довольно хороших примеров, которые я нашел полезными, когда мне нужно было сделать что-то подобное. Есть три статьи, на которые вы можете взглянуть. Все они содержат пример кода, который я всегда нахожу очень полезным.

  • Несколько примеров использования скриптового моста
  • Производительность и оптимизация с использованием скриптового моста
  • NSAppleScript Technote / Example

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

http://gist.github.com/130146

1 голос
/ 10 июля 2009

похоже, что платформа Appscript не поддерживает 64-битную версию.

Должно работать. Убедитесь, что в проекте Xcode установлены правильные архитектуры и SDK (для 64-битной версии требуется 10,5). Подайте отчет об ошибке, если у вас есть конкретная проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...