Я пытаюсь запустить приложение и открыть в нем файл с помощью 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
Если приложение работало в фоновом режиме, один запуск не смог вывести его на передний план (над редактором сценариев). И если приложение не было запущено, активировать не удалось показать заставку. Поэтому я использовал запуск и активацию бота.
Скрипт работает нормально. Но мне нужен скрипт в моей программе на C ++. Путь к приложению и путь к файлу будут определены во время выполнения. Итак, я генерировал скрипт как NSAppleScript и выполнял скрипт. И сгенерированный 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, как предложил user309603. Теперь я получаю новую ошибку:
ошибка «266: 266: синтаксическая ошибка: ожидаемый конец строки и т. д., но найден конец сценария. (-2741)» номер 1
Блок Tell должен быть закрыт в последней строке (как вы написали в AS Editor)
[script appendString:@" -e 'end tell'"];
и кстати во второй последней строке tell application AppPath to
часть не нужна.
Не используйте генерацию кода. Просто не надо. Если вы думаете, что вам нужно генерировать код, вы делаете это неправильно. osascript и NSAppleScript позволяют передавать параметры в существующие сценарии AppleScripts.
Для чего-то такого простого, как открытие файла, вам вообще не нужен AppleScript. использование NSWorkspace или же LaunchServices.