По предложению slhck, я создал автономный AppleScript, который выполняет эту задачу, а затем сохранил его в утилите редактора AppleScript как .app. Это именно то, что я хочу.
Ниже найдите скрипт. Он проверяет, запущен ли SafariForWebKitDevelopment, и указывает терминалу запустить скрипт для его запуска в случае необходимости. (Это автоматически создает новое окно, и я установил настройки нового окна терминала по умолчанию, чтобы закрыть окно при выходе из процесса.) Затем он устанавливает этот процесс в верхнее окно.
Я продолжил дикую погоню, пытаясь выяснить, как справиться со случаем обычного Safari, работающего одновременно с SafariForWebKitDevelopment, и, наконец, пришел к решению, которое вы видите в коде, работающем с процессами, а не с приложениями.
tell application "System Events"
-- Only launch development Safari if it isn't already running
if not (exists process "SafariForWebKitDevelopment") then
tell application "Terminal"
do script "run-safari; exit"
activate
end tell
end if
-- Max number of iterations of checking for process before
-- we give up and exit the script (guards against errors in
-- launching SafariForWebKitDevelopment, where the process
-- would never exist, and this would be an infinite loop)
set num_checks to 100
-- Wait until dev Safari has launched
repeat until (exists process "SafariForWebKitDevelopment")
delay 0.1
set num_checks to num_checks - 1
if num_checks < 0 then
return
end if
end repeat
-- Set dev Safari to have focus
-- 'tell application "Safari" to activate' doesn't work because AppleScript
-- has no way of discerning between multiple processes from the same .app
-- bundle, so we can't be sure if we're talking to
-- SafariForWebKitDevelopment, or an already-running normal Safari
set frontmost of (process "SafariForWebKitDevelopment") to true
end tell