2012-06-13 3 views
7

Я пытаюсь выполнить копирования/вставки для моего к последнему активному приложению, вот мой код:Applescript из Mac App говорит: «Ожидаемый конец строки, но найден U201c » u201d»

NSString *appleScriptSource = [NSString stringWithFormat:@"\ntell application \"%@\" to activate\ntell application \"System Events\" to tell process \"%@\"\nkeystroke \"v\" using command down\nend tell", [lastApp localizedName], [lastApp localizedName]]; 

NSDictionary *error; 
NSAppleScript *aScript = [[NSAppleScript alloc] initWithSource:appleScriptSource]; 
NSAppleEventDescriptor *aDescriptor = [aScript executeAndReturnError:&error]; 

проблема заключается в том, что на некоторых компьютерах она работает просто отлично, но на других она не моя ошибка выхода из ошибки, возвращаемый executeAndReturnError является:.

2012-06-13 17:43:19.875 Mini Translator[1206:303] (null) (error: { 
    NSAppleScriptErrorBriefMessage = "Expected end of line but found \U201c\"\U201d."; 
    NSAppleScriptErrorMessage = "Expected end of line but found \U201c\"\U201d."; 
    NSAppleScriptErrorNumber = "-2741"; 
    NSAppleScriptErrorRange = "NSRange: {95, 1}"; 
}) 

Я не могу показаться, чтобы выяснить, что это значит или почему это происходит.

Мы попытались скопировать сгенерированный код яблочного скрипта в редактор Apple Script, и здесь он работает отлично.

Мое приложение изолировано от песка - я добавил идентификаторы связки для ключа «com.apple.security.temporary-exception.apple-events» для приложений, которые я хочу поддерживать.

Любые предложения?

+0

\ U201c и \ u201d оба представляют кавычки (слева направо соответственно). [Ввод котировок на клавиатуре] (http://en.wikipedia.org/wiki/%22#Typing_quotation_marks_on_a_computer_keyboard) Поэтому я убежден, что вы не избегаете цитаты «правильно». Играйте с форматом строки и персонажи, с которыми вы ускользаете. – erran

+0

Ну, я перевел юникоды, но я не могу понять, что пошло не так. Я пробовал играть с яблочным скриптом, но он не работает - странная часть заключается в том, что она работает некоторые маки. –

+0

Даже при использовании простых приложений, таких как «активное приложение», возникает та же ошибка. –

ответ

5

Я угадываю, что \ u201c и \ u201d являются красными сельдевыми и просто представляют собой умные кавычки вокруг двойной кавычки в сообщении об ошибке, создаваемом скриптом apple, и ваша проблема заключается в локализованном имени последнего приложения, которое вы форматируете в сценарий. Я не уверен, почему вы можете увидеть это на одной машине, а не на другой.

Например, если имя было «Некоторое» приложение, тогда двойные кавычки не совпадают, так как они будут введены в середину строки с двойными кавычками. Возможно, вы захотите заменить любые двойные кавычки в имя с символом «\», что позволит избежать их.

например.

NSString *esc = [[lastApp localizedName] stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];
+0

этот ответ применим также при решении проблем с котировками в json. Юникоды были действительно красными сельдевыми. –

+0

«Красная селедка» в моем случае отсутствовала \ n, прежде чем «end tell» –

Смежные вопросы