Класс Objective- C, для которого вы это адаптируете, выполняет множество других функций, таких как получение авторизации и очистка флага карантина, но вы можете просто сказать приложению прекратить работу после запуска NSTask, который немного подождет, прежде чем перезапуск приложения. Например, операторы quit
и activate
можно заменить одним вызовом обработчика, который выполняет задачу перезапуска:
on moveMyApp()
set checkpath to ((path to "apps" as string) & "Lets Move.app")
set myApp to ((path to current application as text))
tell application "Finder" to set moved to exists file checkpath
if not moved then
display alert "Move to Applications Folder?" buttons {"Do Not Move", "Move to Applications Folder"} default button 2
set response to button returned of the result
if response is "Move to Applications Folder" then
do shell script "mv " & quoted form of POSIX path of myApp & space & "/Applications"
relaunch(checkpath)
end if
end if
end moveMyApp
on relaunch(appPath)
tell current application's NSTask's alloc()'s init()
its setLaunchPath:"/bin/sh"
its setArguments:{"-c", "sleep 1.0; open -a " & quoted form of "Lets Move"}
its |launch|()
end tell
tell current application's NSApp to terminate:me
end relaunch
Обратите внимание, что хотя я немного очистил ваш обработчик, ошибки нет обработка завершена (проблемы с синхронизацией, невозможность перемещения приложения и т. д. c). Протестировано с Mojave и Xcode 10, перемещая приложение в папку пользователя ~/Applications
.