iPhoneをUSB経由でマウントする

最近のUbuntuは優秀でiPhoneをマウントして中身を操作できる。写真を取り出すだけじゃなくて、アプリケーション内の書類にもアクセスできる。GoodReader内の書類にアクセスできるのがかなり便利。
Macの場合、iTunesを介すればアプリケーション内の書類にファイルを書きこむことはできるか取り出すことはできない。
こういったソフト

を使えばできないことはないが、有料だったり使いにくかったり…なので無料でできないか調べてみる。
(ちなみに以下の方法でiPhone4S iOS5.01 non-JBをマウントできました)


追記:GoodReaderに限る場合、別の方法あり。一番下に追加。

前調べ(読み飛ばして大丈夫)

どうやらUbuntuではimobiledeviceというライブラリが使われているらしいので調べてみる。

とりあえず、Sources and Dependenciesのところからlibimobiledevice-1.0.6.tar.bz2を落としてきて、なんとかビルドする。これだけじゃマウントはしてないので、ifuse-1.1.1.tar.bz2も落としてきていろいろオプションを試してなんとかビルドする。そしてifuseでマウントしてみる。そうすると、iOS4.1のiPhone3GはマウントできるのだがiOS5.01のiPhone4Sはマウントできない。libimobiledevice-1.1.0.tar.bz2も試してみるができない…なのでUbuntuで使われているimobiledeviceを使うことにする。

インストール

MacPortsの代わりにyumなどを使えば、とくにMacに限るわけではないと思う)

まずusbmuxdが必要だと言われる。MacPortsにあったのでMacPortsのをインストールした。

sudo port install usbmuxd +universal

その他fuseとか必要だと思うので、configureで怒られたら、そのたびにMacPortsにパッケージが無いか探して見ること。

つぎにlibimobiledevice。Ubuntu上(僕は11.04)で

apt-get source libimobiledevice

を実行する。(多分10.04はだめ。なるべく新しいもので)
そうするとlibimobiledevice-1.1.0というフォルダができているので、tarにしてscpでMacに転送するなどする。
Macで展開したら

./configure --without-swig --prefix=${HOME}/opt

python bindingがあるとビルドがうまく通らないのでwithout-swigをつけている。prefixは各自の好みで。僕は${HOME}/optに自分でビルドしたものを置いている。なにかエラーが出る場合にはいろいろ試して見ること。
そしたら

make && make install

これでlibimobiledeviceのインストールは完了。

次はifuse。Ubuntuのものからでも、オリジナルのソースでも大丈夫だった。展開したらconfigure

PKG_CONFIG_PATH=${HOME}/opt/lib/pkgconfig ./configure --prefix=${HOME}/opt

前に付いている環境変数は、${HOME}/optにlibimobiledevicをインストールしたから必要なもよう。上手く行かなければいろいろ試して見ること。そしたら、

make && make install

これでifuseのインストールも完了。

マウント

マウントするときは

ifuse <mount_point> [OPTIONS]

でできる。

iOS5.01でもマウントできる。しかしアプリケーションの書類は見れない。残念。写真は取り出せる。他にもなぞのディレクトリがちらほら。

アプリケーションの書類もなんとかしてアクセスできないものか。
改めてlibimobiledevice - A cross-platform software library and tools to communicate with iOS devices nativelyのページを見てみると、

Use iFuse with the "--appid APPID" argument to mount a document folder of an application and simply manage your files as needed.

http://www.libimobiledevice.org/

とあるではないか!

GoodReaderをマウントしたいので

ifuse --appid com.goodiware.GoodReader <mount_point>

と試してみるとマウントできる。すばらしい。
ファイルを書きこもうとすると何か怒られるけれどちゃんと書きこまれているみたいだ。


なんで時間無いのにこんなことに時間を費やしてしまったのだ…

GoodReaderに限る場合

GoodReaderに限るのならもっと簡単(いやどうだろう…)にマウントができることが分かった。

このページ

は脱獄済みのiPhoneにUSB経由でSSHする方法なのだが、試しにGoodReaderのWebDavで試したらどうかと思い試してみたら上手くいった。別に脱獄している必要はない。

usbmuxd自体はインストールされているべきかどうか分からないが、このページで言っていることをGoodReade向けに書き換えると

これで以上。実際にはiPhoneWIFIがOFFになっていても、GoodReaderの共有さえ立ち上がっていればできる。

tcprelay.pyは同じファイルにあるusbmux モジュールを利用している。環境変数PYTHONPATHを設定すればusbmux.py usbmux.pycをそこに置いておける。