10.5 Изменения
Эта статья описывает изменения в AppleScript и связанных инструментах в Mac OS X Leopard v10.5 и его обновлениях.
Поддержка Unicode
AppleScript теперь полностью основан на Unicode. Комментарии и текстовые константы в сценариях могут содержать любые символы Unicode, и вся обработка текста сделана в Unicode, таким образом, все символы сохраняются правильно независимо от предпочтений языка пользователя. Например, этот сценарий работает правильно в AppleScript 2.0, где это не имело бы в предыдущих версиях:
set jp to "日本語" |
set ru to "Русский" |
jp & " and " & ru -- returns "日本語 and Русский" |
Больше нет различия между текстом не-Unicode и Unicode. Существует точно один текстовый класс, названный «текстом»: т.е. class of "foo" возвраты text. Это функционально эквивалентно прежнему Unicode text класс, таким образом, это может содержать любой символ Unicode и имеет две новых функции кроме того:
textобъекты имеютidсвойство, которое может также использоваться в качестве адреса.Они позволяют отображаться между значениями кодовой точки Unicode и символами в тех кодовых точках: например,
id of "A"возвраты65, иcharacter id 65возвраты"A". ID текста дольше, чем одна кодовая точка является списком целых чисел, и наоборот: например,id of "hello"возвраты{104, 101, 108, 108, 111}, иstring id {104, 101, 108, 108, 111}возвраты"hello". (Из-за ошибки,text id ...не работает; необходимо использовать один изstring,Unicode text, илиcharacter.) Они устаревшие более староеASCII characterиASCII numberкоманды, с тех пор, в отличие от тех, они покрывают полный диапазон символов Unicode и возвратят те же результаты независимо от предпочтений языка пользователя. [2915643]characterэлементы текста считают кластер графемы как отдельный символ.Некоторые «символы» могут быть составлены из серии кодовых точек Unicode, что Unicode определяет как кластер графемы. Например, «В» может быть закодирован как U+0065 (LATIN SMALL LETTER E), U+0301 (COMBINING ACUTE ACCENT). AppleScript 2.0 будет считать кластер как один символ, где более старые версии считали основной символ и комбинирующий метку отдельно. Для полного определения кластеров графемы см. № 29 UAX: Сегментация текстов Unicode. [4192557]
Соответствие text item delimiters теперь отношения considering и ignoring атрибуты, где предыдущие версии проигнорировали их. expansion атрибут больше не поддерживается.
Изменение во все-Unicode требовало изменения в read и write команды и как они имеют дело с текстовыми кодировками. Раньше, записали бы они string объекты с помощью основного кодирования и Unicode text объекты как UTF-16, если не проинструктировано иначе использование as параметр. Теперь, когда существует только один текстовый класс, read и write команды полагаются исключительно на as параметр для определения кодирования: без as параметр, as text, или as string, они используют основное кодирование; с as Unicode text, они используют UTF-16. Для самых надежных результатов при создании сценариев, которые будут работать и 2.0 и пред2.0, всегда указывайте кодирование явно с помощью as text или as Unicode text, как надлежащий. [4421553]
Совместимость
Для совместимости с pre-2.0 AppleScript, string и Unicode text все еще определяются, но считаются синонимами для text. Например, все три из этих операторов имеют тот же эффект:
someObject as text |
someObject as string |
someObject as Unicode text |
Кроме того, text, string, и Unicode text все выдержит сравнение как равный. Например, class of "foo" is string истина, даже при том, что class of "foo" возвраты text. Для приложений все еще возможно различить эти три различных типов, даже при том, что сам AppleScript не делает.
Теперь, когда AppleScript сохраняет все символы правильно во всем мире, это также более строго о тексте, используемом в сценариях. Синтаксис AppleScript использует несколько символов неASCII, таких как «» и «к». Эти символы должны быть введены точно, как Руководство по Языку AppleScript описывает. Для совместимости с азиатскими национальными кодировками «» и «» позволяются как синонимы для “«” и “»”, так как последние не существуют в некоторых азиатских кодировках.
Поскольку весь текст является текстом Unicode, сценарии теперь всегда получают текстовое поведение Unicode. Это может отличаться от прежнего string поведение для некоторых зависимых от локали операций, в частности word элементы. Для получения того же поведения с 2,0 и пред2.0 добавьте явное as Unicode text приведение, например, words of (someText as Unicode text).
Поскольку text item delimiters теперь уважение considering и ignoring атрибуты, они теперь нечувствительны к регистру по умолчанию. Раньше, они были всегда чувствительны к регистру. Для получения того же поведения с 2,0 и пред2.0 добавьте явное considering case оператор.
Поскольку сценарии AppleScript 2.0 хранят весь текст как Unicode, любое текстовое количество констант как использование прежнего Unicode text класс, который будет работать с любой версией AppleScript назад к версии 1.3. Сценарий, содержащий символы только для Unicode, такие как арабский или тайский язык, будет работать, но не будет правильно доступным для редактирования pre-2.0 AppleScript использования: символы только для Unicode будут потеряны.
Использование нового id свойство требует AppleScript 2.0.
Объекты приложения
application объекты в AppleScript имеют некоторые новые функции, разработанные для сокращения потребности в неловких или неясных обходных решениях. Другими словами, возможности не являются новыми, но они теперь непосредственно поддерживаются и проще использовать.
Приложение работает?
В то время как Системные события способны к сообщению Вам, работает ли приложение, это проводит несколько строк, чтобы сделать это.
applicationобъекты теперь имеют arunningсвойство, которое может дать Вам ответ непосредственно, не вызов System Events. Например, следующие паузы сценария, iTunes, но не запустит его, если это не будет уже работать:tell application "iTunes"
if it is running -- same thing as "if running" or "if running is true"
pause
end if
end tell
runningне должен появляться в сказать блоке; вышеупомянутый сценарий мог также быть записан как это:if application "iTunes" is running
tell application "iTunes" to pause
end if
Приложение frontmost?
applicationобъекты теперь имеют afrontmostсвойство, подобноеrunning, включая это информация доступна от Системных событий, но она говорит Вам, является ли приложение впереди. Значениеfrontmostдля приложений только для фона приложения элемента UI, такие как не работающие Системные события и приложения всегдаfalse.Получите версию приложения
Большинство приложений имеет собственное свойство версии, но использование его требует, чтобы приложение работало, и иногда Вы в частности хотите избежать этого. Новое встроенное
versionсвойство возвратит версию приложения как текст, не запуская приложение или отправляя ему событие. Существует также встроенное соответствиеnameсвойство; значение применимо как имя приложения кtell.Целевые приложения подписью или идентификатором пакета [3858040]
Выполнение этого в более старых версиях требует многострочного колдовства с помощью Средства поиска. Теперь возможно просто адресоваться
applicationобъект ID, где ID является или идентификатором пакета или кодом подписи с четырьмя символами. Например,application "Mail",application id "com.apple.mail", иapplication id "emal"все обращаются к Mail.app и будут все работать целью atellблок, как в этом примере:tell application id "com.apple.mail"
get unread count of inbox
end tell
Существует соответствие
idсвойство, таким образом, можно заставить необходимый ID говорить:get id of application "TextEdit"
-- returns "com.apple.TextEdit"
-- Now we know that 'tell application id "com.apple.TextEdit"' will work.
Это не требует, чтобы работало приложение.
При выполнении сценария, если приложение, указанное ID, не найдено, AppleScript не спросит, где это. Это бросит ошибку, которая может быть зафиксирована с помощью a
tryблок.Сценарии, предназначенные для распределения, должны использовать форму ID. Тем путем, даже если пользователь изменил имя приложения, сценарий будет продолжать работать.
Кроме того, существует несколько изменений в поведении приложения сделать их проще иметь дело с:
Скрытый запуск приложений.
AppleScript всегда запускал приложения, если ему было нужно к тому, чтобы отправить им команду. Однако они всегда запускались бы явно, который мог быть визуально подрывным. AppleScript теперь запускает приложения, скрытые по умолчанию. Они не будут видимы, если в сценарии явно не будет сказано иначе использование
launchилиactivate.Приложения расположены лениво.
При выполнении сценария AppleScript не попытается определить местоположение приложения, пока ему не будет нужно к тому, чтобы отправить ему команду. Это означает, что скомпилированное приложение сценария или сценария может содержать ссылки на приложения, не существующие в системе пользователя, но AppleScript не спросит, где недостающие приложения - пока это не встречается с соответствующим
tellблок. Более старые версии AppleScript попытались бы определить местоположение каждого приложения, на которое ссылаются, прежде, чем выполнить сценарий.При открытии сценария AppleScript попытается определить местоположение всех приложений, на которые ссылаются, во всем сценарии, который может означать спрашивать, где каждый. Нажатие Кнопки отмены только отменяет поиск того приложения; сценарий будет продолжать открываться обычно, хотя пользовательская терминология для того приложения выведет на экран как необработанные коды. В более старых версиях, нажатие Cancel отменил бы открытие сценария.
Приложения расположены и перемещены динамично.
applicationобъектные спецификаторы, включая тех вtellблоки, оценены каждый раз выполнения сценария. Это улучшает проблемы со сценариями, вовлекающими к определенной копии приложения. [4356296]
Совместимость
Использование встроенных свойств приложения отступит к отправке события к приложению в более старых версиях AppleScript, но приложение может не обработать их то же или обработать их вообще. (Большинство приложений обработает name, version, и frontmost; id и running являются редкими.) Другие новые функции выше требуют AppleScript 2.0.
Scriptability и VoiceOver
Утилита AppleScript и Установка Действий Папки являются теперь scriptability scriptable, и Редактора сценариев, был улучшен благодаря улучшениям Сценариев Какао. Все три приложения теперь Осведомлены о голосе за кадром.
Предпочтения сети Scriptable
Сетевые предпочтения теперь доступны через сценарии использования нового комплекта в Системных событиях, где они были ранее только scriptable через доступность. Сценарий может проверить различные сетевые настройки и может сказать службе соединяться или разъединяться. Например, следующий сценарий определяет местоположение службы PPPoE в текущем расположении и говорит ему соединяться, если оно существует.
tell application "System Events" |
tell network preferences |
tell current location |
set aPPPoEService to a reference to (first service whose kind is 10) |
if exists aPPPoEService then |
connect aPPPoEService |
end if |
end tell |
end tell |
end tell |
Поддержка командной строки
AppleScript теперь позволяет # как комментарий к концу маркера строки, в дополнение к --. Это означает, что можно сделать простой текст сценарием AppleScript в исполнимую программу Unix путем начала его со строки #!/usr/bin/osascript и предоставление его выполняет разрешение. Для получения дополнительной информации osascript использование, включая то, как получить доступ к параметрам командной строки из сценария, видит osascript(1) страница справочника. [2468788]
Существует инструмент командной строки для отображения скомпилированных сценариев как текста, /usr/bin/osadecompile. [4501123]
osascript(1) и osacompile(1) теперь правильно обработайте текстовые сценарии, закодированные как UTF-8, в дополнение к UTF-16 и основному кодированию. Если сценарий не является ни UTF-8, ни UTF-16, это, как предполагают, кодируется с помощью основного кодирования.
Совместимость
Скомпилированные сценарии то использование # будет обычно работать в пред2.0 системах, и, если отредактировано выведет на экран использование --. Исполнимое текстовое использование сценариев #!/usr/bin/osascript как выше не будет работать на пред2.0 системах, начиная с # будет считаться синтаксической ошибкой.
Другие улучшения
Редактор сценариев
Средство просмотра словаря позволяет определениям классов показывать все свойства и элементы, которые они наследовали от других классов. Для включения и выключения этого используйте установку «Show inherited items in dictionary viewer» в Общих предпочтениях. [4950321]
Редактор сценариев может показать вкладки, возвраты каретки и переводы строки в текстовых константах как escape-последовательность, а не литеральная вкладка, возврат каретки или перевод строки. Для включения и выключения этого используйте установку «Escape tabs and line breaks in strings» в предпочтениях Редактирования. [4911918]
Когда выполнено из документа сценария в Редакторе сценариев,
path to meвозвратит расположение файла документа. Если документ не был сохранен,path to meвозвратит расположение Редактора сценариев. [3148582, 5363659]
Системные события
diskкласс имеетserverиzoneсвойства для использования с объемами AppleShare. [3554247]fileкласс имеет adefault applicationсвойство, соответствуяinfo fordefault applicationсвойство и Средство поискаopen withначинание Получает Информацию [4796981]Системные события имеют a
downloads folderсвойство. [5255406]Системные события имеют новый Комплект Безопасности, управляющий различными настройками от области Параметра безопасности. [4358335]
processкласс имеет abundle identifierсвойство. [4782866]processкласс имеетarchitectureсвойство, указывающее архитектуру процессора того процесса. [5237251]Комплект Списка свойств позволяет создавать новые файлы списка свойств и элементы списка свойств. [4728058, 5392953]
Если a
XML elementобъект имеет атрибут «имени» или «ID», он будет отражен в элементеnameилиidсвойство, соответственно.XML element named ...иXML element id ...будет также работать. [4437103, 4441834]
События изображения
События изображения поддерживают изображения RAW. [4250666]
padкоманда имеет дополнительноеwith pad colorпараметр. [5234464]saveкоманда имеет дополнительноеwith compression levelпараметр для указания уровня сжатия JPEG. [3614780]
Исправления ошибок
AppleScript
delayкоманда использует меньше CPU. [3178086]Невозможные объектные спецификаторы в математических выражениях, такой как
1 + character 2 of "9", произведите ошибку вместо случайного результата. [4029175]Числовые пределы для
repeatциклы принимают вещественные числа; они будут округлены к целым числам. [4215670]Объектные спецификаторы кроме
applicationиdateспецификаторы, в частностиalias "..."иPOSIX file "...", не оценены во время компиляции и будет оставлен точно, как первоначально введено. [4444698]AppleScript больше не ограничивает использование памяти сценария 32 МБ. [4511477]
Подсчет абзацев пустой строки дает результат нуля. [4588706]
Литералы необработанных данных (
«data ...») больше не ограничиваются 127 байтами. [4986420]
Стандартные дополнения
choose from listправильно измеряет диалоговое окно, если дали больше чем 2 000 элементов. [4102349]display dialogправильно измеряет диалоговое окно, если дали больше чем 2 000 строк текста. [4314839]display dialogправильно дисплеи «^0», «^1», «^2», и «^3» в тексте. [4831383]Сценарий может не сказать удаленное приложение
do shell script. [4241641]
Редактор сценариев
Редактор сценариев точно сообщает о позиции ошибок в сценариях, содержащих азиатские символы. [3457168]
Окно Library правильно обрабатывает приложения с азиатскими именами. [5080569]
Системные события
diskобъекты различают диски с идентичными именами. [4141496]Установка
file typeиcreator typeсвойства работают правильно над системами Intel. [4788442]Установка
focusedсвойство aUI elementработы. [4756520]UI elementобъекты имеют более информативные имена. [4886664]frontmostсвойствоprocessкласс всегда будет ложью для приложений элемента UI, таких как Системные события. Это означает этоfirst process whose frontmost is trueвозвратит то же приложение какpath to frontmost application. [4175274, 5100612]processкласс сообщит о корректном имени для комплекта приложений AppleScript. [4381260]Попытка использовать команды GUI Scripting, когда Универсальный Доступ будет прочь, произведет более информативное сообщение об ошибке. [4774412]
Другие
Производительность Событий базы данных была улучшена. [4124666]
Действия папки были повторно спроектированы для улучшения их устойчивости и производительности. [3663310, 3693421, 4614337]
Установка Действий папки позволяет присоединять пакет сценария как действие. [4036743]
События изображения обрабатывают файлы, имя которых содержит «/» правильно. [4275156]
Разработчик отмечает
Сценарии определений (sdefs)
AppleScript может теперь считать sdef приложения непосредственно. Это означает, что приложение с только sdef больше не должно запускаться для получения его терминологии сценариев. [4569425]
Существует несколько изменений в самом формате sdef; посмотрите sdef (5) страница справочника для подробных данных. В частности sdefs теперь поддерживают использование XInclude. Приложения, обрабатывающие sdefs, должны быть подготовлены обработать их. 10.4 форматов sdef все еще поддерживаются, но необходимо мигрировать, когда у Вас есть возможность.
Изменения API
Несколько Open Scripting Architecture (OSA) APIs имеют новые замены, главным образом предназначенные для улучшенной обработки содержания сценария Unicode. За исключением отмеченного, новый APIs доступен в версии 10.5 Mac OS X и позже, и старый APIs все еще доступен и поддерживается, хотя они не поддерживают новую функциональность. Для дополнительных подробных данных посмотрите Открыть Scripting Architecture Reference.
старый | новый |
|---|---|
|
Они возвращают их вывод как a |
|
Они используют CFArray CFDictionaries атрибутов для применения к |
|
|
OSALoadFile и OSADoScriptFile теперь правильно обработайте текстовые сценарии, закодированные как UTF-8. [4490939]
Различное OSADebugger APIs, отмеченный как “не реализованный” в течение некоторого времени, был полностью удален. [3918369]
Сценарии дополнений
Сценарии дополнений могут быть записаны с помощью новой архитектуры, которую и проще записать и улучшает производительность. Посмотрите Дополнения Сценариев для Mac OS X для подробных данных. [4236732]
Дополнительный загрузчик сценариев будет искать каталог, указанный переменной окружения DYLD_FRAMEWORK_PATH. XCode устанавливает эту переменную в каталог продукта сборки при выполнении исполнимой программы что означает, что можно выполнить и отладить дополнительный проект сценариев непосредственно от XCode без первой установки дополнения сценариев. [5027805]