Иногда это проблема, поэтому мы можем нацеливать приложения по их идентификатору пакета, что устранит путаницу.Попробуйте это так.
set bundleName to "com.apple.TextEdit"
-- find out if the application is running
set appIsRunning to false
tell application "System Events"
try
first process whose bundle identifier is bundleName
set appIsRunning to true
end try
end tell
if appIsRunning then
tell application id bundleName
-- do something
end tell
end if
Вот небольшой скрипт, который поможет вам найти идентификатор пакета приложения.
try
tell application "Finder" to set bundleID to id of (choose file)
on error
return "The chosen file is not an application"
end try
return bundleID
Наконец, я не уверен, что это поможет решить вашу проблему,Если в вашем коде есть строка «сказать приложению что угодно», а у пользователя нет приложения в своей системе, то, скорее всего, диалог запустится в любом случае.Именно так всегда работал яблочный скрипт.Apple пыталась решить эту проблему, и большинство программ больше не отображают окно «найти приложение», хотя некоторые все еще показывают.iPhoto - один из примеров, который я заметил.
Это происходит, когда вы распространяете свой код как скрипт, потому что, когда скрипт открывается, он должен сам компилироваться.На этапе компиляции яблочный скрипт должен убедиться, что код правильный, и, следовательно, для проверки кода должен быть проверен словарь яблочного скрипта приложения ... что означает, что иногда приложение должно быть запущено.Однако есть одно возможное решение.Вы должны поставить свой предварительно скомпилированный скрипт, что означает, что вы должны распространять его как приложение, а не как скрипт.Кроме того, вы должны использовать следующую конструкцию в приложении.Другими словами, вы предварительно скомпилируете сценарий на своем компьютере с помощью материала «используя термины из», чтобы пользователю не приходилось проверять словарь приложения при его запуске.
set appName to "TextEdit"
using terms from application "TextEdit"
tell application appName
-- do something
end tell
end using terms from