10.6 Изменения

Эта статья описывает изменения в AppleScript и связанных инструментах в Snow Leopard Mac OS X v10.6.

Реорганизация инструмента

Для оптимизации /Applications папка, /Applications/AppleScript папка была удалена, и ее реорганизованное содержание:

Редактор AppleScript

У Редактора AppleScript есть несколько значительных улучшений:

Редактор AppleScript является теперь более быстро реагирующим при выполнении сценария и может выполнить несколько сценариев одновременно. Предыдущие версии позволили бы Вам начать выполнять второй сценарий, но первый приостановился бы, пока второй не закончился. Это делает это рабочими сценариями на фоновых потоках. Если это доставляет неприятности, обычно потому что третье лицо, пишущее сценарий дополнения, утверждало, что было ориентировано на многопотоковое исполнение, но не, можно вынудить сценарий работать на основном потоке путем содержания Клавиши CTRL и выбора Команды выполнения, которая покажет как “Выполнение на Переднем плане” в меню.

Синтаксис, окрашивающий для сценариев теперь, имеет намного больше подробности: команды, параметры, классы, свойства и перечисляемые значения все имеют их собственную категорию теперь, вместо того, чтобы совместно использовать “категорию” ключевых слов приложения, и могут быть отформатированы по-другому в зависимости от того, происходят ли они из приложения или дополнения сценариев. Это позволяет сценаристам лучше определять то, что срок просто путем рассмотрения скомпилированного сценария.

Области Результата и Журнала событий были объединены в единственную область с тремя средствами управления видимостью: Результат, События и Ответы. Выбор «Result» показывает только результат сценария, во многом как старая область Result. Выбор «Events» или «Replies» показывает события Apple, отправленные сценарием и значениями, возвращенными событиями, соответственно, вместе с выводом от любого явного log команды и конечный результат в конце. Эти средства управления являются динамичными: можно изменить их в любое время, даже в то время как сценарий работает, и надлежащие биты журнала будут скрыты или показаны. Парение над событием в журнале покажет подсказку с необработанным содержанием события Apple, включая все четырехбайтовые коды.

Существует теперь опция включить новое, Говорят Приложение, раскрывающееся в панели навигации: это управляет целью по умолчанию сценария, эффективно помещая a tell блок вокруг всего сценария. Это полезно для исследования scriptability приложения, так как нет тогда никакой потребности в явном tell, или для сценариев тестирования, которые будут в конечном счете выполнены в другом приложении: например, при записи Почтового сценария правила, Вы поставили бы цель по умолчанию к Почте. Эта настройка сохраняется со сценарием, но не влияет на поведение сценария, если это сохраняется как приложение: цель по умолчанию является все еще тем приложением. Можно активировать эту опцию в предпочтениях «Редактирования» Редактора AppleScript. Приложениями в раскрывающемся управляет содержание окна Library.

Сценарии дополнительной безопасности

Для соображений безопасности большинство дополнительных команд сценариев теперь возвращает ошибку «нарушения полномочий», когда отправлено между порядком подачи заявки. Для сохранения совместимости с существующими сценариями AppleScript перенаправляет большинство этих команд к текущему приложению, т.е. процесс, выполняющий сценарий. Если сценарий отправляет события в удаленный компьютер через EPPC (“Удаленные События Apple”), AppleScript может перенаправить их к процессу Системных событий на целевой машине. Когда это перенаправление произойдет, журнал событий Редактора AppleScript покажет: Вы будете видеть, что событие отправило сначала к исходному целевому процессу, возвратите ошибку, и затем отправленный снова, часто к текущему приложению.

Некоторые дополнительные команды сценариев, такой как display dialog, если какое-либо следующее является истиной, должен быть обработан в целевом процессе для работы правильно и может потребовать аутентификации как администратора:

Если событие может быть успешно перенаправлено к текущему процессу, то это не должно было быть отправлено в целевой процесс во-первых. Можно устранить ненужное двойное - отправляют путем перемещения дополнительной команды сценариев за пределами tell блок, или путем добавления tell current application to к команде. Например, этот сценарий делает новую папку на рабочем столе названной с текущей датой, но делает это в требующем пути current date быть отправленным дважды:

tell application "Finder"
    set folderName to date string of (current date)
    make new folder with properties {name:folderName}
end tell

Для устранения двойного отправляют, перемещаются current date за пределами tell блок:

set folderName to date string of (current date)
tell application "Finder"
    make new folder with properties {name:folderName}
end tell

Или добавьте внутреннее tell применение к дополнительной команде:

tell application "Finder"
    tell current application to set folderName to date string of (current date)
    make new folder with properties {name:folderName}
end tell

Другие улучшения

AppleScript

При получении text items из строки, всех значений в text item delimiters рассматриваются. Предыдущие версии только рассмотрели первый элемент в списке. [1186965]

Сам AppleScript больше не зависит от того, чтобы быть выполненным в сеансе входа в систему и может быть выполнен извне входа в систему текущего пользователя, такой как через ssh(1) сеанс или в корне cron(8) задание. Однако внешний код, который сценарий использует, такие как сценарии дополнений или приложений, может все еще потребовать сеанса входа в систему. [3192824]

Различные типы ignoring поведение для текстовых сравнений теперь определяется с помощью Unicode Общие Категории, не символы ASCII:

  • ignoring punctuation игнорирует категорию P*: например, лево-и правильные кавычки теперь проигнорированы. Однако символ обратной галочки (`) используемый, чтобы быть проигнорированным, но теперь рассматривается, потому что Unicode классифицирует его как символ, не пунктуацию.

  • ignoring hyphens игнорирует Фунт категории: например, их - и короткие тире теперь проигнорированы.

  • ignoring whitespace игнорирует категорию Z*, плюс вкладка (\t), возвратитесь (\r), и перевод строки (\n): например, неразрывные пробелы теперь проигнорированы.

Для получения дальнейшей информации на Общих Категориях, посмотрите Стандарт Unicode, разделите 4.5. [4819817]

Стандартные дополнения

Если a do shell script команда выходит из-за сигнала, включая катастрофический отказ, do shell script бросит ошибку. Код ошибки будет сигнальным числом плюс 1 000, чтобы позволить отличать сигнальные ошибки от ошибок статуса выхода, которые всегда являются 255 или меньше. Раньше, сигнал был проигнорирован.

say теперь имеет несколько дополнительных параметров для настройки речевых параметров: speaking rate, pitch, modulation, и volume, и асинхронная речь больше не требует, чтобы окно состояния Speech было открыто. Дополнительную информацию см. в Стандартном Дополнительном словаре.

Командная строка

osascript теперь поддержки log команда; вывод будет отправлен в stderr. [6260159]

Действия папки

Действия папки теперь поддерживают присоединение потока операций Automator как действие папки. Только “файлы добавили, что” поддерживаются действия; добавленные файлы будут вводом к потоку операций.

Исправления ошибок

AppleScript

Производительность получения элементов текста была улучшена. [2206026]

Время запуска интерпретатора AppleScript было улучшено. [3188110].

character элементы считаются тот же путь offset of считает их, таким образом, счетчики символов теперь всегда соответствуют между двумя. [5578622]

В целом AppleScript в 10,5 и позже рассмотрит константы класса string и text равный. Однако это не применялось к включению списка, таким образом, class of "foo" is in {string} неправильно возвратился бы false. Это теперь оценивает к true. [5581947]

Если сценарий использует using terms from блоки, цели не инициируют, “Где …” диалоговое окно, когда сценарий выполняется на 10,4 и более ранние системы. [5823283]

Редактор AppleScript

«Отмена» теперь работает правильно через команды Compile.

Действия папки

Действия папки теперь пытаются задержаться, вызов “файлы добавил” действия с файлами, пока они не сделаны, будучи скопированным. Предыдущие версии, вызванные “файлы, добавили” действия с новыми файлами, как только они появились в файловой системе. Это было проблемой для файлов, копировавшихся в место: если бы файл был достаточно большим или ближайшим через медленную ссылку сервера, то файл мог бы появиться за несколько секунд до того, как это было сделано, будучи скопированным, и выполнив действие папки, прежде чем это закончило копировать, будет вести себя плохо. Если файл изменяет размер, действия папки теперь смотрят: если это остается тот же размер больше трех секунд, это считают «сделанным», и действие вызывают.

Примечания совместимости

64-разрядный

Редактор AppleScript и osascript(1) выполненный в 64-разрядном режиме по умолчанию на аппаратных средствах, поддерживающих его. Это может быть проблемой для сценариев дополнений: Стандартные Дополнения являются полностью 64-разрядными способными, но сторонними дополнениями, может не быть и откажется загружаться с консольным сообщением, таким как это:

Error loading Potrzebie.osax/Contents/MacOS/Potrzebie:
  dlopen(Potrzebie.osax/Contents/MacOS/Potrzebie, 262): no suitable image found.
Did find:
  Potrzebie.osax/Contents/MacOS/Potrzebie: mach-o, but wrong architecture

Это только влияет на сценарии, полагающиеся на команды в том дополнении сценариев; иначе сообщение является эффективно предупреждением. Если 64-разрядная версия дополнения не доступна, можно работать вокруг проблемы, вынуждая процесс, выполняющий сценарий работать в 32-разрядном режиме, или при помощи опции «Open in 32-bit mode» в панели «Get Info» Средства поиска, или при помощи arch(1), такие как это:

arch -i386 osascript 32-bit-only.scpt

Форматы файлов сценария

Редактор AppleScript больше не поддерживает приложения сохранения в старом однофайловом формате. Все сценарии, сохраненные как «Приложение», будут сохранены как комплект приложений с тремя поддерживаемой архитектурой: PPC, i386, и x86_64. Такие приложения могут работать на Mac OS X v10.3 и позже. Старые однофайловые приложения, открытые в Редакторе AppleScript, будут обработаны как файлы только для чтения: необходимо использовать, Сохраняют для сохранения их, и в них сохранят новый формат.

osacompile теперь выходные сценарии ветви данных по умолчанию. Это соответствует Редактору AppleScript. Для создания сценария ветви ресурсов, совместимого с классическим Mac OS, используйте опцию -r scpt:128. [6325665]

Даты и время

Парсинг строк даты теперь использует CFDateFormatterCreateDateFromString, что означает, что пользовательские форматы даты, локали только для Unicode, такие как арабский и негригорианские календари теперь все обрабатываются правильно. Однако это также намного более строго об отклонении от формата системной даты. Предыдущие версии приняли бы что-либо, что походило даже неопределенно на дату: строка могла опустить компоненты, переупорядочить других, добавить или опустить пунктуацию, и т.д. В AppleScript 2.1 строка должна точно соответствовать один из форматов системной даты (полный, долго, носитель, или короткий; посмотрите Установки системы> Международный> Форматы для примеров), включая всю пунктуацию и пробел. Позволенная единственная разница должна использовать или два - или год из четырех знаков, независимо от того, что использует формат.

Некоторые сценарии использовали частичные спецификаторы даты в качестве способа получить даты относительно текущей даты, такой как date "1/31" на 31 января текущего года, или date "15" получить 15-й из текущего месяца. Чтобы сделать это в AppleScript 2.1, получите основную дату и затем установите желаемые компоненты с помощью свойств объекта даты. Например, для получения 31 января текущего года:

set d to date "1/31/2000"
set year of d to year of (current date)
d --> date "Saturday, January 31, 2009 12:00:00 AM"

Также запустите с current date как основа. Получить 15-й из текущего месяца:

set d to current date
set day of d to 15
set time of d to 0
d --> date "Friday, May 15, 2009 12:00:00 AM"

Эти работы метода со всеми версиями AppleScript, и могут использоваться для сценариев, которые должны работать 10.6 и 10.5 и ранее.

Текст

character элементы теперь считаются с помощью CFStringGetRangeOfComposedCharactersAtIndex. Это главным образом соответствует 10,5 поведений подсчета кластеров графемы, но считает CR-LF (\r\n) упорядочьте как два отдельных символа, как это сделало в 10,4 и ранее, не один.

word элементы теперь считаются с помощью kCFStringTokenizerUnitWordBoundary, который приводит к лучшим результатам для неримских языков и соответствует определение «слова» в остальной части системы, такой, дважды щелкая в тексте. Как отмечено в Руководстве по Языку AppleScript, правила разрыва слова могут измениться в зависимости от пользовательских настроек и обновлений системного программного обеспечения, и не должны быть положены для детерминированного синтаксического анализа текста.

Как описано в Других Улучшениях, ignoring категории теперь игнорируют соответствующие символы во всем наборе символов Unicode, не просто ASCII. Результаты сравнений более корректны, но могут отличаться от предыдущих версий.

События Apple

ssh(1) сеансы находятся теперь в том же пространстве безопасности как другие процессы, принадлежавшие тому же пользователю, и поэтому отправляют события Apple друг другу. Это означает, что пользователь может теперь использовать ssh(1) выполнять сценарий и приложения управления на удаленной машине, если они также зарегистрированы как пользователь консоли на той машине.

Mac OS X v10.6 больше не поддерживает передающие удаленные события Apple к Mac OS 9 машин.

Разработчик отмечает

64-разрядный

AppleScript, Стандартные Дополнения и все AppleScript-связанные системные приложения, такие как Системные события полностью 64-разрядные способный. Сценарии дополнительных разработчиков должны сделать их дополнения 64 битами способный как можно скорее, иначе они не будут работать над 64-разрядными системами без дополнительных шагов пользователем. (См. Примечания Совместимости.) способные дополнения сценариев на 64 бита должны использовать обновленный формат для Mac OS X v10.6; см. TN1164, Пишущий сценарий Дополнений для Mac OS X, для подробных данных.

Потокобезопасность

OSA и AppleScript теперь ориентированы на многопотоковое исполнение: их можно безопасно вызвать на неосновном потоке или от многократных потоков без любой блокировки в клиентском коде. Это также применяется к NSAppleScript. Это не означает, что AppleScript полностью параллелен: блокировка использования AppleScript, чтобы гарантировать, что любое единственное соединение (a ComponentInstance) будет только работать на одном потоке за один раз. Из-за размера гранулярности блокировки, пытаясь управлять тем же сценарием от многократных потоков сразу может все еще подвергнуться условиям состязания и не рекомендуется.

Перед использованием компонента сценариев на фоновом потоке разработчики должны протестировать «ориентированный на многопотоковое исполнение» бит компонента (cmpThreadSafe в ComponentDescription componentFlags.) Тестируют универсальный компонент перед использованием OSA на фоновом потоке, и затем тестируют определенный компонент языка перед использованием его на фоновом потоке.

Сценарии дополнений и потокобезопасности

Так как дополнение сценариев может содержать произвольный код, данная дополнительная команда может или может не быть ориентирована на многопотоковое исполнение: offset of например, но display dialog не. Для совместимости дополнительные команды, как предполагают, небезопасны потоком, и будут выполняться на основном потоке. Команды могут быть отмечены как ориентированное на многопотоковое исполнение использование расширенного определения Info.plist; см. TN1164, Пишущий сценарий Дополнений для Mac OS X, для подробных данных. Обработчики приведения в сценариях дополнений должны быть ориентированы на многопотоковое исполнение; снова, см. TN1164 для подробных данных. Сценарии дополнительных разработчиков должны рассмотреть и, при необходимости, обновить их дополнения для потокобезопасности.

Идентификаторы AppleScript

AppleScript теперь использует различные правила для капитализации идентификаторов, к которым получают доступ через OSA APIs. Эти изменения предназначаются, чтобы сохранить информацию о капитализации и сделать ненужным знать внутренние правила AppleScript. При доступе к свойству или обработчику, такой как при помощи OSAGetProperty или OSAExecuteEvent с “событием” подпрограммы вызова идентификатор обрабатывается нечувствительно к регистру. Раньше, у Вас был к нижнему регистру идентификатор прежде, чем передать его AppleScript. При получении свойства или имени обработчика, такой как при помощи OSAGetPropertyNames или когда результат сценария содержит идентификатор пользователя, идентификатор будет капитализироваться, как это было в сценарии, который может быть смешанным случаем. Раньше, идентификаторы всегда выходили бы все-нижний регистр.

Сценарии определений (sdefs)

OSACopyScriptingDefinition теперь сделал, чтобы функционировала сестра OSACopyScriptingDefinitionFromURL, который может принять любого a file: или eppc: URL.

OSACopyScriptingDefinition теперь выполняет в лучшей скрытой информации о сохранении задания aete комплекты.

10.6.2 Изменения

Редактор AppleScript теперь откроет определенные уродливые словари приложения.