Appscript v/s Scripting Bridge v/s Пользовательский AppleScript
Я хочу получить доступ к приложению iTunes через мой скрипт ruby и, глядя на все 3, я не понимаю, к какому из них следует обратиться. Похоже, AppsScript больше не поддерживается http://appscript.sourceforge.net/ поэтому я думаю удалить его из моего списка опций. Я остался со скриптовым мостом и пользовательским AppleScript (создаю свой собственный скрипт).
Прочитав онлайн о недостатках и плохой документации, я запутался, с чего мне начать?
Опытные пользователи, пожалуйста, предложите, какие из них могут быть лучшими, или, если есть другие сценарии, которые могут быть полезны.
Спасибо!
2 ответа
Я сделал все три, но из Objective C в качестве языка вызова, а не ruby.
AppleScript. Вы можете написать и вызвать AppleScript из ruby, используя osascript
, AppleScript имеет большую поддержку в плане интерактивной разработки с использованием AppleScript Editor. Это работает очень хорошо. Но... звонит через osascript
это громоздко, и вы вызываете дополнительный процесс каждый раз, когда говорите с iTunes. Вы также должны проанализировать вывод osascript
- не большое дело, но определенно уводит вас от того, что вы действительно пытаетесь сделать.
Скриптовый мост. Это оставляет Scripting Bridge и приложение. Преимущество Scripting Bridge заключается в том, что он является официальным кодом, поддерживаемым Apple. У скриптового моста есть свои бородавки, но он определенно работает, а поддержка инструментов хорошая. Тем не менее, я не знаю, как бы вы интегрировали это с ruby - кто-то другой может захотеть прокомментировать.
приложение. AppsScript имеет хорошие документы и сильный представитель в качестве превосходного мостового решения. Мэтт Нойберг перенес appScript на github ( https://github.com/mattneub/appscript), явно с целью использования рубиновой части этого проекта. Другой форк ( https://github.com/abarnert/appscript/network) добавляет дополнительные исправления, и именно здесь я бы начал. Я сам ( https://github.com/poulsbo/appscript) обновил Objective-C (около Xcode 6 beta 5), но я не коснулся рубиновой стороны.
Мост сценариев против приложения. Одно отличие, которое я заметил между appscript и Scripting Bridge, с точки зрения пользователя, состоит в том, что appscript является более явным (хорошим), но также более многословным (не хорошим). Вот пример (псевдообъект C) получения name
свойство объекта; вы явно делаете get
а также send
:
id result = [[[appscriptObject name] get] send];
Принимая во внимание, что в Scripting Bridge есть неявная ленивая оценка, так что это больше похоже на:
id result = [sbObject name];
Также есть различная обработка информации о типе в сгенерированных заголовках. Я считаю, что Scripting Bridge сохраняет лучшую информацию о типах.
Appscript лучше справляется с обработкой ошибок, например, сообщает, когда что-то недоступно. С Scripting Bridge вы, кажется, получаете объект независимо, и после его использования вы должны запросить его впоследствии, чтобы увидеть, что lastError
было. Я считаю, что этот шаблон кодирования ужасен.
Оглядываясь назад? Все, что говорится, проблема, как вы указываете, в том, что appsScript, вероятно, лучше всего рассматривать как "технологию, обращенную назад". Если вы принимаете его, вы смотрите на поддержку / исправление любых проблем в приложении самостоятельно или полагаетесь на исправления от других. Хотя кажется, что сегодня он работает хорошо (OS X 10.9), в будущем вы можете ожидать, что он сломается или потребуется дальнейшее обслуживание, чтобы оно продолжало работать. С другой стороны, поскольку у вас есть источник, вы можете решить проблемы самостоятельно. Ошибка в скриптовом мосту будет не в ваших руках.
Если вы хотите изменить это и посмотреть в будущее, вы можете проверить, что Apple делает для Yosemite с JavaScript в качестве нового языка OSA. Тем не менее, это уходит от вашего первоначального вопроса, который касается рубина и iTunes.
Нижняя линия. Различные компромиссы здесь.
AppleScript. Играя это безопасно.
Скриптовый мост. Хорошая середина? Но не уверен, как использовать из рубина.
appscript. Для любителей / сделай сам.
JavaScript. Для раннего усыновителя.
Я только что наткнулся на эту тему. Я использую 10.11 (El Capitan) и хотел бы получить доступ к iTunes из ruby. Я хотел бы избежать использования osascript.
Scripting Bridge официально не используется для ruby (читайте его где-нибудь на apple.com) и не включен в 10.10 и 10.11. Единственным вариантом для меня был гем rb-appscript. Однако это не сработало для Ruby 2.2.1. Мне нужно было следить за этим постом на github, и теперь он работает отлично.
надеюсь, что это кому-то поможет.