Как сгенерировать osascript с условием if else, которое можно запустить как NSAppleScript

Я пытаюсь запустить приложение и открыть в нем файл с помощью 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

0

Решение

Блок Tell должен быть закрыт в последней строке (как вы написали в AS Editor)

[script appendString:@" -e 'end tell'"];

и кстати во второй последней строке tell application AppPath to часть не нужна.

0

Другие решения

Не используйте генерацию кода. Просто не надо. Если вы думаете, что вам нужно генерировать код, вы делаете это неправильно. osascript и NSAppleScript позволяют передавать параметры в существующие сценарии AppleScripts.

Для чего-то такого простого, как открытие файла, вам вообще не нужен AppleScript. использование NSWorkspace или же LaunchServices.

0

По вопросам рекламы [email protected]