昔の発表「URL Loading Systemを拡張する」(初出 2004/04/10)
過去の発表資料は自分のサイトに置いていたのですが、やる気が足りないまま移行しそこねてアクセスできなくなっているので、整理がてらここに書いてみます。
資料はslideshareに上げてみました。
このころは、プロジェクタもなかったりで印刷した紙の資料を配っていました。時代ですねえ。2004年とか、Macは10.3 Pantherだったころです。
NSURLProtocolとは
NSURLProtocolは名前からはわかりづらいのですが、URLでのリソースへのアクセスの実体を担当しているクラスです。みんな大好きNSURLConnectionも、実際にはウラでNSURLProtocolに「このURLのデータを取ってきてね」と頼んでいるのです。
(この図の例だと client がNSURLConnectionのインスタンスに当たる)
このNSURLProtocolのおもしろい点は、自分でNSURLProtocolのサブクラスを定義してURLアクセスへの仕組みを変えることができることです。すると、そのアプリケーション(プロセス)内の全体に反映され、WebView/UIWebViewやNSURLConnectionなどのふるまいをコントロールすることができます。
たとえば、
- 独自のURL scheme ("http ://host/path/to"の"http"のところ)を定義する
- file :// , http :// へのアクセスを置き換え、または制限する
ということをするときに便利です。
最近だと、iOSのアプリで使われているなーという印象です。
興味を持った方は、"iOS Advent Calendar 2011 5日目 / NSURLProtocolの使い方"という記事がすばらしいのでぜひ読んでください。
自分はどんなものを作ったか
ブラウザだけでCGIを実行し、Webアプリを使えるSandTripというSIMBLプラグインを作っていました。ユーザは自分が知ってる限りでは5人いたかどうか、て感じでしたが個人的には愛用していました。が、Safariのどっかのバージョンでうまく動かなくなってしまい、そのままフェードアウト。
また、この発表でのサンプルは未対応のプロトコルを追加しようということで、メールサーバへアクセスするIMAP4プロトコルに対応したクラスを追加し、WebViewでIMAPサーバにアクセスする、というデモを行いました。ちなみに、IMAPサーバへのアクセス自体はPantomimeというライブラリを使いました。
GNUMail、ぜんぜんバージョン変わってないですねぇ。
振りかえってみた感想
もう8年も前ですが、意外と覚えてるなーという印象。当時はドキュメントの無さっぷりに苦戦しましたが、NSURLProtocolまわりのクラス群のデザイン自体はきれいにまとまってて好きです。