ページ

2009年8月19日水曜日

NSHTTPCookieStorage による Cookies.plist 保存を調べる

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク

さて Webkit でのクッキーのハンドリング方法が大体わかったので、クッキーを処理するクラスの設計に入ろう。

設計にあたっては気になる点が2つある。
一つは、Foudation には既に NSHTTPCookieStorage が存在するので、新しいクラスは互換性を持たせるかどうか。

ここで互換性と言っているのは、NSHTTPCookieStorage と同じメソッドを実装するくらいの意味。これは採用・不採用共に強い理由が見当たらないのでとりあえず互換性を持たせる方向でいこう。ただし今のところ NSHTTPCookieStorage のサブクラス化はしない。


もう一つは保存(永続化)方法をどうするか。Safari(すなわち NSHTTPCookieStorage)では plist へ保存していた。plist へ保存するにしてもどういうタイミングでどんな方法で行うのか(plist書き出し自体は NSArray 等のメソッドで簡単にできる)。


そんなこともあり Safariの Cookies.plist を調べているうちに次のことがわかった。

(1) テンポラリファイルを作成し、書き出し後に Cookies.plist を置き換えている

Cookie を扱うサイトを表示させると同時に、Cookiesフォルダを見てみると一瞬テンポラリファイルが作成されているのが分かった。恐らく書き出し後に Cookies.plist へ切り替えている。


(2) 一定間隔で書き出しが行われている

フォルダを眺めていると Cookieを扱うサイトを表示する毎に保存するのではなく、数十秒から1分程度の間隔で書き出しが行われている(ように見えた)。


なるほど。plistという簡単なファイルを使っていることもあり、ファイルの破損防止や負荷軽減の為にこんな工夫をしているのか。なお SQLiteならもっと無頓着にできそうだ(この辺りの管理は SQLiteがやってくれるので)。



NSHTTPCookieStorage の保存方法について情報が無いかネットで調べてみる。

するとソースコードがあった。

mySTEP - NSHTTPCookieStorage.m


とは言っても Apple提供の Foudation のそれではなく、QuantumSTEP のソースコード(正確には mySTEPのコード)。

QuantumSTEP は携帯端末向けの GNUStep をベースとしたアプリケーションプラットフォーム。
QuantumSTEP




紹介記事)マイコミジャーナル OSX ハッキング!
出なけりゃ作る!? Cocoa風味の"サブサブノート"

おお、こんなプラットフォームがあったとは知らなかった。

iPhone SDKとの比較もある。
QuantumSTEP vs iPhoneSDK


----
次回はソースコードを読み解いてみよう。