iPhone有两层不同的框架,分别是底层API和iPhone SDK.
底层API就是我们在iPhone 1.0和1.1中使用的“开源工具链”,苹果虽然自己在iPhone内置的软件中一直在使用这部分API,但是并没有在官方发布的SDK中附带这些API的定义。这部分API直接和底层的框架运行库对话.
苹果官方发布的iPhone SDK则将这部分底层API进行了包装,用户的程序只能和苹果提供的iPhone SDK中定义的类进行对话,而这些类再和底层的API进行对话. 最明显的例子就是OpenGL ES,苹果官方发布的iPhone SDK中的OpenGL ES实际是和底层API中CoreSurface这个框架进行对话,来实现渲染功能.
而“开源工具链”叫做“Open Source Toolchain”,是一些黑客及苹果爱好者通过对iPhone进行破解及修改,开发出的一套开发工具.
苹果官方发布的iPhone SDK对底层API进行了很大的限制。官方的SDK是在某些底层API之上增加了一层针对开发者的类库,供开发者使用,而开源工具链则是使用class-dump (http://www.codethecode.com/projects/class-dump/ ) 等工具直接将iPhone手机中所有框架的类定义、分类和协议直接抠出来,这样开发者就可以通过抠出来的头文件定义直接与iPhone中的所有框架库进行对话.
官方的iPhone SDK和开源工具链的API定义大概有75%是相同的,而另外的25%左右则是苹果不希望开发者使用的比较底层的API。这样,通过一些修改,这两者的代码在某些级别上是可以互相兼容的.
进 行iPhone破解的开发者一直致力于试图将这两者结合起来。经过他们的一些辛勤努力,通过在官方SDK中增加工具链头文件定义的方法,目前使用过去 1.x工具链开发的iPhone软件,已经可以仅仅进行一些非常微小的修改,就可以在官方的SDK中编译通过了. 主要的原因是苹果虽然一直在不断地修改官方的SDK,但是对于底层API的修改确是非常的小,而由于工具链直接调用底层API,因此只要官方的SDK “认识” 这些API的定义,就可以直接使用.
因此, 总结一下非官方的toolchain拥有比官方sdk更加强大的功能, 而且假如需要互相转换的话, 只要非官方的toolchain不用那25%的功能, 修改也是很小的.
苹果官方iPhone SDK的缺点:CoreSurface(硬件显示设备), Celestial(硬件音频设备)以及其他几乎所有和硬件相关的处理无法实现;无法开发后台运行的程序;需要代码签名才能够在真机调试;只能在Leopard 10.5.2以上版本、Inter Mac机器进行开发.
苹果官方iPhone SDK的优点:开发环境几乎和开发Mac软件一样:一样的XCode、Interface Builder、Instruments工具;最新版本的iPhone SDK可以使用Interface Builder制作界面;环境搭建非常容易;需要代码签名以避免恶意软件.
这里经过最近的调查和研究, 这个发生了改变: 自从2.x的版本之后就开始了Open Source Toolchain 也需要代码签名, 不过这个在iphone的平台上已经有一个名叫ldid的软件可以做代码签名, 这个我已经测试过了.
我用的是3.1.2 iphone os build在ubuntu 9.10上的Open Source Toolchain.
build步骤可见:
http://code.google.com/p/iphonedevonlinux/wiki/Installation
http://www.yifeiyang.net/iphone-development-introduction-3-linux-development-environment-on-the-build-iphone-os3-1-2/不过得注意三点:
1. 针对我这个版本的需要打上3.1.2的补丁
2, gcc和g++得用4.3.4, 不能用ubuntu 9.10的4.4, 那个编译太严格, 会需要自己加很多stdlib头文件.
3. In ~/Projects/iphone/toolchain/toolchain/sys, rename folder System to System2
In ~/Projects/iphone/toolchain/toolchain/sys/usr, rename folder lib to lib2
Copy folder ~/Projects/iphone/toolchain/sdks/iPhoneOS3.1.2.sdk/System to ~/Projects/iphone/toolchain/toolchain/sys
Copy folder ~/Projects/iphone/toolchain/sdks/iPhoneOS3.1.2.sdk/usr/lib to ~/Projects/iphone/toolchain/toolchain/sys/usr
这个地方需要这样做.
四. iphone的开源游戏引擎
cocos2d-iphone: http://code.google.com/p/cocos2d-iphone/