2009-05-15 8 views
2

私は最近、OS X用のシステムサービスを書くことに興味を持ってきましたが、私はサービスを宣伝するアプリケーションがないので、私はスタンドアロンシステムサービスを作成する必要があります。 System Servicesに関するAppleのドキュメントはそのままですが、スタンドアロンサービスに関するドキュメントは存在しません。Xcodeでスタンドアロンシステムサービスを適切にレイアウトするにはどうすればよいですか?

これまでのところ、バンドルパッケージからビルドされたXcodeプロジェクトは、HashifyService.hHashifyService.mという2つのソースがあります。ここで私が持っているテストコードは次のとおりです。

- (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; 
} 

、これが私のInfo.plistNSServicesエントリです:

<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> 

私はその後、サービスバンドルを構築し、それを適切に検出し、Iれる~/Library/Services/に置きますサービスを使用するオプションが与えられています。ただし、サービスをアクティブにすると、エラーが発生し、コンソールにログに記録されます。

​​

私は間違っていますか?

+0

このチュートリアルを確認してください。基本的には、あなたのバンドルの拡張子を ".services"として指定し、フォーカスを得るのを防ぐplistキーを追加する必要があります。 http://www.notesfromandy.com/2013/04/05/writing-a-service-bundle/ –

答えて

9

main()機能が必要です。それはNSRegisterServicesProvider()を使用してサービスを登録し、実行ループに入る必要があります。それはthe documentationです。