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っぽい。:-)
タブを切り替えると 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