Posted by & filed under 未分類.

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

この記事はAdobe AIR Advent Calendar 2013の19日に参加するために書きました!

AIR for iOSの開発をしているときに避けて通れないのが、実機でのデバッグ。最近(といってもここ何年も前からの話だけど)ではUSBデバッグなんかのデバッグツールも充実していて、かなり本気のアプリ開発にもAIRが使用される機会も多くなってきました。
しかしながら、iOSでUSBデバッグをしていると必ず遭遇する、何故か突然iPhone実機を認識しなくなる問題!

  • USBは接続されたままのはずなのに、認識されなくなる
  • バンドルIDなどは今まで使っていたものを変更していないにもかかわらず、「Invalid specified」などのエラーが出てインストールされなくなる
  • 見かけ上はインストールもうまくいったように見えてデバッグが開始されるけど動作が古いまま(つまりインストールされてない)

などなど、現象は様々ですが共通して言えることは、何故か突然USBデバッグがうまくいかなくなり、これを復活させるための方法の試行錯誤を求められるということです。

一旦この状況に陥ると、本来のデバッグ作業が進まないばかりか、いったいいつ復旧するかもわからなくなるので、開発に非常にストレスがかかります。
酷いときになるとUSBデバッグ最中にでも突然接続が切れてトレースを吐かなくなったりもするし。
「もしかしてケーブルの断線かな?」とケーブルの角度を変えてみたり、新しいケーブルだと比較的うまくいくような気がしてみたり、気分はピュアオーディオの世界1です。
まさかUSBが上手く認識しないんで進捗ダメですなんて報告するわけにもいかないし……。

というわけで、このAdventCalenderのネタ用に、タイトル通りこのUSBデバッグを百発百中にする方法を見つけちゃいました!

開発系ブログとしては前代未聞の、「技術的な検証はしてないからよくわからないけど、こうやったらうまく動いた」というアホっぷりで。
出し惜しみしてても仕方がないので、早速その方法を書きましょう。

それは、iTunesを立ち上げておくこと。

えっ?

えっ、まじで?

まじで。
あらかじめ、iTunesを立ち上げておきます。
ただし、ただ立ち上げておくだけではなく、いくつかの手順を踏む必要はあります。
今からその手順を書いておきます。

デバック開始、その前に

いきなりデバッグをはじめる前に、まず次のことを確認しておきます。

  • 最初はUSBを抜いた状態にしておく
    最初はUSBから外しておく。
  • iTunesからもiPhoneの接続を切っておく
    iTunesでも接続を切っておく。

いざデバッグ開始。この手順で

それでは早速デバッグ開始していきます。画面はFlashBuilderですが、おそらくFlashCCなどでも同じ手順でいけます。FlashDevelopやIntelliJ IDEAの場合はもしかしたらコマンドとか使ったりして手順通りいかないかもしれないですが、そこらへんは適宜対応してみてください。

デバッグ開始。まだ実機はUSBに繋がっていないので、当然こういう画面が出てきます。
USBに刺さってないので当然まだ表示されない。

ここでようやく実機をUSBに繋ぐ!
USBに繋ぐ。

iTunesからiPhoneの設定画面にいきます。
設定画面に行く。

「App」タブを押して、アプリの情報を表示させます。
Appタブを押す。
このとき、サムネイルに壁紙が表示されるまで少しだけ時間がかかりますが、待ちます。
実機がiOS7で、なおかつ動く壁紙にしている場合、iTunesのサムネイルには実機と違う壁紙が表示される場合がありますが、それは構いません。

この状態で「更新」を押すと、実機が表示されるので、選択して「OK」ボタンを押してデバッグ開始。
でてきた。

百発百中ううぅ〜〜!!

どうでしょうか。百発百中になりましたか?
実はこれでもまだ失敗するときがあります。
えっ?上の手順でやれば百発百中って言ってたのに百発百中じゃないんですか?嘘ついたんですか?嘘つきマンさんなんですか?

まあ悪意のあるほうに解釈すればそうかもしれませんが、まだ回避方法があります。結果的に百発百中になればそれでいいと考えます。

その回避方法は、USBデバッグでうまくいかなければネットワークデバッグに切り替えてみる、逆にネットワークデバッグでうまくいかなければUSBデバッグに切り替えてみる、というものです。

ちなみに、なぜこれでうまくいくのか、の自分なりの考察

よくわからないけど、こうやったらうまく動いたんですが、いちおう自分なりになぜこうしようと思ったのかの経緯だけでも書いておこうかと思います。

最初の頃は、突然USB接続された実機を認識しなくなって、闇雲にUSBの抜き差しを繰り返すだけでした。
あまりに原因がわからなさすぎるので、ピュアオーディオの世界に入りかけて、純金のUSBケーブルでも買ったほうがいいのかとも思いました。

ただ、冷静になって考えて見ると、USBケーブルの断線の可能性とか質の問題よりも、iPhoneが何らかの理由でAIRのUSB接続を拒んでいる問題の可能性のほうが高そうに思えました。
実際、「iPhone構成ユーティリティ」でログを眺めたときに、USB接続が認識されなくなった付近で「よくわかんないMacBook2が接続してこようとしてきたけど排除してやったぜ!!!」といった雰囲気のログがみかけられました。

そこでこのUSBの認識率をどうあげるか、いかにMacがiPhoneに接続できるかが勝負の鍵とにらんだわけですが、実際のUSBデバッグは自動化するために裏でこんな面倒臭い処理を行っていて(リンク先:"FDB による USB 経由のリモートデバッグ")、昔のAIRはこの自動化の仕組みがなくて、全て手動でipaを書き出して実機にインストールしてデバッグしとったんじゃよというわけであります。

そこで昔は手動でipaをインストールしてたときのことを思い出して、そういえばあのときはUSB経由のインストールで失敗することはなかった3よなあ、あのとき使ってたツールをもう一度見直してみるかという考えにいたったわけです。

手動インストールで使っていたツールは、iPhone構成ユーティリティというアプリか、もしくはiTunesというわけで、いろいろ試してみた結果、上記の手順だと失敗しないということがわかったわけです。
おそらく裏側で、うまいことMacがiPhoneのアプリにアクセス出来るようにiTunesが働いてくれてるのかなあと。

おしまいに

というわけでいかがだったでしょうか。
バリバリの技術系アドベントカレンダーで前代未聞の、技術的検証全くなしの「よくわからないけどこうやったらぼくの環境ではうごいた」程度の記事!
ぼくの環境ではめっちゃうまくいってるので、みなさんの環境でもうまくいくことを願っています!

脚注

  1. 【ピュアオーディオの世界】最高の音質にこだわるためなら黄金のUSBケーブルを使ったりするよくわからない……じゃなくて高尚な世界。 
  2. 【よくわかんないMacBook】それワイの開発機や……。 
  3. 【失敗することはなかった】実際には結構失敗することありました。 
このエントリーをはてなブックマークに追加