日曜日, 8月 01, 2010

iPhone3GS単体でOpenGLアプリを開発

iPhone4移行に伴って余ったiPhone3GSをMacの代わりの簡易開発マシンにしてみました。
(但し環境構築にはMacが必要になります)

今回試した環境:

・iPhone3GS 3.1.3
・MacBook Air(初代) SnowLeopard 10.6.4
・XCode 3.2.2
・iPhone SDK 3.2 final
・PwnageTool 4.01

手順:

(1) まずはiPhone3GS 3.1.3をPwnageToolもしくはそれに準じるものでJailbreakする。
この辺りの詳しいやり方はGoogleで探してください。

(2) JailbreakしたiPhone3GSのCydiaから以下のパッケージをインストール。

・MobileTerminal
・OpenSSH
・SBSettings (必須ではないが便利なので)
・APT関連

まずはMobileTerminalを入れて起動し、mobileアカウントとrootアカウントのパスワードを変更します。最近はiPhoneを狙ったウィルスが蔓延しはじめているので、注意しておく必要があります。パスワードの変更方法は「passwd」コマンドで。やり方が分からない場合はGoogleにて。

次にOpenSSHを入れsshdを有効にします。(インストールして再起動すれば有効になります。画面上部の時計の辺りをこすって出現するSBSettingsから簡単に有効・無効の切り替えができます)

(3) 次のリンクにあるシェルスクリプトhttp://rpetri.ch/toolchainをiPhone SDKのインストール場所に保存し、それをMac OSX上で実行します。

実行すると自動的にiPhone SDKの内容をiPhone実機にsshを経由してコピーし、更にiPhone上でスクリプトの続きを実行します。その際にiPhone上で必要なパッケージもaptを使用して自動的にインストールされます。

(4) iPhoneをMacに接続し、OpenGL ESの簡単なサンプルをビルドおよび実機で実行する。

一度はiPhone実機でOpenGLプログラムを実行できるようにしておく必要があります。実行が出来たら、そのプロジェクトをそのまま全てtarなりzipなりで圧縮し、iPhoneに転送します。

(5) iPhoneで先ほどのプロジェクトを解凍し、環境に合わせて以下のMakefileを手直ししてください。


#-----------------------------------------------------------------
# Makefile for gcc compiler for iPhone

PROJECTNAME=ogltest1
APPFOLDER=$(PROJECTNAME).app
INSTALLFOLDER=$(PROJECTNAME).app
SDK=/var/sdk

CC=arm-apple-darwin9-gcc
LD=$(CC)
LDFLAGS = -arch arm -lobjc
LDFLAGS += -framework CoreFoundation
LDFLAGS += -framework Foundation
LDFLAGS += -framework UIKit
LDFLAGS += -framework OpenGLES
LDFLAGS += -framework QuartzCore
LDFLAGS += -framework CoreGraphics
LDFLAGS += -framework GraphicsServices
LDFLAGS += -framework CoreSurface
LDFLAGS += -L"$(SDK)/usr/lib"
LDFLAGS += -F"$(SDK)/System/Library/Frameworks"
LDFLAGS += -F"$(SDK)/System/Library/PrivateFrameworks"
LDFLAGS += -bind_at_load
LDFLAGS += -multiply_defined suppress

CFLAGS = -I"$(SDK)/usr/include"
CFLAGS += -I"/usr/include"
CFLAGS += -F"$(SDK)/System/Library/Frameworks"
CFLAGS += -F"$(SDK)/System/Library/PrivateFrameworks"
#CFLAGS += -DDEBUG -O3 -Wall -std=c99 -funroll-loops
CFLAGS += -DDEBUG -Wall -std=c99
CFLAGS += -DMAC_OS_X_VERSION_MAX_ALLOWED=1050

BUILDDIR=./build/3.1.3
SRCDIR=./Classes
RESDIR=./Resources
OBJS=$(patsubst %.m,%.o,$(wildcard $(SRCDIR)/*.m))
OBJS+=$(patsubst %.c,%.o,$(wildcard $(SRCDIR)/*.c))
OBJS+=$(patsubst %.cpp,%.o,$(wildcard $(SRCDIR)/*.cpp))
RESOURCES=$(wildcard $(RESDIR)/*)

all: dist

$(PROJECTNAME): $(OBJS) $(LD) $(LDFLAGS) -o $@ $^

%.o: %.m $(CC) -c $(CFLAGS) $< -o $@

%.o: %.c $(CC) -c $(CFLAGS) $< -o $@

%.o: %.cpp $(CC) -c $(CPPFLAGS) $< -o $@

dist: $(PROJECTNAME)
/bin/rm -rf $(BUILDDIR)
/bin/mkdir -p $(BUILDDIR)/$(APPFOLDER)
/bin/cp $(RESDIR)/* $(BUILDDIR)/$(APPFOLDER)
/bin/cp Info.plist $(BUILDDIR)/$(APPFOLDER)/Info.plist
@echo "APPL????" > $(BUILDDIR)/$(APPFOLDER)/PkgInfo
/usr/bin/ldid -S $(PROJECTNAME)
/bin/cp $(PROJECTNAME) $(BUILDDIR)/$(APPFOLDER)
/bin/cp ogltest1 ~/Applications/XXXXXXXX-YYYY-ZZZZ-B2C7-C7D6C8AC127E/ogltest1.app/
/bin/cp Shaders/* ~/Applications/XXXXXXXX-YYYY-ZZZZ-B2C7-C7D6C8AC127E/ogltest1.app/

install: dist
#/bin/cp -r $(BUILDDIR)/$(APPFOLDER) /Applications/$(INSTALLFOLDER)
@echo "Application $(INSTALLFOLDER) installed"
killall SpringBoard

clean:
@rm -f $(SRCDIR)/*.o
@rm -rf $(BUILDDIR)
@rm -f $(PROJECTNAME)
#-----------------------------------------------------------------



MakefileなのでスペースをTABにする必要があるところは修正してください。
なお上記の「~/Applocations/XXXX.../ogltest1.app/」の部分がXCodeで作った際に出来たアプリケーションのディレクトリです。sshでログインし、この例でのプロジェクト名である「ogltest1」を「~/Applications」以下で検索(find)すれば見つかります。

これでiPhone上でソースを変更しmakeすれば、通常のホーム画面から実行ができます。

ちょっとしたプログラムでしたら、iPhoneのみで検証が出来ます。実際はエディタの関係でPCかMacが必要になりますが…。

※記憶を頼りに書いたので、不足している手順があるかも知れません。

<参考>
・http://blog.aaronash.com/?p=15

0 件のコメント:

PCを新調

昔働いていた頃は16Coreのマシンを家で使える日が来るとは想像も出来なかったな。当時は128Mバイトのメモリボードを1000万円くらいで売ってた気がするが今や128GBが5万円ちょっと。容量1000倍で価格は200分の1とは隔世の感があるな。