Почему Applescript запускается в редакторе скриптов, но выдает ошибку при сохранении как приложение? - PullRequest
2 голосов
/ 28 июля 2010

Моему яблочному сценарию нужно определить собственное имя файла, и на Snow Leopard (10.6)

работает следующее:
set my_name to name of me as string
display dialog "Name: " & my_name

Он отображает «Имя: AppleScript Editor», когда я запускаю его из AppleScript Editor, и отображает «Имя: NewTest», когда я сохраняю его как приложение под названием NewTest.

Когда я запускаю его на машине Leopare (10.5), он жалуется на «Невозможно преобразовать имя <> в строку типа». Когда я удаляю часть «as string», она запускается в редакторе сценариев, возвращая «Name: Script Editor», но при сохранении в виде приложения выдает ошибку и говорит: «Can't get name».

Чем отличается запуск в редакторе скриптов и сохранение в виде приложения под 10.5?

Ответы [ 2 ]

3 голосов
/ 29 июля 2010

Вот еще одна мысль, хотя я не проверял.Одной вещью, которая может вызвать проблемы, является команда «получить».В общем, когда вы запускаете команду типа «имя меня», подразумевается команда get, поэтому вы действительно запускаете команду «получить имя меня».Проблема в том, что подразумеваемое «получить» не всегда так.Поэтому иногда вы должны явно сказать «получить».Всякий раз, когда у меня возникает проблема, как у вас, первое, что я пытаюсь сделать, это добавить «get» к команде ... это стало привычкой, потому что вы просто никогда не знаете.Обратите внимание, что вы всегда можете использовать слово get и никогда не иметь такой проблемы.Поэтому попробуйте изменить команду на «my_name (get name of me)».Мне было бы интересно узнать, решит ли это вашу проблему с 10.5.Также обратите внимание, что имя уже является строкой, поэтому нет необходимости приводить результат к строке.

РЕДАКТИРОВАТЬ: Я просмотрел некоторые из моих старых сценариев.Я использовал следующий код, чтобы получить имя.В моих заметках у меня есть эти комментарии ...

- это даст название приложения или скрипта без расширения файла

- это делается с использованием пути, потому что когда скриптзапускается из меню сценария, и вы пишете установить myName на имя меня, а затем результат «яблочный бегун» вместо действительного имени

- также он гарантирует, что вы получаете имя в том виде, как онопоявляется в Finder, потому что иногда имя процесса системных событий отличается от имени Finder

on getMyName()
    set myPath to path to me as text
    if myPath ends with ":" then
        set n to -2
    else
        set n to -1
    end if
    set AppleScript's text item delimiters to ":"
    set myName to text item n of myPath
    if (myName contains ".") then
        set AppleScript's text item delimiters to "."
        set myName to text 1 thru text item -2 of myName
    end if
    set AppleScript's text item delimiters to ""
    return myName
end getMyName
3 голосов
/ 28 июля 2010

Приложение Applescript не является «приложением» в прямом смысле этого слова.Многие контексты меняются, например, «get path to me» будет отличаться при запуске в виде скрипта или приложения, потому что они по-прежнему хороши для Applescript, в отличие от приложений на основе Carbon или Cocoa.Запуск аналогичного кода для Finder ...

tell application "Finder"
    set my_name to name as string
    display dialog "Finder: " & my_name
end tell

... ведет себя как ожидалось, потому что Finder - приложение на основе углерода / какао.

У меня нет реального ответакроме того, что это звучит так, будто в 10.6 в ОС было внесено изменение относительно инфраструктуры Applescript, которое заставляет вызов «я» вести себя более ожидаемым образом.

Я бы порекомендовал прочитать разделв руководстве по Applescript о ключевых словах me и it , чтобы лучше понять, как работает me.

...