NSURLCacheでGoogleのトップページをキャッシュすると落ちる件
原因が特定できなくて困っていた、Googleのトップページでだけ発生する落ちバグがあったわけですが、なんとなく原因が特定できたくさい。
ちなみにこれは次のような現象。
- Googleのトップページ(http://www.google.co.jp/)の内容を保存しておき、通信しないでUIWebViewで表示しようとすると落ちる。
- キャッシュの仕方はNSURLCacheでやろうと、別の方法を使っても発生する現象は同じ。
- 落ちるのはHTTPProtocol::createStreamのあたり。起きているのはEXC_BAD_ACCESS
あちこちのサイトをキャッシュしてみても、上記現象が起きるのはなぜかGoogleだけ。Googleとは言っても、ニュース(http://news.google.co.jp/)では大丈夫だったりします。
さらに、EXC_BAD_ACCESSは通常過剰releaseによって解放済みのメモリにアクセスすると起きるものですが、いくらretainかましても改善しませんでした。過剰releaseならGoogle以外でも発生するだろうし、ランダム要素があるなら http://www.google.co.jp/ で100%発生するというのはおかしいので、やはりGoogleさんのサイト構造に起因するものとして調べてみました。
とはいってもソースもないライブラリの中で起きてる例外なので調べようもなく、できることといえばファイルの構成をよくよくみてみるくらい。じーっ、とよく見てみると、試してみたサイトの中で、唯一 http://www.google.co.jp/ だけHTML5のmanifestファイルが含まれていました!
試しにmanifest指定を削ってみます。
落ちない! これか!
理屈はわかりませんが、とりあえずmanifest指定を削ってしまうとよいようです。
(2/21追記)
いろいろいじってるうちにまた落ちるようになりました。違うらしい。