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にはまったく依存しない手順
-
セットアップを落とす
-
http://www.cygwin.com/setup.exe
をダウンロード
-
http://www.cygwin.com/setup.exe
-
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ディレクトリをつくっておく
-
C:\cygwin\home\makoto_kw
-
-
C:\cygwin\Cygwin.batを実行しhomeディレクトリをつくっておく
iPhone 2.0 Toolchainに必要なファイルをかき集める
共通のtoolchainを取得・展開し、firmwareに含まれるソースを抜き出して追加するという作業。
-
iPhone 2.0 Toolchainを入れる
-
http://www.pjtrix.com/iphone/articles/eclipse-cdt/iphone-2.0-toolchain.tgz
を落とす - C:\cygwin\home\makoto_kw\iphone-2.0-toolchain.tgzに置く
-
資料では好きな解凍ツールで解凍してね。と書いてあったが探すのが面倒なのでcygwin上で下記を実行し展開する(ブラウザによっては拡張氏がgzになることもあるのでファイル名の指定に注意)
-
cd ~tar xzvf iphone-2.0-toolchain.tgz
-
-
-
iPhone 2.0のfirmwareからファイルを抜き出す
-
iPhoneのfirmwareからシステムファイルを抜き出すという悪い手順。firmwareは使っているマシンのローカルにあったり
*2
、ネットにあったりする
*3 - とりあえず今使っているiPod touch 1Gの2.1のfirmwareを使う(iPod1,1_2.1_5F137_Restore.ipsw)
- firmwareの拡張子のipswをzipに変更し解凍する。中にいくつか.dmgファイルが出てくるが対象は一番ファイルサイズが大きいのが対象のはず
-
dmgは暗号化されているのでiphone-2.0-toolchainの中にあるvfdecrypt.exeを使って暗号化を解く
*4
。これには暗号化キーが必要だが、firmwareごとにキーが異なるので注意
*5chmod u+x ~/iphone-2.0-toolchain/src/vfdecrypt.exe ~/iphone-2.0-toolchain/src/vfdecrypt.exe -i ~/018-4116-2.dmg -o ~/decrypted.dmg -k \ 9714f2cb955afa550d6287a1c7dd7bd0efb3c26cf74b948de7c43cf934913df69fc5a05f
-
iPhoneのfirmwareからシステムファイルを抜き出すという悪い手順。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を追加する
*9ln -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のコードを作成する
-
とりあえずまとめました、
これ(sourcecode)
をC:\cygwin\home\makoto_kwにおいてください。
-
とりあえずまとめました、
-
cygwinでmakeる
-
cd ~/helloworld make clean make
-
-
iPhone/iPod touchに転送する
- cygwinで下記を実行
-
iPHONE_IPはiPhoneのIPに置き換える。パスワードを聞かれたらalpineと打つ。
ldid
は署名をつけるツールでiPhone 2.0 Toolchainでインストールされる。署名しないとiPhone 2.0上ではアプリは起動しない。export IPHONE_IP=192.168.0.1 cd ~/helloworld scp -r HelloWorld.app root@${IPHONE_IP}:/Applications/ ssh root@${IPHONE_IP} ldid -S /Applications/HelloWorld.app/HelloWorld
-
HelloWorldを実行する
- アプリをコピーしてもiPhoneを再起動しないと表示されなったりする
-
BossPrefsなら、Power->Fast ReSpringでSpringBoardを再起動できる
-
helloworldを実行
天才すぎる!(自画自賛時につかうおたけび)
つかれたのでeclipse + CDTのセットアップはまた今度にします。すごく手順を変更している気がするんだけど神はMacOSXでやってないか?(dmgの抜き出しのキャプチャとかどうみてもMac)最後にVMWareで実行しただけなんじゃないか疑惑。
*1
神の書ではmakeが入ってなかったけどtoolchainのコンパイルで必要だったので追加
*2
iTunesでfirmwareを更新している場合、Windowsなら場合%APPDATA%\Apple Computer\iTunes\、Tigerなら~/Library/iTunes/iPod Software Updatesになる
*3
http://www.felixbruns.de/iPod/firmware/
とか
*4
神の書ではvfdecryptをコンパイルする手順だったがうまくコンパイルできなかった。vfdecrypt.exeがあったのでそのまま使った
*5
各firmwareのDMG暗号化キーはここにまとまっている
http://theiphonewiki.com/wiki/index.php?title=VFDecrypt_Keys
*6
神の書ではツールとしてPowerISOがTransmacが記載されており、Transmacは15日試用期間、PowerISOは未登録だとファイル作成ができない、300MB以上のファイルは編集できないという制限がある。decrypted.dmgが300MB以下だったのでPowerISOを選択
http://www.poweriso.com/download.htm
*7
winodwsであればsudoを実行しないようにするという分岐処理なのだが以下のようなエラーになったので
./make-toolchain: line 21: syntax error near unexpected token `)' ./make-toolchain: line 21: `*cygwin*)'
*8
なんかexport SUDO=’echo "";’のこしても$SUDO …を実行したときにそのコマンド1行全体がechoになっているように見えたので・・・不安要素はなくす
*9
どう考えても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)
*10
神の書ではHelloWorldApp.hがなかったので作成、画像がないとmakeで怒られるのでSDKのサンプルからpng画像を拝借