作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试从沙盒 AppKit 应用程序执行 Automator 工作流程。
最小示例 + github repo :
NSOpenPanel * panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:NO];
[panel setCanChooseFiles:YES];
[panel setCanChooseDirectories:NO];
[panel setAllowedFileTypes:[NSArray arrayWithObject: @"com.apple.automator-workflow"]];
NSInteger result = [panel runModal];
if (result == NSFileHandlingPanelOKButton) {
NSURL * workflow = [[panel URLs]objectAtIndex:0];
NSLog(@"selected url %@", workflow);
NSError * error = nil;
[AMWorkflow runWorkflowAtURL:workflow withInput:[NSArray arrayWithObject:workflow] error:&error];
if(error) {
NSLog(@"Error while executing workflow %@", [error localizedDescription]);
}
}
根据我目前对 AMWorkflow API 的理解,我假设它使用 Mach IPC 在单独的 Automator Runner 进程中执行工作流。
这就是我向我的应用添加以下权利的原因:
<key>com.apple.security.temporary-exception.mach-lookup.global-name</key>
<array>
<string>com.apple.AutomatorRunner</string>
<string>com.apple.Automator</string>
</array>
但显然 Automator Runner 尝试连接回调用应用程序,但失败并显示以下错误消息:
Automator Runner(2717) deny mach-lookup /Users/pbrc/Library/Developer/Xcode/DerivedData/AMWorkflowCaller-arjgkslqihljquelyvybmpsnljrn/Build/Products/Debug/AMWorkf
0 libsystem_kernel.dylib 0x00007fff96ce9686 mach_msg_trap + 10
1 liblaunch.dylib 0x00007fff8db637c4
2 liblaunch.dylib 0x00007fff8db624d9 bootstrap_look_up3 + 69
3 liblaunch.dylib 0x00007fff8db62609 bootstrap_look_up2 + 40
4 Foundation 0x00007fff8f4acffe -[NSMachBootstrapServer portForName:options:] + 102
5 Foundation 0x00007fff8f4b84cb +[NSConnection connectionWithRegisteredName:host:usingNameServer:] + 30
6 Automator Runner 0x0000000100001a51 -[AMRunnerDelegate processArguments] + 487
有什么想法吗?
最佳答案
简单的答案是 AMWorkflow API 无法在沙盒应用程序中工作。最近推出了一个替代 API,它适用于沙盒应用程序:
NSUserAutomatorTask executeWithInput:completionHandler:
使用此 API,您可以执行位于应用程序脚本文件夹中的自动化脚本:
/Users/USERNAME/Library/Application Scripts/BUNDLENAME.APPNAME
有一个重要的警告:尽管该方法有“输入”参数,但在 10.8.3 12D75 之前的 Mac OS 版本上,任何输入都不会传递到自动化工作流程(这是/曾经是一个错误):
NSUserAutomatorTask * task = [[NSUserAutomatorTask alloc] initWithURL:workflow error:&error];
if(error) {
NSLog(@"Error while creating script task %@", [error localizedDescription]);
}
[task executeWithInput: @"this will never reach your workflow" completionHandler:^(id result, NSError *error){
if(error)
NSLog(@"Error while executing workflow %@", [error localizedDescription]);
}];
关于objective-c - 将 AMWorkflow 与沙盒应用程序结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12149529/
我正在尝试从沙盒 AppKit 应用程序执行 Automator 工作流程。 最小示例 + github repo : NSOpenPanel * panel = [NSOpenPanel op
我是一名优秀的程序员,十分优秀!