Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC


ウィジェットプラグインの作成

ウィジェット単独では、アプリケーションに直接アクセスしたり、配信された通知を受け取ったり、ディスクからファイルを読み取ったりできません。このようなやり取りを可能にするには、プラグインを用意する必要があります。プラグインをウィジェットから利用できるように、プラグインへのインターフェイスを実装することが要求されます。このインターフェイスは、AppleScriptコマンドを発行するなど、最適な方法でアプリケーションと通信します。

アプリケーションに対するインターフェイスを提供する新たな手段としてウィジェットを使用することができます。ウィジェットフロントエンドを提供すれば、ユーザはアクセスしやすく邪魔にならない簡単な手段でアプリケーションと対話できるようになります。

ウィジェットプラグインはCocoaバンドルです。Xcodeでは、「Cocoa Bundle」テンプレートを使用してバンドルを作成します。プラグインコードに、ウィジェットのプラグインインターフェイスを実装します。

注: 本章を読み進める前に、“アクセスキーの指定”を読み、ウィジェットのアクセスキーの詳細を学習しておきましょう。

注: Xcode Toolsをインストールしたあと、ハードディスクの/Developer/Examples/Dashboard/に置かれる“Fortune”のサンプルは、ウィジェットプラグインを作成する方法を示しています。

The Fortune Widgt

In this section:

ウィジェットプラグインインターフェイス
ウィジェットプラグインバンドル
その他の参考情報


ウィジェットプラグインインターフェイス

ウィジェットプラグインは、Dashboardの中から使用できるように、必ず次のメソッドを実装しなければなりません。

- (id) initWithWebView:(WebView*)webview

Dashboardは、プラグインが最初にロードされたときにこのメソッドを呼び出します。この時点で、主要クラスを初期化し、重要なデータ構造体を準備しておきます。

プラグインがウィジェットとや取りできるように、「Using Objective-C From JavaScript」と「WebScripting」の定義に従って、WebScriptingインターフェイスを実装する必要があります。このインターフェイスに加え、次のメソッドも実装する必要があります。

- (void) windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject

このメソッドが実装されていれば、Dashboardはウィジェットのロード前にこのメソッドを呼び出し、ウィジェットで使用するJavaScriptオブジェクトを追加できるようにします。JavaScriptオブジェクトは、JavaScriptとObjective-Cの間の橋渡しを行い、ウィジェットに対するインターフェイスの役割を果たします。メッセージを受け取ったら、受け取ったばかりのWebScriptObjectを対象にsetValue: forKey:を呼び出すことで自分のオブジェクトにバインドし、名前を与えます。正しく動作するためには、WebScriptObjectにバインドするオブジェクトはWebScriptingインターフェイスを実装する必要があります。

次の例は、メソッドの実装に含めるべき内容を示します。

- (void) windowScriptObjectAvailable:(WebScriptObject *)windowScriptObject
{
    [windowScriptObject setValue:self forKey:@"MyWindowScriptObject"];
    ...
}

受け取ったwindowScriptObjectにバインドしたオブジェクトのメソッドはすべて、指定したキーを介してJavaScriptの中でウィジェットから使用できます。ただし、それらのメソッドは、自動的に与えられたデフォルトの名前となるので、そのObjective-C名によってはわかりにくいことがあります。デベロッパの方は、わかりやすい名前を付けるための次のメソッドを実装することをお勧めします。

+ (NSString *)webScriptNameForSelector:(SEL)aSelector

次の例では、プラグインクラスを、渡されたwindowScriptObjectという名前のWebScriptObjectにバインドしています。オブジェクトのキーはMyWindowScriptObjectです。したがって、次のようにすれば、ウィジェットの中からMyWindowScriptObjectクラスに属する任意のメソッドを呼び出せます。

<html>
<head>
...
<script>
...
function someFunction()
{
    ...
    if (MyWindowScriptObject)
    {
        MyWindowScriptObject.someMethod(someArg);
    }
    ...
}
...
</script>
</head>
...
</html>

たとえば、この方法を使用してDashboardへのウィジェットのロードが終了したことをプラグインに通知することが可能です。それには、ウィジェットのロード完了時に呼び出す関数を用意します。この関数から、指定した任意のメソッドを呼び出すようにします。

<html>
...
<body onload='MyWindowScriptObject.someMethod(someArg)'>
...
</body>
</html>

ウィジェットプラグインバンドル

Xcodeの標準情報プロパティファイルリストには、プラグインが正しく動作するために必要な情報のほとんどが含まれています。ただし、NSPrincipalClassプロパティに対する値は指定する必要はあります。

バンドルのコンパイルが完了したら、運用の準備ができたことになります。ウィジェットからプラグインを使用できるように、ウィジェットバンドルのルートレベルに置きます。

ウィジェットをアクティブにしたときにプラグインがロードされるようにするには、プラグインをウィジェットの Info.plist ファイルに指定しておく必要があります。プロパティPluginを追加し、値としてバンドルの名前を示す文字列を指定します。

その他の参考情報

Documentation.Dashboardプラグインについてさらに詳しくは、Apple Applications Documentationの『Dashboard Reference』を参照してください。

ウィジェットのJavaScript環境とウィジェットプラグインのCocoaバンドルの橋渡しの詳細については、「Using Objective-C From JavaScript」を参照してください。

ウィジェットプラグインをコンパイルするときには、PowerPCとインテルベースのMacintoshコンピュータで使用できるように、必ずUniversalプラグインとしてビルドしてください。Universal Binaryの詳細については、テクニカルQ&A QA1451: Intel-Based Macs, Dashboard, Safari, and You、および『Universal Binary Programming Guidelines, Second Edition』を参照してください。





Last updated: 2006-08-07




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
Get information on Apple products.
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Copyright © 2007 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice