Хотя ловя весь исключениями без плана правильно обработать их является, конечно, плохая практика, я думаю, что приложение должно перестать работать некоторым корректным способом. Катастрофический отказ не должен пугать пользователя до смерти, и по крайней мере он должен отобразить описание ошибки, некоторая информация, чтобы сообщить материалу технической поддержки, и идеально кнопке закрывать приложение и перезапускать его. В идеальном мире приложение должно быть в состоянии вывести на диске пользовательские данные, и затем попытаться восстановить его (но я вижу, что это спрашивает слишком много).
Так или иначе, я обычно использую:
AppDomain.CurrentDomain.UnhandledException
Вам нужно куда-то перенаправить stdout и stderr. Команда do shell script знает, что каналы, которые она настроила для stdout и stderr программы, все еще открыты, поэтому она ждет их закрытия.
do shell script "/Applications/firefox.app/Contents/MacOS/firefox -no-remote -P 'Personal' > /dev/null 2>&1 &"