19
2009

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
これをやらないと始まらないというか。エミュレータがないので動作確認できない。

  1. jailbreakする

    • がんばれ!
  2. OpenSSHとiPhone 2.0 toolchainを入れる
    • Cydiaから普通に
    • SSHのON/OFFやSpringBoardの再起動にはBossPrefsがおすすめ


cygwinのインストール
iPhoneにはまったく依存しない手順

  1. セットアップを落とす

  2. 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を押してインストールを待つ
  3. cygwin起動してみる
    • C:\cygwin\Cygwin.batを実行しhomeディレクトリをつくっておく

      • C:\cygwin\home\makoto_kw


iPhone 2.0 Toolchainに必要なファイルをかき集める
共通のtoolchainを取得・展開し、firmwareに含まれるソースを抜き出して追加するという作業。

  1. 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
  2. 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
  3. 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のコンパイル
一番トラブルが起こりそうなところ

  1. 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
  2. make-toolchainを実行
    • cd ~/iphone-2.0-toolchain
      ./make-toolchain
    • 神の書では2時間くらいかかるかもと書いてあり自分の環境では1時間くらいかかった



Hello World!

  1. 神の書を便りにhelloworldのコードを作成する

    • とりあえずまとめました、これ(sourcecode)をC:\cygwin\home\makoto_kwにおいてください。*10
  2. cygwinでmakeる
    • cd ~/helloworld
      make clean
      make
  3. 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
  4. 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画像を拝借

No Trackbacks

Trackback URL:

13 Comments

  1. qaq
    March 20th, 2009 11:15 AM | #1

    いや素晴らしい!!!
    同じ境遇(IntelMacなし)の人間がまだ頑張っているのはうれしい限りです。
    参考にさせてもらいます。
    good job.!!!!!!!!!!!!!

  2. makoto_kw
    March 22nd, 2009 10:46 PM | #2

    新しいMac miniが欲しくなりつつ、まだ見ぬネットブックに夢見つつ・・・iBook G4を使い続けています。でもそろそろ限界かも。。。

  3. diend
    April 12th, 2009 02:02 PM | #3

    素晴らしい情報ありがとうございます。
    さっそく試してみました。(iPod touch 2.2.1)
    TelephonyUI.frameworkのところで、「dtmf-*.aif」の抽出に失敗した以外はうまくいきました。
    (ファイル名に*が入っているのでWindowsでは厳しいですかね)

  4. diend
    April 12th, 2009 11:15 PM | #4

    追加です。
    アプリはiPodに転送出来たのですが、地球の写真が大きくなって、すぐに終了しました。
    2.0と2.2.1の違いかもしれませんね。
    もう少し遊んでみます。

  5. JUN
    May 2nd, 2009 11:33 PM | #5

    はじめまして!
    貴重なレポートありがとうございます。
    ldid -S /Applications/HelloWorld.app/HelloWorld
    のところで、
    -sh: ldid: command not found
    というエラーがでてしまいました。
    対応方法を教えていただけないでしょうか。
    あと一歩で、Windows環境でiPhoneのアプリケーションを作成できるかと思うと、ワクワクしています。
    ちなみに、gcc-codeが見つからず、gcc-coreを選択しました。
    インストール方法の違いは、上記の部分だけです。
    iPhone上の状態は、
    アイコンが表示され、起動すると、地球の写真が大きくなって、すぐに終了する状態です。
    お忙しいところ、申し訳ありませんが、よろしくお願いいたします。

  6. JUN
    May 2nd, 2009 11:34 PM | #6

    はじめまして!
    貴重なレポートありがとうございます。
    ldid -S /Applications/HelloWorld.app/HelloWorld
    のところで、
    -sh: ldid: command not found
    というエラーがでてしまいました。
    対応方法を教えていただけないでしょうか。
    あと一歩で、Windows環境でiPhoneのアプリケーションを作成できるかと思うと、ワクワクしています。
    ちなみに、gcc-codeが見つからず、gcc-coreを選択しました。
    インストール方法の違いは、上記の部分だけです。
    iPhone上の状態は、
    アイコンが表示され、起動すると、地球の写真が大きくなって、すぐに終了する状態です。
    お忙しいところ、申し訳ありませんが、よろしくお願いいたします。

  7. JUN
    May 2nd, 2009 11:58 PM | #7

    先ほど質問させていただいたものです。
    以下のページを見つけ、
    http://www.saurik.com/id/8
    iphone# apt-get install ldid
    を実行したところ、ldidを実行することができ、無事に画面に「Hello World」が表示されました。
    ありがとうございました!!!
    でも、「Tensai Sugiru」とは表示されませんでしたよ!
    私にとって、makoto_kwさんこそが神です!
    この次に、何をすればよいのか、サッパリわからないので、レポートをお待ちしております。
    今後とも、よろしくお願いします。

  8. 匿名
    September 1st, 2009 08:29 PM | #8

    make: /usr/local/bin/arm-apple-darwin9-gcc: Command not found
    make: *** [HelloWorld.o] Error 127
    となって、2 . cygwinでmakeる の部分ができません。
    なぜでしょうか。教えてください。

  9. x
    September 1st, 2009 08:39 PM | #9

    make-toolchain
    このファイルの編集した後の内容を教えてください。
    あっているか心配なので…

  10. x
    September 2nd, 2009 07:14 PM | #10

    上の追追記です。
    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を実行してもこうなってしまいます。
    何が悪いのでしょうか?
    教えてください。お願いします。

  11. 盛悟
    December 1st, 2009 12:44 AM | #11

    上と同じ問題です。
    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が必要みたいが、
    どうすれば解決できるかを教えてください。お願いします。

  12. 盛悟
    December 1st, 2009 01:33 AM | #12

    ToolChain2だからfirmware3だと出来ないのか :(
    Toolchain 3 とかないかな~

  13. December 2nd, 2009 04:20 AM | #13

    Intel Macを買ったせいでコメント放置中。VAIO X買ったのでそっちで試してみるかな。

Comments