网上搭建iPhone开放开发环境的文章已经不少了。本文参考了不少资料,详细说明如何成功在Leopard中搭建一个完整的开发环境并整合XCode进行iPhone源生程序的开发。
在XCode中整合toolchain开发环境和苹果官方的iPhone SDK并不冲突,你可以在同一个XCode中既建立toolchain的开发工程,也可以建立官方的iPhone SDK工程。
本文在Leopard 10.5.2,XCode 3.1 Beta 3(随iPhone SDK Beta3提供),iPhone OS 1.1.4测试通过。
准备工作
请确认操作系统为Leopard 10.5.2。
请确认XCode已经安装。最好安装最新的官方XCode 3.1 Beta。
手中最好是有iPhone或者iPod Touch, 已经jailbreak。
获取toolchain源码
打开一个terminal窗口,随便建立一个目录
-
mkdir iphoneenv
-
cd iphoneenv
后面的操作都在这个目录中进行,只需复制下文文字框中的内容,贴到terminal窗口执行即可。
获取源码
-
svn co http://llvm.org/svn/llvm-project/llvm/trunk llvm-svn -r 42498
-
pushd llvm-svn
-
./configure –enable-optimized
-
make ENABLE_OPTIMIZED=1
-
sudo make install
-
LLVMOBJDIR=`pwd`
-
popd
获取iphone-dev SVN代码库
-
svn checkout http://iphone-dev.googlecode.com/svn/trunk/ iphone-dev
-
pushd iphone-dev
建立一个保存toolchain的目录。
-
sudo mkdir /usr/local/arm-apple-darwin
编译odcctools
-
mkdir -p build/odcctools
-
pushd build/odcctools
-
../../odcctools/configure –target=arm-apple-darwin –disable-ld64
-
export INCPRIVEXT="-isysroot /Developer/SDKs/MacOSX10.4u.sdk"
-
make
-
sudo make install
-
popd
获取iPhone中的框架和头文件
获取这个iPhone的镜像有很多办法,这里介绍几种:
最省事的办法(如果手头没有iPhone或是没有wi-fi):
在google搜索iphone_image,找到了就直接下载,解压缩。
麻烦点的办法(手头有jailbreak并安装了installer的iPhone或者iPod Touch):
如果你家里或者单位有wi-fi,而且iPhone已经连上w-ifi,直接在iPhone的Installer里找到BSD Subsystem和OpenSSH并安装,然后用scp把iPhone里面从根目录开始的所有子目录的所有的文件拷贝出来。
或者在installer里安装AFPd,然后用Finder打开afp://你的iphone的ip地址,用户名用root, 密码用alpine,把里面的所有文件直接拽出来。
详细方法不介绍了,相信你一定能搞定。
复制镜像
假设你把这个镜像里的所有文件都放在/iphone_image目录,那么执行下面操作(不要离开terminal的当前目录):
-
sudo mkdir /usr/local/share/iphone-filesystem
-
sudo cp -Rp /iphone_image/* /usr/local/share/iphone-filesystem/
设置$HEAVENLY的环境变量
-
HEAVENLY=/usr/local/share/iphone-filesystem
-
pushd include
-
./configure –with-macosx-sdk=/Developer/SDKs/MacOSX10.4u.sdk
-
sudo bash install-headers.sh
-
popd
安装csu
-
mkdir -p build/csu
-
pushd build/csu
-
../../csu/configure –host=arm-apple-darwin
-
sudo make install
-
popd
configure和make LLVM-GCC
-
mv llvm-gcc-4.0-iphone/configure llvm-gcc-4.0-iphone/configure.old
-
sed 's/^FLAGS_FOR_TARGET=$/FLAGS_FOR_TARGET=${FLAGS_FOR_TARGET-}/g' llvm-gcc-4.0-iphone/configure.old > llvm-gcc-4.0-iphone/configure
-
sudo ln -s /usr/local/arm-apple-darwin/lib/crt1.o //usr/local/arm-apple-darwin/lib/crt1.10.5.o
-
mkdir -p build/llvm-gcc-4.0-iphone
-
pushd build/llvm-gcc-4.0-iphone
-
export FLAGS_FOR_TARGET="-mmacosx-version-min=10.1"
-
sh ../../llvm-gcc-4.0-iphone/configure –enable-llvm=`llvm-config –obj-root` /
-
–enable-languages=c,c++,objc,obj-c++ –target=arm-apple-darwin –enable-sjlj-exceptions /
-
–with-heavenly=$HEAVENLY –with-as=/usr/local/bin/arm-apple-darwin-as /
-
–with-ld=/usr/local/bin/arm-apple-darwin-ld
-
make LLVM_VERSION_INFO=2.0-svn-iphone-dev-0.3-svn
-
sudo make install
-
popd
-
popd
这样,专门用来编译iPhone的toolchain gcc就编译完了,文件位置在:
-
/usr/local/bin/arm-apple-darwin-gcc
整合XCode
接下来,整合XCode:
下载XCode模板。
解压缩,把
-
iPhone UIKit Skeleton Application
这个文件夹复制到
-
/Developer/Library/XCode/Project Templates/Application/
好了,打开XCode,新建一个项目,你会发现列表里已经出现了
iPhone UIKit Skeleton Application
这样一个模板(不在iPhone OS分类里而是在Mac OS X分类)
直接创建项目,取个名字, 直接编译,成功。
建议你使用本文的方法编译toolchain,而不是直接下载别人编译好的安装包,这样问题会少很多。
如果你下载了其他地方的例子,可能需要修改Makefile才可以编译成功。尤其是google code的iPhone代码。
比如:
你需要把
-
CC=/usr/local/arm-apple-darwin/bin/gcc
改成:
-
CC=/usr/local/bin/arm-apple-darwin-gcc -v
把
-
CC=/usr/local/arm-apple-darwin/bin/g++
改成:
-
CXX=/usr/local/bin/arm-apple-darwin-g++
把LDFLAGS里的
-
-Wl,-syslibroot,/usr/local/arm-apple-darwin/heavenly
直接删掉。
好了,这样,你的开发环境就搭建完了。
参考文档
http://wikee.iphwn.org/howto:toolchain_on_leopard
http://www.iphonetw.net/?q=books/unofficialdev/osxbuildtoolchain
http://www.cocoamachine.com/blog/2008/01/make-your-own-native-iphone-ap.html
http://ansani.it/2008/08/12/build-the-toolchain-for-iphone-20x-on-macosx-105x/