在这里我的评论是一个非常基本的例子。
这是向您展示如何注册服务,甚至是 Automator 的。以及为什么我认为你可能无法做你想做的事。
使用 Xcode 我创建了一个新项目。
.m 文件中的代码:
//
// AppDelegate.m
// testServiceExample
//
// Created by Mark Hunte on 02/09/2013.
// Copyright (c) 2013 Mark Hunte. All rights reserved.
//
#import "AppDelegate.h"
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[NSApp setServicesProvider:self];//Registers a given object as the service provider.
NSUpdateDynamicServices();//Causes the services information for the system to be updated.
}
-(void) runAService:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString **)error {
if ( [[pboard types] containsObject:NSFilenamesPboardType] ) {
NSArray *files = [pboard propertyListForType:NSFilenamesPboardType];
NSLog(@" files %@", files);
}
[[NSApplication sharedApplication] terminate:nil];
}
@end
注意:
[NSApp setServicesProvider:self];//Registers a given object as the service provider.
NSUpdateDynamicServices();//Causes the services information for the system to be updated.
然后我将数组添加到应用程序 info-plist
<array>
<dict>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>Service Test</string>
</dict>
<key>NSMessage</key>
<string>runAService</string>
<key>NSSendTypes</key>
<array>
<string>public.item</string>
</array>
</dict>
</array>
<string>Service Test</string>
显示的菜单
<string>runAService</string>
在应用程序中运行的方法
<string>public.item</string>
服务将处理的对象
应用程序的第一次运行(双击会将服务注册到系统。但我确保它已在键盘快捷键中选中。
NSLog 的结果可以在 console.app 中看到,它将列出文件路径
因此,即使我可以使用默认值写入保存系统首选项服务中已注册应用程序的 plist 文件的内容添加项目。我怀疑如果没有上述任何一项,任何事情都会真正起作用。
显然,Automator 应用程序可以将正确的信息写入 plist 文件和runAservice方法。
服务工作流名称中的实际方法是:runWorkflowAsService。
考虑此事。您可以从命令行编写和构建应用程序。并让它运行你的python 但是它很麻烦。
有关服务的更多信息,请参阅此处的苹果文档