Пытаюсь запустить приложение и открыть в нем файл через applescript. Я смог сделать это из редактора сценариев Apple. Это эскрипто, которое я написал:
set AppPath to "<My App Path.app>"
tell application AppPath
if it is running then
activate
else
launch
end if
tell application AppPath to open POSIX file "<My File Path>"
end tell
Если приложение работало в фоновом режиме, один запуск не мог вывести его на передний план (над редактором сценариев). И если приложение не было запущено, активация не могла показать заставку. Поэтому я использовал запуск и активацию бота.
Скрипт работает нормально. Но мне нужен скрипт в моей программе на С++. Путь к приложению и путь к файлу будут определяться во время выполнения. Итак, я генерировал скрипт как NSApleScript и выполнял скрипт. И сгенерированный NSApplescript выглядит следующим образом:
do shell script "osascript -e 'set AppPath to \"<My App Path.app>\"'
-e 'tell application AppPath' -e 'if it is running then' -e 'activate'
-e 'else' -e 'launch' -e 'endif'
-e 'tell application AppPath to open POSIX file \"<My File Path>\"'"
Весь приведенный выше код находится в одной строке, я разбил его для удобства чтения. Я получаю сообщение об ошибке variable e is not defined
. Это не выполняется.
Код, который я использую для создания этого скрипта:
NSMutableString *script = [NSMutableString stringWithCapacity:512];
[script appendString:@"do shell script \"osascript "];
[script appendString:@"-e 'set AppPath to \\\""];
[script appendString:pathToApp];
[script appendString:@"\\\"'"];
[script appendString:@" -e 'tell application AppPath'"];
[script appendString:@" -e 'if it is running then'"];
[script appendString:@" -e 'activate'"];
[script appendString:@" -e 'else'"];
[script appendString:@" -e 'launch'"];
[script appendString:@" -e 'end if'"];
[script appendString:@" -e 'tell application AppPath to open POSIX file \\\""];
[script appendString:pathToFile];
[script appendString:@"\\\"'"];
[script appendString:@"\"\r"];
Я добавил пробелы перед -e, как предложил пользователь 309603. Теперь я получаю новую ошибку:
ошибка "266:266: синтаксическая ошибка: ожидаемый конец строки и т. д., но найден конец скрипта. (-2741)" номер 1