加速度センサーを使ったアナログ感覚なゲーム「Labyrinth LE」

App Storeには多数のアプリが無償で公開されていますが、なかでも私のイチ推しは「Labyrinth LE」。早い話、ボールを穴に入れるゲームですが、内蔵の加速度センサーを使うところがポイント。微妙な傾きにも反応するので、子供の頃遊んだポケットゲーム (正確な名前を忘れました) のように遊べます。いや、ホント、時が経つのを忘れてしまいますよ。

さて、今回はiPhone 3Gに搭載されたシステム「OS X iPhone 2.0」について。デフォルトの状態では、カーネルのバージョンやらディレクトリ構造やらを知る術はないが、いわゆる"脱獄 (JailBreak)"を敢行すれば、ある程度の情報は把握できるようになる。先日「PwnageTool」がリリースされたので、早速試してみた次第だ。

まずはSSHの仕込みから

まずは簡単にJailBreakの流れを。脱獄七つ道具 (?) の1つ「PwnageTool」をGETしたあと、iPhone 3G / iPod touchを接続、PwnageToolを起動してファームウェアの書き換えを行えばいい。作業の具体的な手順については、こちらのレポートを参照してほしい。DFUモードに入るところ (電源ボタンとホームボタンを10秒間押し続けたあと電源ボタンだけ放す) と、ファームウェアイメージを指定するとき[option]キーを押すことさえ間違えなければ、スムーズに進むはずだ。

万事うまく行けば、iPhone 3G / iPod touchのホーム画面に「Cydia」というアプリが現れる。これはDebian GNU/Linux由来の「apt」をベースとしたパッケージ管理ツールで、アプリケーションを選び画面の指示に従って操作するだけでダウンロードとインストールをこなしてくれるというスグれものだ。

まず筆者が行ったのは、「OpenSSH」と「MobileTerminal」のインストール。ユーザ名は「root」、パスワードは1.x時代と同じ6文字 (念のため伏せておきます。iPod touchの場合、高山植物を意味する英単語でOKでした) を入力すればログイン完了、これでいよいよ探検のスタートだ。

なお、今回はiPod touchを対象に作業を行った。様子を見て問題なさそうであれば、iPhone 3GでもJailBreakを行い、iPhone 3G独自の部分を探ってみようと考えている。

「PwnageTool」を使い、iPod touchを"脱獄"。Cydiaを使い、OpenSSHのインストールを行った

OS X iPhone 2.0でわかったこと

OS X iPhoneは、Mac OS Xと同様下層レイヤー (Darwin) に各種フレームワークとGUIをかぶせた複層構造になっていることは、以前お伝えしたとおり。そこでディレクトリ構造など基本部分の説明は省き、バージョン2.0以降に加えられた変更点を中心に分析を進めてみた。以下、新しくわかったこと / 確認できたことを順不同・箇条書きで列挙してみよう。

  1. カーネルはDarwin 9.3.1 (xnu-1228.6.76)
  2. スクリーンショットは「/private/var/mobile/Media/DCIM/」ディレクトリ以下に保存される
  3. /System/Library/Frameworksディレクトリに、Mac OS Xにはない「CoreLocation.framework」がある。位置情報取得用のフレームワークか?
  4. 各種言語に対応する入力システム (計16種) は、/System/Library/TextInputディレクトリに保管されている。日本語用は「TextInput_ja.bundle」
  5. TextInput_ja.bundleの辞書ファイルは、約12MBの「kanadict.dat」。ローマ字の綴りに対応するかな/漢字の変換候補が、大量に収められている
  6. /var (/private/var) ディレクトリ以下がユーザ領域。/var/mobileがMac OS Xの/Users/ユーザ名に相当する。基本的なディレクトリ構造は以前と変わらない模様
  7. App Storeのダウンロードには、/var/mobile/Media/Downloadsディレクトリが一時領域として使用される。ダウンロード完了後は、/var/mobile/Applicationsディレクトリ以下へインストールされる

紙幅が尽きたので、今回はここまで。次回は特定のテーマに絞り、OS X iPhone 2.0のちょっとアレ、もといレアなTIPS情報などをお届けしたいと考えている。

SSHでiPod touchへログイン、「hostinfo」コマンドを実行したところ