本ページでは、jailbreakme.com で jailbreak 済みの iPod touch 用のアプリケーションを FreeBSD で開発する環境を構築する手順を解説します。 構築手順は、 Building - iphone-dev - Google Code の内容に従って作業を行うだけです。 ただ、残念ながら FreeBSD native 環境ではうまく構築できなかった[1]ので、 FreeBSD 上の Gentoo Linux 環境上に iPod touch 用のクロス開発環境を構築しました。
[1] odcctools のコンパイルで上記ページのコメント欄にあるのと同様のエラーで失敗しました。
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 の仮想環境の提供を主目的としているそうです。 そのため、/ 以下のファイルシステム一式がインストールされます。
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}
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 コマンドは端末を切り離すことができるので、 リモートからログインして作業する場合も重宝します。
クロス開発環境の動作確認のために、 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. のサイトにはクラスの説明など非常に参考になる情報が満載です。