iPhone OS 3.0 betaが公開されたので完全に周回遅れです。それでもやっぱりIntelMacが家にないのでWindowsで開発したいんです。1.xのときのメモが完全に役に立たない状態になってたので2.0でできないかを調べたらすごいのを見つけました。
http://www.maxhorvath.com/documents/programming_for_iphone_using_l/eclipse-iphone-cdt.pdf
あなたが神か。
eclipseで開発できる!iPhone SDKだとXcodeしばりでなかなか環境になじめず苦労するんですよね。早速この神の書を実行してみました。
Jailbreakとかの説明とかをすると説明が長くなってしまうのでここではその説明を省きます。以下の前提がある人を対象者としています。
- 自分の使っているiPhone/iPod touchのバージョンがわかっている
- 自力でjailbreakしてsshを追加し、有効にできる
- cygwinやLinuxをなんとなく使ったことがあり基本的なlinuxコマンドはわかる
- G4でLeopard買ったのにIntel縛りでiPhone SDK使えなかった人(俺のことか)
すみませんが、jailbreakとかcygwinの詳しい説明は別で調べてください。なお、この手順ではcygwinのユーザはmakoto_kwになっているのでコマンドは適宜置き換えて実行してください。またなんとなく自分の使っているfirmwareでやってみました。デバイスと同じfirmwareを使わないといけないかどうかはよく知りません。
Jailbreak
これをやらないと始まらないというか。エミュレータがないので動作確認できない。
- jailbreakする
- OpenSSHとiPhone 2.0 toolchainを入れる
- Cydiaから普通に
- SSHのON/OFFやSpringBoardの再起動にはBossPrefsがおすすめ
cygwinのインストール
iPhoneにはまったく依存しない手順
- セットアップを落とす
- cygwinのインストール
- setup.exeを実行
- Install from Internetを選択
- Root DirectoryはC:\cygwinで進める
- Install ForはAll Users (デフォルトのまま)
- Default Text File TypeはUnix / binary (デフォルトのまま)
- Local Package Directoryは適当なところ
- 接続はDirect Connectionで行けると思う
- Download Siteはなんとなく資料に沿って http://mirrors.kernel.org を選択する
- Select Packagesの画面になったらDevelを開く
- autoconf, binutils, bison, flex, gcc-code, gcc-g++, makeを選択する*1
- Develを閉じてNetを開く
- opensshとopensslを選択する
- Nextを押してインストールを待つ
- cygwin起動してみる
- C:\cygwin\Cygwin.batを実行しhomeディレクトリをつくっておく
iPhone 2.0 Toolchainに必要なファイルをかき集める
共通のtoolchainを取得・展開し、firmwareに含まれるソースを抜き出して追加するという作業。
- iPhone 2.0 Toolchainを入れる
- iPhone 2.0のfirmwareからファイルを抜き出す
- dmgファイルの中を抜き出すツールとしてPowerISOを使う*6
- PowerISOを起動しdecrypted.dmgを開く、3つのディレクトリをiphone-2.0-toolchainへコピーする
- decrypted.dmg/usr/lib
- を下記にD&D
- C:\cygwin\home\makoto_kw\iphone-2.0-toolchain\iphone-fs\usr
- decrypted.dmg/System/Library/Frameworks
- decrypted.dmg/System/Library/PrivateFrameworks
- を下記にD&D
- C:\cygwin\home\makoto_kw\iphone-2.0-toolchain\iphone-fs\System\Library
iPhone 2.0 Toolchainのコンパイル
一番トラブルが起こりそうなところ
- make-toolchainを編集
- cygwin上でもwindows上(改行コードはLFのみにすること)でも良いのでC:\cygwin\home\makoto_kw\iphone-2.0-toolchain\make-toolchainをテキストエディタで開く
- SUDO変数を設定しているところをコメントアウトする(19~24行目あたり)*7
#case "${OSTYPE}" in
#*win32*)
#*cygwin*)
# export SUDO='echo "";'
# ;;
#esac
- $SUDOを削除する(6カ所)*8)
- symlinkを追加する*9
ln -sf libstdc++.6.0.4.dylib libstdc++.dylib
の下に以下を追加(45行目あたり)
ln -sf ../../System/Library/Frameworks/IOKit.framework/Versions/A/IOKit libIOKit.A.dylib
ln -sf libIOKit.A.dylib libIOKit.dylib
ln -sf libSystem.B.dylib libSystem.dylib
ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libBLAS.dylib libblas.dylib
ln -sf libbz2.1.0.4.dylib libbz2.1.0.dylib
ln -sf libbz2.1.0.4.dylib libbz2.dylib
ln -sf libSystem.dylib libc.dylib
ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libBLAS.dylib libcblas.dylib
ln -sf libcharset.1.dylib libcharset.1.0.0.dylib
ln -sf libcharset.1.dylib libcharset.dylib
ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libLAPACK.dylib libclapack.dylib
ln -sf libncurses.5.dylib libcurses.dylib
ln -sf libSystem.dylib libdbm.dylib
ln -sf libSystem.dylib libdl.dylib
ln -sf libedit.2.dylib libedit.2.9.dylib
ln -sf libedit.2.dylib libedit.dylib
ln -sf libexslt.0.dylib libexslt.dylib
ln -sf libform.5.4.dylib libform.dylib
ln -sf libiconv.2.dylib libiconv.2.4.0.dylib
ln -sf libiconv.2.4.0.dylib libiconv.dylib
ln -sf libicucore.A.dylib libicucore.dylib
ln -sf libSystem.dylib libinfo.dylib
ln -sf libipsec.A.dylib libipsec.dylib
ln -sf ../../System/Library/PrivateFrameworks/Accelerate.framework/Frameworks/vecLib.framework/libLAPACK.dylib liblapack.dylib
ln -sf libSystem.dylib libm.dylib
ln -sf libncurses.5.dylib libncurses.dylib
ln -sf libobjc.A.dylib libobjc.dylib
ln -sf libSystem.dylib libpoll.dylib
ln -sf libSystem.dylib libproc.dylib
ln -sf libSystem.dylib libpthread.dylib
ln -sf libresolv.9.dylib libresolv.dylib
ln -sf libSystem.dylib librpcsvc.dylib
ln -sf libsqlite3.0.dylib libsqlite3.0.8.6.dylib
ln -sf libsqlite3.0.dylib libsqlite3.dylib
ln -sf libstdc++.6.0.4.dylib libstdc++.6.dylib
ln -sf libtidy.A.dylib libtidy.dylib
ln -sf libutil1.0.dylib libutil.dylib
ln -sf libxml2.2.dylib libxml2.dylib
ln -sf libxslt.1.dylib libxslt.dylib
ln -sf libz.1.2.3.dylib libz.1.dylib
ln -sf libz.1.2.3.dylib libz.dylib
ln -sf libz.1.dylib libz.1.1.3.dylib
- make-toolchainを実行
-
cd ~/iphone-2.0-toolchain
./make-toolchain
神の書では2時間くらいかかるかもと書いてあり自分の環境では1時間くらいかかった
Hello World!
- 神の書を便りにhelloworldのコードを作成する
- cygwinでmakeる
- iPhone/iPod touchに転送する
- HelloWorldを実行する
- アプリをコピーしてもiPhoneを再起動しないと表示されなったりする
- BossPrefsなら、Power->Fast ReSpringでSpringBoardを再起動できる
- helloworldを実行

天才すぎる!(自画自賛時につかうおたけび)
つかれたのでeclipse + CDTのセットアップはまた今度にします。すごく手順を変更している気がするんだけど神はMacOSXでやってないか?(dmgの抜き出しのキャプチャとかどうみてもMac)最後にVMWareで実行しただけなんじゃないか疑惑。
神の書ではmakeが入ってなかったけどtoolchainのコンパイルで必要だったので追加
iTunesでfirmwareを更新している場合、Windowsなら場合%APPDATA%\Apple Computer\iTunes\、Tigerなら~/Library/iTunes/iPod Software Updatesになる
http://www.felixbruns.de/iPod/firmware/ とか
神の書ではvfdecryptをコンパイルする手順だったがうまくコンパイルできなかった。vfdecrypt.exeがあったのでそのまま使った
各firmwareのDMG暗号化キーはここにまとまっている http://theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys
神の書ではツールとしてPowerISOがTransmacが記載されており、Transmacは15日試用期間、PowerISOは未登録だとファイル作成ができない、300MB以上のファイルは編集できないという制限がある。decrypted.dmgが300MB以下だったのでPowerISOを選択 http://www.poweriso.com/download.htm
winodwsであればsudoを実行しないようにするという分岐処理なのだが以下のようなエラーになったので
./make-toolchain: line 21: syntax error near unexpected token `)'
./make-toolchain: line 21: `*cygwin*)'
なんかexport SUDO=’echo "";’のこしても$SUDO …を実行したときにそのコマンド1行全体がechoになっているように見えたので・・・不安要素はなくす
どう考えてもdmgからWindowsのファイルシステムにコピーした瞬間にsymlink消えています。ありがとうございました。symlinkしてないとHelloWorldAppのコンパイルで以下のエラーがでる
/usr/local/bin/arm-apple-darwin9-ld: /usr/local/iphone-sysroot/usr/lib/libobjc.dylib truncated or malformed object (mach header extends past the end of the file)
/usr/local/bin/arm-apple-darwin9-ld: /usr/local/iphone-sysroot/usr/lib/libz.1.dylib truncated or malformed object (mach header extends past the end of the file)
/usr/local/bin/arm-apple-darwin9-ld: /usr/local/iphone-sysroot/usr/lib/libstdc++.6.dylib truncated or malformed object (mach header extends past the end of thefile)
神の書ではHelloWorldApp.hがなかったので作成、画像がないとmakeで怒られるのでSDKのサンプルからpng画像を拝借