Weinre でリモートデバッグ


技術評論社記事いわく PhoneGap のリモートデバッグ用に Weinre を使うと良いとのこと。ワイナリーと読むらしい。まずは入れてみよ。:-)

環境構築

まずは nodejs.org から最新版(0.8.20)をダウンロードする。pkg を実行すると Node.js が /usr/local/bin/nodeに、npm が /usr/local/bin/npm にインストールされる。

ターミナルで npm を実行して weinre をインストールする。

npm install weinre


npm コマンドの実行した場所に node_modules が作成される。その中にある weinre を実行すると、サイトが起動される。

./node_modules/weinre/weinre
2013-02-19T10:20:09.273Z weinre: starting server at http://localhost:8080


http://localhost:8080 にアクセスしてみて、こんな画面(↓)が表示されれば weinre のインストールは完了。:-)



Xcode 側に戻って weinre でデバッグするプロジェクトの www/index.html に次の1文を埋め込む。# 以降は weinre サーバ接続時の識別子になるので、その都度、適当に変更する必要がある、とのこと。


最後にアプリを起動して、Safari から接続する。こんな(↓)の画面が出たらOKっぽい。:-)

http://localhost:8080/client/#HelloCordova


タブを切り替えると Firebug っぽいページでHTML要素とかCSSとかを確認できる。


カーソル位置に合わせて 画面の色が変わるところも Firebug っぽい。

URL を間違った場合

URLの #以下のスペルを間違えてたときの画面がこれ。あれ?って悩んでしまった自分がはずかしー。target not connected になったならURLの入力ミスとかを疑いましょ。^^;)>

weinre の安定性?

ログを見たかんじ events.js のバグ?それとも weinre が不安定?もちっと調べなきゃだね。^^;

ともかく weinre が落ちたときはアプリ側も再起動しないと接続できないっぽい。素直にアプリを再接続しましょ。:-)

./weinre
2013-02-21T06:41:19.563Z weinre: starting server at http://localhost:8080

events.js:71
        throw arguments[1]; // Unhandled 'error' event
                       ^
---------------------------------------------------------
error: Error: socket hang up
---------------------------------------------------------
stack: 
                     http.js:1360 - createHangUpError()
                     http.js:507  - OutgoingMessage._writeRaw()
                     http.js:476  - OutgoingMessage._send()
                     http.js:749  - OutgoingMessage.write()
                     http.js:882  - OutgoingMessage.end()
                 response.js:108  - res.send()
   HttpChannelHandler.coffee:91   - handleGet()
         MessageQueue.coffee:78   - MessageQueue._updated()
                     node.js:244  - startup.processNextTick.process._tickCallback()

おまけ

2.3.0 から Cordova.plist が config.xml に変更されてた

技術評論社記事は2.0.0?での執筆らしく Cordova.plist にパラメータを追加してね!と書いてあるけど、2.3.0 から plist が config.xml に変更になったので plist はない。ちょいと探してしまった。^^;)>

外部リソースをロードするため,PhoneGapプロジェクトのデフォルトの設定ではwhitelist rejectionが発生して動作しません。Xcodeで該当のプロジェクトを開き,ResourcesのCordova.plistの,ExternalHostsに追記を行う必要があります。

第3回 weinreを使ったiOS/Androidアプリの動作検証


さらに 2.3.0 以前だと ExternalHosts に localhost とかエントリを追加する必要があったらしいけど、2.3.0 以降はデフォルトがワイルドカード(全部OK)になったらしく、まんま接続されるようになったらしい。

By default the external hosts are wild-carded so you should be able to connect to any host. There are further configuration options via the config.xml.

ExternalHosts in Dreamweaver App
Weinre で使えるブラウザ

FireFox (18.0.2) で接続したらダメーって言われた。Webkit ベースのブラウザでしか動作しないらしい。:-p

確認環境

  • Mac OSX 10.7.5
  • Xcode 4.6
  • PhoneGap 2.4.0
  • node.js 0.8.20
  • Weinre 2.0.0-pre-HA5N9T49
  • Safari 6.0.2
  • FireFox 18.0.2