如何在Xcode中正确布置独立的系统服务?

时间:2009-05-15 01:09:36

标签: objective-c xcode macos cocoa

我最近有兴趣为OS X编写一些系统服务,但由于我没有应用程序来宣传服务,我必须求助于编写独立的系统服务。 Apple关于系统服务的文档虽然简洁,但其关于独立服务的文档并不存在。

到目前为止,我所拥有的是一个基于捆绑包构建的Xcode项目,其中包含两个来源HashifyService.hHashifyService.m。这是我的测试代码:

- (void) doServiceWork:(NSPasteboard *)pboard
            userData:(NSString *)userData
                 error:(NSString **)error {
  NSLog(@"Actually in the service now");
  NSString *pboardString;
  NSArray *types;

  NSLog(@"do test magic service! (pboard: %@, types: %@)", pboard, [pboard types]);


  NSString* outputString = @"It Worked";
  types = [NSArray arrayWithObject:NSStringPboardType];
  [pboard declareTypes:types owner:nil];
  [pboard setString:outputString forType:NSStringPboardType];
  [outputString release];
  return;
}

这是我NSServices中的Info.plist条目:

<dict>
<key>NSMenuItem</key>
<dict>
    <key>Menu item title</key>
    <string>HashifyTest</string>
</dict>
<key>NSMessage</key>
<string>doServiceWork</string>
<key>NSPortName</key>
<string>HashifyService</string>
<key>NSReturnTypes</key>
<array>
    <string>NSStringPboardType</string>
</array>
<key>NSSendTypes</key>
<array>
    <string>NSStringPboardType</string>
</array>
</dict>

然后我构建服务包并将其放在~/Library/Services/中,在那里被适当地检测到,我可以选择使用该服务。但是,在激活服务时,会发生错误并记录到控制台:

..../Hashify.service/Contents/MacOS/Hashify: cannot execute binary file 

我做错了什么?

1 个答案:

答案 0 :(得分:9)

您需要main()功能。这应该使用NSRegisterServicesProvider()注册服务并进入运行循环。那是the documentation