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 をダウンロード
- 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ごとにキーが異なるので注意*5
chmod 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
- 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のコードを作成する
- とりあえずまとめました、これ(sourcecode)をC:\cygwin\home\makoto_kwにおいてください。*10
- 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画像を拝借
いや素晴らしい!!!
同じ境遇(IntelMacなし)の人間がまだ頑張っているのはうれしい限りです。
参考にさせてもらいます。
good job.!!!!!!!!!!!!!
新しいMac miniが欲しくなりつつ、まだ見ぬネットブックに夢見つつ・・・iBook G4を使い続けています。でもそろそろ限界かも。。。
素晴らしい情報ありがとうございます。
さっそく試してみました。(iPod touch 2.2.1)
TelephonyUI.frameworkのところで、「dtmf-*.aif」の抽出に失敗した以外はうまくいきました。
(ファイル名に*が入っているのでWindowsでは厳しいですかね)
追加です。
アプリはiPodに転送出来たのですが、地球の写真が大きくなって、すぐに終了しました。
2.0と2.2.1の違いかもしれませんね。
もう少し遊んでみます。
はじめまして!
貴重なレポートありがとうございます。
ldid -S /Applications/HelloWorld.app/HelloWorld
のところで、
-sh: ldid: command not found
というエラーがでてしまいました。
対応方法を教えていただけないでしょうか。
あと一歩で、Windows環境でiPhoneのアプリケーションを作成できるかと思うと、ワクワクしています。
ちなみに、gcc-codeが見つからず、gcc-coreを選択しました。
インストール方法の違いは、上記の部分だけです。
iPhone上の状態は、
アイコンが表示され、起動すると、地球の写真が大きくなって、すぐに終了する状態です。
お忙しいところ、申し訳ありませんが、よろしくお願いいたします。
はじめまして!
貴重なレポートありがとうございます。
ldid -S /Applications/HelloWorld.app/HelloWorld
のところで、
-sh: ldid: command not found
というエラーがでてしまいました。
対応方法を教えていただけないでしょうか。
あと一歩で、Windows環境でiPhoneのアプリケーションを作成できるかと思うと、ワクワクしています。
ちなみに、gcc-codeが見つからず、gcc-coreを選択しました。
インストール方法の違いは、上記の部分だけです。
iPhone上の状態は、
アイコンが表示され、起動すると、地球の写真が大きくなって、すぐに終了する状態です。
お忙しいところ、申し訳ありませんが、よろしくお願いいたします。
先ほど質問させていただいたものです。
以下のページを見つけ、
http://www.saurik.com/id/8
iphone# apt-get install ldid
を実行したところ、ldidを実行することができ、無事に画面に「Hello World」が表示されました。
ありがとうございました!!!
でも、「Tensai Sugiru」とは表示されませんでしたよ!
私にとって、makoto_kwさんこそが神です!
この次に、何をすればよいのか、サッパリわからないので、レポートをお待ちしております。
今後とも、よろしくお願いします。
make: /usr/local/bin/arm-apple-darwin9-gcc: Command not found
make: *** [HelloWorld.o] Error 127
となって、2 . cygwinでmakeる の部分ができません。
なぜでしょうか。教えてください。
make-toolchain
このファイルの編集した後の内容を教えてください。
あっているか心配なので…
上の追追記です。
bash-3.2$ cd ~/iphone-2.0-toolchain
bash-3.2$ ./make-toolchain
This script requires that you enter the proper administrator password
in order to create a folder called iphone-sysroot in /usr/local
This script requires that you enter the proper administrator password
in order to restrict access to /usr/local/iphone-sysroot
mkdir: cannot create directory `cctools-iphone’: File exists
checking build system type… i686-pc-cygwin
checking host system type… i686-pc-cygwin
checking target system type… arm-apple-darwin9
checking for gcc… no
checking for cc… no
checking for cl.exe… no
configure: error: no acceptable C compiler found in $PATH
See `config.log’ for more details.
make: *** No targets specified and no makefile found. Stop.
This script requires that you enter the proper administrator password
in order to install cctools in /usr/local
make: *** No rule to make target `install’. Stop.
mkdir: cannot create directory `gcc-4.2-iphone’: File exists
loading cache ./config.cache
checking host system type… i686-pc-cygwin
checking target system type… arm-apple-darwin9
checking build system type… i686-pc-cygwin
checking for a BSD compatible install… /bin/install -c
checking whether ln works… yes
checking whether ln -s works… yes
checking for gcc… no
checking for cc… no
configure: error: no acceptable cc found in $PATH
make: *** No targets specified and no makefile found. Stop.
This script requires that you enter the proper administrator password
in order to install gcc-4.2-iphone in /usr/local
make: *** No rule to make target `install’. Stop.
Installation finished
何度make-toolchainを実行してもこうなってしまいます。
何が悪いのでしょうか?
教えてください。お願いします。
上と同じ問題です。
This script requires that you enter the proper administrator password
in order to install gcc-4.2-iphone in /usr/local
だそうですが、これが原因でしょうか?
また
/usr/local/binと/usr/local/libの中が空です。/usr/local/bin/arm-apple-darwin9-gccが必要みたいが、
どうすれば解決できるかを教えてください。お願いします。
ToolChain2だからfirmware3だと出来ないのか :(
Toolchain 3 とかないかな~
Intel Macを買ったせいでコメント放置中。VAIO X買ったのでそっちで試してみるかな。