Можно ли заменить AppleScript на JavaScript?

У меня есть книга по AppleScript, и мне интересно, стоит ли мне ее хранить. Я уже знаю JavaScript.

Я понимаю, что Apple недавно добавила поддержку сценариев JavaScript в OS X.

Означает ли это, что мне больше не нужно изучать AppleScript, чтобы создавать скрипты для приложений OS X, или это больше, чем это? Ваши мысли будут оценены.

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

Как обстоят дела с разработчиками приложений (Какао)? Могут ли они обойтись без изучения AppleScript, если хотят сделать свои приложения доступными для сценариев?

Обновление: добавлена ​​награда. Перефразированный вопрос (никакого неуважения по отношению к AppleScript и его пользователям): Учитывая, что я уже знаю JavaScript, есть ли какая-либо веская причина, по которой я должен больше изучать AppleScript? Ваши подробные мысли по этому вопросу будут оценены.

2 ответа

Решение

Можно ли заменить AppleScript на JavaScript?

Для мелочи, наверное. Помимо этого, вероятно, нет.

  1. Слишком много функций Apple Event/OSA повреждены, повреждены или полностью отсутствуют в JXA. Это работает до некоторой степени, но помимо этого вы набиты. Для серьезной или производственной работы, когда вам нужны функции, которые портит JXA, или когда вы имеете дело с приложениями, которые заставляют JXA убегать и плакать, вам придется придерживаться AppleScript: это единственное поддерживаемое в настоящее время решение, которое действительно делает это правильно.

  2. Вам все еще нужно понять, как работают скрипты приложений, для чего вам придется читать литературу по AppleScript. Собственная документация JXA жалкая и вводит в заблуждение, так что вы не будете мудрее ее читать. Нет сторонней литературы по JXA, которая объясняет эти концепции, и любая, которая появится в будущем, вероятно, будет ошибочно ошибочной. (Черт, даже текущие книги AppleScript имеют тенденцию выдумывать / лгать / ошибаться.)

  3. Вы также должны понимать, как составлять сценарии для конкретных приложений, и словари приложений общеизвестно неполны и недостаточны сами по себе. Это означает, что вы полагаетесь на дополнительную документацию (если таковая существует), примеры сценариев и более опытных пользователей этих приложений. И все они основаны на AppleScript, поэтому вам нужно знать некоторые AppleScript, чтобы понимать их и общаться с ними.

  4. Разработчики приложений должны продолжать разрабатывать и тестировать свои приложения на AppleScript- это де-факто спецификация, в соответствии с которой все приложения с поддержкой сценариев были разработаны и протестированы за последние двадцать лет, и это будет продолжаться. Даже если бы JXA не был таким мешочком, разработчикам все равно нужно было бы протестировать AS, чтобы убедиться, что они не пропустили ни одной причуды.

JavaScript для автоматизации (JXA) 1.0 является достаточным, если вы хотите быть первыми, кто хочет освоить и проявлять гибкость в том, какой подход применяется. С JXA 1.0 вам может понадобиться сделать что-то вроде:

  1. использовать мост JXA-ObjC, когда мост JXA-традиционный AppleEvents* не работает,
  2. создать фильтр JavaScript, когда JXA 1.0 whose мостовой запрос не работает,
  3. четко подумайте, когда следует использовать сторону Objective-C, мост JXA-new-stuff-bridge, традиционный-мост AppleEvents или сторону JavaScript

* Сценарии событий Apple существуют с начала 1990-х годов, начиная с Classic MacOS 7. С 2006 года Apple рекомендует рассматривать механизмы событий, не относящиеся к Apple.

Примечание. События Apple не всегда являются наиболее эффективным или подходящим механизмом взаимодействия между процессами. OS X предлагает другие механизмы... [Apple, "Открытая архитектура сценариев"]

Наборы AppleScript (AS) и JavaScript для автоматизации (JXA) имеют одинаковое покрытие автоматизации. Мосты AppleScript более зрелые. Движок JavaScriptCore имеет больше встроенных возможностей. Например, такие возможности, как regex, encodeURI, JSON.stringify уже встроены в JavaScriptCore.

| Особенность |    AS     |    JXA    |
|------------------------------|-----------|-----------|
| Скриптовый словарь |     ✓     |     ✓     |
| Стандартные дополнения сценариев |     ✓     |     ✓     |
| JavaScriptCore               | - | ✓ |
| Сценарии событий Apple |     ✓     |     ✓     |
| Сценарии Какао |     ✓     |     ✓     |
| Привязка функции C | - | ✓ |
| Поддержка Automator |     ✓     |     ✓     |
| #! оболочка работающая |     ✓     |     ✓     |
| Отладчик | Третья сторона | - |
| Язык Популярность | Ниша | Широкий |

Значит ли это, что мне больше не нужно изучать AppleScript для написания сценариев...?

Возможно.

Иногда полезно прочитать существующий пример AppleScript. Хотя иногда более продуктивно бросить файл AppleScript и начать без заранее продуманного подхода.

КСТАТИ: Вам все равно нужно понимать словарь сценариев для любого используемого языка сценариев.

с точки зрения пользователя приложения, который хочет, чтобы приложение делало вещи автоматически?

Как пользователь приложения, JavaScript для автоматизации будет работать с ранее отмеченными оговорками. В частности, рассмотрите возможность использования большего количества функций JavaScript и какао и меньшего количества функций "Apple Events".

Например, "Традиционный подход" Системные события "имеет преимущество простоты, но с использованием $.NSFileManager дает заметно более высокую производительность."В одном случае использования $.NSFileManager был на 300% быстрее, чем "Системные события". [JXA-Cookbook Wiki: получение списка содержимого папки]

... что касается разработчиков приложений (Какао)? Могут ли они обойтись без изучения AppleScript, если хотят сделать свои приложения доступными для сценариев?

И да и нет.

Что контролирует разработчик, так это объект и методы, представленные в словаре сценариев. Этот словарь сценариев (.sdef) должен быть сделан для доступа любым языком сценариев, включая Perl, Python и Ruby.

Таким образом, разработчик предоставляет шлюз для сценариев приложений, который ориентирован на Objective-C/Cocoa и, как правило, не зависит от языка сценариев.

Разработчики не контролируют скриптовые мосты (например, сценарии Какао, Apple Events, ObjC, C Function Binding). Сообщайте об ошибках сценариев в Apple Bug Reporter.

Опытный разработчик будет иметь набор тестов для изучения словаря сценариев приложения на всех языках сценариев, важных для их клиентов. Хороший тестовый охват будет автоматизирован и, вероятно, будет использовать несколько языков сценариев.

... уже знаю JavaScript, есть ли какая-то веская причина, по которой я должен больше изучать AppleScript?

Пока не будет создано больше документов JXA, некоторые существующие материалы AppleScript могут быть полезны для объяснения различных аспектов архитектуры сценариев.

Существующие средства автоматизации AppleScript, обладающие квалифицированным опытом работы с AppleScript, в рабочих процессах распределения доходов, возможно, пожелают быть осторожными в том, когда принимать JXA.

Если вы уже знаете JavaScript и автоматизация для вас лично, то JXA (с отмеченными оговорками) кажется разумным выбором.

Обновление: Apple в основном опубликовала Руководство по написанию сценариев для Mac

Редакция 2016-10-27. Новый документ, который представляет введение в использование AppleScript и JavaScript

Другие вопросы по тегам