Execute o AppleScript do aplicativo Cocoa

É possível executar um código AppleScript dentro de um aplicativo Cocoa?

Eu tentei class NSAppleScript, mas sem sucesso.

Além disso, a Apple permite isso?

Você mencionou que xcode não salvou o script no caminho de resources do seu aplicativo. Está correto. Você tem que dizer ao xcode para fazer isso. Primeiro adicione o script compilado ao seu projeto. Em seguida, abra o seu alvo e encontre a ação “Copiar resources do pacote”. Arraste seu script da lista de arquivos para essa ação. Desta forma, o seu script é copiado para os resources do seu aplicativo automaticamente, para que você não precise fazer isso manualmente.

Sempre que eu uso um AppleScript compilado em uma aplicação de cacau eu, 1) adiciono o script ao projeto, 2) crio uma nova class para controlar o AppleScript, 3) uso o método init abaixo para a class, e 4) arrasto o script para a ação “Copiar resources do pacote” do destino.

 - (id)init { NSURL *scriptURL = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource:@"applescripts" ofType:@"scpt"]]; if ([self initWithURLToCompiledScript:scriptURL] != nil) { //attempt to load the script file } return self; } 

Resolvido!

O XCode não estava salvando meu arquivo de script no caminho de resources do aplicativo. Para executar um código AppleScript do Aplicativo Cocoa, use isto:

 NSString* path = [[NSBundle mainBundle] pathForResource:@"ScriptName" ofType:@"scpt"]; NSURL* url = [NSURL fileURLWithPath:path];NSDictionary* errors = [NSDictionary dictionary]; NSAppleScript* appleScript = [[NSAppleScript alloc] initWithContentsOfURL:url error:&errors]; [appleScript executeAndReturnError:nil]; [appleScript release]; 

Da documentação da Apple https://developer.apple.com/library/mac/technotes/tn2084/_index.html

 - (IBAction)addLoginItem:(id)sender { NSDictionary* errorDict; NSAppleEventDescriptor* returnDescriptor = NULL; NSAppleScript* scriptObject = [[NSAppleScript alloc] initWithSource: @"\ set app_path to path to me\n\ tell application \"System Events\"\n\ if \"AddLoginItem\" is not in (name of every login item) then\n\ make login item at end with properties {hidden:false, path:app_path}\n\ end if\n\ end tell"]; returnDescriptor = [scriptObject executeAndReturnError: &errorDict]; [scriptObject release]; if (returnDescriptor != NULL) { // successful execution if (kAENullEvent != [returnDescriptor descriptorType]) { // script returned an AppleScript result if (cAEList == [returnDescriptor descriptorType]) { // result is a list of other descriptors } else { // coerce the result to the appropriate ObjC type } } } else { // no script result, handle error here } }