FreeBSD で iPod touch のクロス開発環境を構築

本ページでは、jailbreakme.comjailbreak 済みの iPod touch 用のアプリケーションを FreeBSD で開発する環境を構築する手順を解説します。 構築手順は、 Building - iphone-dev - Google Code の内容に従って作業を行うだけです。 ただ、残念ながら FreeBSD native 環境ではうまく構築できなかった[1]ので、 FreeBSD 上の Gentoo Linux 環境上に iPod touch 用のクロス開発環境を構築しました。

[1] odcctools のコンパイルで上記ページのコメント欄にあるのと同様のエラーで失敗しました。

ports/emulators/linux_dist-gentoo-stage3 をインストール

FreeBSD native 環境では iPod touch 用のクロス開発環境を構築できないので、 最初に ports から linux_dist-gentoo-stage3 をインストールします。 ここでは、Gentoo Linux 環境を /usr/local/gentoo-stage3 に構築します。

 freebsd# cd /usr/ports/emulators/linux_dist-gentoo-stage3
 freebsd# make LINUXBASE=/usr/local/gentoo-state3 \
          GENTOO_OPTIMIZED=i686
 freebsd# make install

なお、linux_base と linux_dist の違いは、 linux_dist は Linux の仮想環境の提供を主目的としているそうです。 そのため、/ 以下のファイルシステム一式がインストールされます。

iPod touch 用クロス開発環境を構築

Gentoo Linux 環境上に iPod touch 用のクロス開発環境を構築します。 Linux システム向けの /dev と /proc の準備をするため、 FreeBSD 側で次のような作業を事前に行います。

 freebsd# mkdir /usr/local/gentoo-state3/{dev,proc}
 freebsd# mount_devfs devfs /usr/local/gentoo-state3/dev
 freebsd# mount_linprocfs linprocfs /usr/local/gentoo-state3/proc
 freebsd# chroot /usr/local/gentoo-state3 bash

本当は、Linux 環境向けの devfs.rules を記述して適用するべきですが、 個人の環境なので気にしないことにします。

あとは、 Building - iphone-dev - Google Code の内容に従って作業を完了します。 ただし、このままでは、 Issue 66 - iphone-dev - Google Code と同じエラーでうまくコンパイルできませんので、 TargetConditionals.h.patch を /usr/local/arm-apple-darwin/include/TargetConditionals.h に当てます。

 gentoo# cd /usr/local/arm-apple-darwin/include
 gentoo# patch -p0 < TargetConditionals.h.patch

PATH の指定と Makefile の記述を楽にしたい場合は、次のコマンドを実行します。 .profile の PATH に /usr/local/arm-apple-darwin/bin を追加すると、 iPod touch 向けのソフトウェアを作成するときに便利になります。

 gentoo# cd /usr/local/arm-apple-darwin/bin
 gentoo# for file in /usr/local/bin/arm-apple-darwin-*; do
 gentoo#   ln ${file} `echo ${file} | \
             sed 's#/usr/local/bin/arm-apple-darwin-##g'`;
 gentoo# done
 gentoo# export PATH=/usr/local/arm-apple-darwin/bin:${PATH}

iPod touch 用クロス開発環境を FreeBSD から便利に使うための設定

FreeBSD から Gentoo Linux 上に構築した iPod touch 用のクロス開発環境にアクセスするには、 root になって chroot コマンドを使う必要があります。 この場合、root ユーザで作業をすることになり、とても不便です。 また、Gentoo Linux 上の環境を整備するのも面倒です。 そこで、FreeBSD と同じユーザ ID とグループ ID で Gentoo Linux 環境上にユーザを作成します。 これ以降、ユーザ ID を "kouichi(1001)"、 グループ ID を "platypus(1001)" として説明しますが、 適宜自分の環境に応じて読み替えてください。

 gentoo# useradd -u 1001 -g 1001 kouichi
 gentoo# mkdir /home/kouichi
 gentoo# chown -R kouichi /home/kouichi
 gentoo# chgrp -R platypus /home/kouichi

次に、mount_nullfs コマンドを使って FreeBSD 上の /home/kouichi を Gentoo Linux 上の /home/kouichi にマウントします。

 freebsd# mount_nullfs /home/kouichi /usr/local/gentoo-stage3/home/kouichi

最後に、xterm などの端末から chroot コマンドを使って Gentoo Linux 環境に切り替えます。 これで、ソースコードなどの編集は、FreeBSD 上で作業して、 コンパイルだけは Gentoo Linux 上で行えるようになります。 ホームディレクトリを共有できるので、いろいろと便利です。

 freebsd# chroot -u kouichi /usr/local/gentoo-stage3 bash

なお、私の場合は、 ports/security/sudo と ports/sysutils/screen を使って、次のようにして作業しています。

 freebsd% screen sudo chroot -u kouichi /usr/local/gentoo-stage3 bash

screen コマンドは端末を切り離すことができるので、 リモートからログインして作業する場合も重宝します。

iPod touch 用アプリケーションの動作確認

クロス開発環境の動作確認のために、 Think IT の特集「完全先取り! iPod touch 開発」の第3回 iPod touchで動作するテキストエディタはこう作る!サンプルソースをコンパイルしてみます。 なお、iPod touch のアプリケーションは、 Objective-C 言語で記述します。 私にとっても初めて使うプログラミング言語なので、「Objective-C Mac OS Xプログラミング」という書籍を購入して勉強しています。 とりあえず、これ一冊で言語の仕様と雰囲気はつかみとれます。

 freebsd% screen sudo chroot -u kouichi /usr/local/gentoo-stage3 bash
 gentoo$ cd ~
 gentoo$ tar zxf MyEditor.tar.gz
 gentoo$ cd MyEditor
 gentoo$ make

コンパイルが成功したら、iPod touch に転送します。 ここでは、iPod touch の IP アドレスを 192.168.1.23 としています。 転送が完了したら、iPod touch を再起動すると画面上に MyEditor が表示されると思います。

 freebsd% scp -pr MyEditor root@192.168.1.23:/Applications/MyEditor.app/

iPod touch のホーム画面上の MyEditor をタップするとキーボードとテキスト入力領域を含む動作画面が表示されます。 なお、Google Code iPhone/iTouch で参考となるソースコードが入手できます。 また、Erica Sadun. iPhone. iPod touch. Macintosh. and More. のサイトにはクラスの説明など非常に参考になる情報が満載です。

Google