2010年 5月 改訂
スタンドアロンの F-Script 環境 F-Script.app には、起動した時点で既に、数多くの Mac OS X フレームワークが自動的にリンクされている。 そのため、F-Script さえあれば、それ以上何ら特別な設定をすることなく、Mac OS X の能力を素早く調べたり、これらのフレームワークを直接使ったりすることができるのだ。 これはとても便利で役に立つ。
その使い方を示す具体的な例として、最近 Mac OS X の標準フレームワークに追加された Image Kit にアクセスしてみよう。 F-Script.app を起動して、以下のコードを、コンソールに直接入力して欲しい:
IKPictureTaker pictureTaker orderFront:nil
Image Kit のコンポーネントの一つ IKPictureTaker
の
パネルが最前面に現れる。これを使うと様々なことができるが、とりわけ、ファイルシステム上の画像ファイルをブラウズしたり、(iSight 内蔵の)デジタルカメラで、スナップショットを撮ったりすることができるのだ。
こうして一度欲しい画像を入手してしまえば、F-Script コンソールに以下の命令を入力すれば、pictureTaker からその画像オブジェクト
(NSImage
のインスタンス)を
受け取ることができる:
myImage := IKPictureTaker pictureTaker outputImage
この F-Script コードは、「myImage」という名前の変数を定義して、pictureTaker に保持されている NSImage オブジェクトを、その変数に代入している。
以下の表は、F-Script.app に自動的にリンクされるフレームワークの一覧だ:
フレームワーク | 特徴 |
Address Book | 連絡先データベースへのアクセス |
Application Kit | ユーザーインタフェース |
Automator | オートメータプラグインシステム |
Calendar Store | カレンダデータベースへのアクセス |
Collaboration | アイデンティティ情報の管理 |
Core Animation | グラフィカルアニメーション |
Core Audio Kit | オーディオユニットカスタムビュー |
Core Data | データモデルの管理(オブジェクトの永続化、等々) |
Core Image | 画像処理 |
Core Location | コンピュータの地理的位置の決定 |
Core Video | ビデオ画像処理 |
Core WLAN | ワイアレスネットワーク接続の管理 |
Disc Recording | CD や DVD に書き込み記録する |
Disc Recording UI | CD や DVD に書き込み記録する為の UI 部品 |
Disk Arbitration | ハードディスクイベントのモニター及び管理 |
Exception Handling | 例外処理の構成管理 |
Foundation Kit | コアサービス(ルートクラス、文字列処理、コレクション、ネットワーク、ファイル管理、スレッド処理 等々) |
Image Capture Core | スキャナ、カメラ等のディジタル機器接続 |
Image Kit | イメージのブラウズや操作の為の UI 部品 |
Input Method Kit | 文章入力方式の管理 |
Instant Message | インスタントメッセージユーザーのオンライン状態管理 |
IOBluetooth | ブルートゥース機器への接続 |
IOBluetooth UI | ブルートゥース機器接続の為の UI 部品 |
JavaVM | Java 環境へのアクセス |
Open Directory | オープンディレクトリ情報の管理 |
OSA Kit | OSA 準拠スクリプトの管理及び実行 |
Preference Panes | システムリファレンスアプリケーション用プラグインの実装 |
PDF Kit | PDF 関連の処理 |
PubSub | RSS や ATOM 関連の処理 |
QT Kit | QuickTime コンテンツの表示や加工 |
Quartz Composer | Quartz Composer 部品へのアクセス |
Quartz Filters | グラフィクスコンテクストに対するフィルター効果の適用や管理 |
Screen Saver | スクリーンセーバの実装 |
Scripting Bridge | スクリプタブルアプリケーションの制御 |
Security Foundation | ユーザー権限の管理 |
Security Interface | ユーザー権限管理の為の UI 部品 |
Server Notification | サーバーを使ったノーティフィケーションの送受信 |
Sync Services | 複数のコンピュータや機器間でのデータの同期処理 |
WebKit | Web コンテンツの描画処理 |
Xgrid Foundation | クラスター管理 |
標準的な Cocoa のテクニックを使えば、読者の作ったものも含めて、その他のフレームワークやバンドルを動的にロードすることができる。 NSBundle クラスを使うと便利である。 例えば、次のコードは、Mac OS X デベロッパーツールと一緒にインストールされるフレームワークの一つ SenTesting Kit をロードする:
(NSBundle bundleWithPath:'/Developer/Library/Frameworks/SenTestingKit.framework') load
64 ビットで実行する必要のあるフレームワークやバンドルは、64 ビットモード(デフォルト)で動作中の F-Script の中からロードする必要がある。 そして、32 ビット対応のバンドルをロードする為には、F-Script も 32 ビットで起動しなければならない。 (これをやるには、他のアプリケーションの場合と同じ様にすれば良い:F-Script.app に関するファインダインスペクタを開き、「32 ビットモードで開く」にチェックを入れる)
[訳注]ファインダインスペクタ: ファインダで、F-Script.app の上で右クリック >「情報を見る」を選択すると開く「F-Script.app の情報」というパネル
ロードしたいバンドルは、自動ガベージコレクションモードでしか動作しないかもしれないし、参照カウンタモードでしか動作しないかもしれない。 F-Script がそれに応じた正しいモードで動いていることを確認する必要がある。さもなければ、そのバンドルはロードされないだろう。 F-Script のリファレンスパネルを使えば、そのメモリ管理モードを設定することができる。
バンドルのロード中に問題が起きたら、load
の換わりに、loadAndReturnError:
を使うと良い。エラーに関する情報を得ることができる。
下のコードで、F-Script ではどうすればこのメソッドを使うことができるのかを示す。
この例では、TextEdit アプリケーションをロードしようとするが、それがロード可能なバンドルではない為、エラーが返ってくる:
errorPointer := FSObjectPointer objectPointer.
(NSBundle bundleWithPath:'/Applications/TextEdit.app') loadAndReturnError:errorPointer.
errorPointer at:0.
この上の例の最後の命令は NSError オブジェクトを返し、F-Script シェルで実行すると、そのエラーに関する情報を表示する:
Error Domain=NSCocoaErrorDomain Code=3584 UserInfo=0x2004990e0
"The bundle "TextEdit" couldn't be loaded because its executable isn't loadable."
追加したいフレームワークやバンドルを F-Script リポジトリの中に置けば、F-Script の起動時に、それらを自動的にロードすることができる。
このリポジトリは、F-Script が初めて起動された時に F-Script.app によって創られる。
このリポジトリは、デフォルトでは ~/Library/Application Support/F-Script
(~
はホームディレクトリ)にあるだろう。
バンドルやフレームワークを ~/Library/Application Support/F-Script/classes
ディレクトリに置けば、F-Script.app に、それらを自動的にロードさせることができる。
こうする代わりに、それらのフレームワークやバンドルを指すシンボリックリンクを、ファイルシステムの中に創るだけでも良い。例えば、F-Script リポジトリから SenTesting Kit へのリンクを創るには、 次の F-Script コードを実行すれば良い。
NSFileManager defaultManager createSymbolicLinkAtPath:
'~/Library/Application Support/F-Script/classes/SenTestingKit.framework' stringByExpandingTildeInPath
withDestinationPath:'/Developer/Library/Frameworks/SenTestingKit.framework'
error:nil
もう一つ別の方法として、隠しスクリプトに、明示的なローディングコードを書き加えても良い。 F-Script は、起動時に、F-Script リポジトリのトップレベルで「fs_latent」という名前のテキストファイルを探す。 もしこのファイルが存在するなら、このファイルには、ブロックリテラルのテキスト表現が記されていなければならない。 このブロックが、隠しスクリプトなのだが、この時インスタンス化されて、評価される。 このスクリプトを使えば、F-Script 対話セッションが開始される前に、やりたいことを何でも実行することができる。 例えば、SenTesting Kit をロードする為には、もし隠しスクリプトで他には何もしないのであれば、「fs_latent」ファイルには、ブロックで囲まれたローディングコードだけを書けば良い:
[(NSBundle bundleWithPath:'/Developer/Library/Frameworks/SenTestingKit.framework') load]
Mac OS X の Objective-C ベースのフレームワークで定義されたほとんどの定数や列挙子は、F-Script でも、それらのシンボリック形式のまま直接利用できるが、 現時点では、F-Script は動的に新しい定数を見つけ出すことはしないので、もし(たぶん、動的にロードしたフレームワークで定義されている)使いたい定数が、F-Script 内で、 シンボリック形式では提供されていなければ、直接その本来の値に立ち返るべきである。 通常、対象のフレームワークの、公開されたヘッダーファイルを見れば、定数の定義が見つかるはずだ。
Copyright © 2009-2010 Philippe Mougin
Translation-ja © 2012 Hideo Haga[日本語版]