2012-06-13 9 views
7

Sto cercando di eseguire una copia/incolla per il mio al all'ultima applicazione attiva, qui è il mio codice:Applescript da Mac App dice "fine linea previsto, ma ha trovato 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]; 

Il problema è che su alcuni computer funziona bene, ma su altri fallisce mio output di errore da errore che viene restituito da 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}"; 
}) 

io non riesco a capire che cosa significa o perché succede

Abbiamo provato a copiare il codice generato dallo script Apple nell'editor di Apple Script, e qui funziona perfettamente.

La mia app è in modalità sandbox - ho aggiunto gli identificativi del gruppo per la chiave "com.apple.security.temporary-exception.apple-events" per le app che voglio supportare.

Qualche suggerimento?

+0

\ u201c e \ u201d entrambi rappresentano citazioni (sinistra/destra, rispettivamente). [Digitando le virgolette su una tastiera] (http://en.wikipedia.org/wiki/%22#Typing_quotation_marks_on_a_computer_keyboard) Quindi mi fa credere che non stai sfuggendo alla citazione "correttamente. Gioca con il formato della stringa e i personaggi che ti stanno sfuggendo – erran

+0

Beh, ho tradotto gli unicodes ma non riesco a capire cosa va storto Ho provato a giocare con lo script di apple ma non funziona, la parte strana è che funziona alcuni mac. –

+0

Anche fare dei semplici pennarelli come "attiva questa app" produce lo stesso errore. –

risposta

5

Immagino che \ u201c e \ u201d siano falsi dati e rappresentino semplicemente virgolette intelligenti attorno a una virgola doppia nel messaggio di errore prodotto dallo script Apple e il problema si trova con il nome localizzato dell'ultima applicazione che si sta formattando nella sceneggiatura. Non sono sicuro del motivo per cui potresti vederlo su una macchina e non su un'altra.

Ad esempio, se il nome fosse "Qualche" App, le virgolette doppie risulterebbero non corrispondenti poiché finirebbero immesse nel mezzo di una doppia stringa tra virgolette. Potresti provare a sostituire le virgolette doppie nel nome con '\ "' che li sfuggirà.

ad es.

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

questa risposta è applicabile anche quando si affrontano problemi di citazione in json. gli unicodes erano davvero delle false piste. –

+0

La "falsa pista" nel mio caso era mancante \ n prima di 'end tell' –