タイトル鶴薗賢吾のCocoaはやっぱり!出張版》補足-#5-Mac OS X 10.1の新機能 2(その2)カテゴリーCocoa, Mac OS X, 鶴薗賢吾のCocoaはやっぱり!出張版
作成日2001/10/21 23:58:31作成者新居雅行
■ アバウトパネル
Cocoaアプリケーションでは、著作権等を表示するアバウトパネルが予め用意されていて、何もしなくてもプロジェクトの設定などにしたがって以下のように表示されます。

図. 通常のアバウトパネル
 

Mac OS X 10.1では、「 Credits.html 」というファイルをリソースとして組み込んでおくと、このファイルの中身がアバウトパネル内に表示されます ( 「 Credits.rtfd 」や「 Credits.rtf 」も可能 )。

アバウト画面にサポートページへのリンクを付けるのもウェブページを作るのと同じ要領でリンクを作っておくだけです。「 mailto: 」も使えますので、メールアドレスを組み込むのも簡単です。クリックするとデフォルトのメーラーが起動して、メール作成画面になります。また、このHTMLには、画像を貼り付けておけば、それも表示されます。

アプリケーションへの組み込みは、Project Builderで、プロジェクトウィンドウのResourcesの下に画像を含めた全てのファイルをドラッグ&ドロップしてビルドするだけです ( 言語毎にファイルを組み込むことももちろん可能です )。

図. アバウトパネル用のHTMLファイルのプロジェクトへの組み込み
 

組み込んだ結果ですが、中身が短い場合は左のようになり、長い場合はスクロール表示されるようになります。

図. HTMLを組み込んだ場合のアバウトパネル
 

■ NSURL / NSURLHandle
NSURL/NSURLHandleは、HTTPSをサポートしたので、暗号化を行うサーバーとのコネクションが可能になりました。

また、サーバーへ送信するHTTPヘッダーを加工することができるようになっています。NSNURLHandleのwriteProperty : forKey : でユーザーエージェントの指定などを追加できますし、Basic認証のかかっているページへのアクセスも可能になります。

// HTTPヘッダーを加工するサンプル
NSURL *url = [ NSURL URLWithString : @"http://www.apple.com/" ];
NSURLHandle *handle = [ url URLHandleUsingCache : NO ];
NSData *pageData;

[ handle writeProperty : @"MyApp/1.0"
forKey : @"User-Agent" ]; // ユーザーエージェント
[ handle writeProperty : @"Basic xxxx"
forKey : @"Authorization" ]; // Basic認証のページへのアクセス

pageData = [ handle resourceData ];

ただし、私の実験では、あいかわらずHTTPのプロキシーサーバーはサポートを行っていないようです。システム環境設定のネットワークの設定には従いますが、プロキシーの設定は無効ですので注意が必要です。プロキシーも考慮する場合は、NSURLは現状使えません。

■ マルチスクリーンサポート改善
スクリーンの情報を扱うNSScreenは、マルチスクリーンのサポートが改善されました。スリープから復帰した際に、スクリーンが追加されたり削除されたりすることがありますが、これを正しく扱うようになっています。このため、NSScreenから得た情報をアプリケーション側に長期的にコピーを持つことはお奨めできません。画面の情報が必要な場合は、その時点でNSScreenのメソッドを使って参照するという方法にしなければなりません。

■ クリップボード ( ペーストボード ) への画像の出力
私の見落としでなければ、リリースノートには書いていないのですが、クリップボードへの画像の出力に関しても、Mac OS X 10.1では改善が行われています。ただし、これはフレームワーク側の改善ではなく、OS側の改善なのかもしれません。

Cocoaでは、以下のコードで画像データをクリップボードへ出力できます。

// 画像をクリップボードに出力するサンプル
NSImage *img = [ 画像を生成するメソッド ];
NSPasteboard *pb = [ NSPasteboard generalPasteboard ];

[ pb declareTypes : [ NSArray arrayWithObjects : NSTIFFPboardType, nil ]
owner : nil ];
[ pb setData: [ img TIFFRepresentation ] forType : NSTIFFPboardType ];

このコードでは、NSImageからTIFF形式で画像データを取得して、クリップボードに出力しています。しかしながら、CarbonやClassicアプリケーションは、PICT形式でないと画像を受け取れないため、Mac OS X 10.0.4まででは、Cocoaアプリケーション間でしか画像のやり取りはできませんでした ( Cocoaアプリケーションで、PICT形式のデータを作ることは不可能ではありませんが、やや面倒なのです )。

それが、Mac OS X 10.1では、TIFFで書き出すだけで、クリップボードにはPICT形式のデータも自動的に組み込まれるようになりました。そのため、先程のコードのままで、CocoaアプリケーションからCarbonやClassicアプリケーションへ画像をクリップボード経由で渡すことはができるようになりました。

NSImageクラスにPICTRepresentationというメソッドがあってもいいのではないかと思うんですけどね。

■ まとめ
このようにCocoaのフレームワークは、小幅ながらも役に立つ改良が行われています。是非あなたのアプリケーションでも使ってみてください。
[鶴薗賢吾]
関連リンクCocoaはやっぱり!