WordPress for iOS が WordPress 3.0 でクラッシュする
-
WordPress for iOS を WordPress 3.0 のマルチサイト環境で利用しています。
このとき WordPress for iOS に新しいブログを追加する段階でクラッシュします。
またその後は WordPress for iOS を一旦削除して、もう一度インストールしない限りは、WordPress for iOS を起動する瞬間にクラッシュするようになります。同様の事例を WordPress for iOS のフォーラムでいくつか見つけました。
http://iphone.forums.wordpress.org/topic/wordpress-crashes
http://iphone.forums.wordpress.org/topic/iphone-app-crashes-when-adding-a-blog
http://iphone.forums.wordpress.org/topic/on-ipad-application-shuts-down
たぶん探せばもうちょっと見つかります。環境は WordPress 3.0 のネットワーク機能を有効にしたもので、iOS 4.0 を iPhone 4 で利用しています。
WordPress for iOS はバージョン 2.5 です。不便なので簡単に調べてみたところ、おそらく問題の原因が判明しましたのでご報告します。
まずこの問題は WordPress for iOS にではなく、WordPress 3.0 の本体にあります。
問題は “blogid” として XML-RPC から得られる情報が、仕様上 “string” 型であるはずなのですが、特定条件下でこれが “int” 型として得られることにあります。
WordPress for iOS は “NSString” 型としてこの blogid を扱っていますが、実際に得られているのは “NSNumber” 型の値なので、実行時エラーが起きていました。http://codex.wordpress.org/XML-RPC_wp
ここでいう “blogid” とは、このドキュメントの “wp.getUsersBlogs” の “Return Values” にある、“array” – “struct” – ”string blogid” で、ドキュメント上は XML-RPC の “string” 型になっています。
そこで WordPress 本体の “xmlrpc.php” ファイルを “blogid” で検索すると、7件見つかりますが、その6つめ、477行目に注目します。http://core.trac.wordpress.org/browser/tags/3.0/xmlrpc.php
ここでは “blogid” に “$blog_id” を格納していますが、この “$blog_id” はその前を追っていくと整数値であることが分かります。
ここでこの477行目、
'blogid' => $blog_id,
となっている部分に少し書き足して、
'blogid' => (string) $blog_id,
とし、明示的に型変換を行います。
そうすると “blogid” には文字列型に変換された “$blog_id” が格納されることになります。この変更を加えた結果、無事に WordPress for iOS を利用できました。
以上がこの問題についてぼくが分かったことで、実装次第ですがこれは他のクライアントアプリケーションでも WordPress 3.0 が利用できない可能性を示唆しています。
もし同じように困っている方がいらっしゃいましたらお試しください。
- トピック「WordPress for iOS が WordPress 3.0 でクラッシュする」には新たに返信することはできません。