iphone开发环境研究

关于iphone开发

一. 版本问题

iphone目前最新的版本是3.1.2, 但是并不是所有软件都支持这个版本, 这个上面牵涉到破解问题, 所以确定一个版本很重要, 当然只要没用什么新的api, 版本之间的移植也是很容易.

二. 官方sdk和开源工具链

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能做的和不能做的程序;开发平台无限制:Leopard之前的版本, Windows, Linux都可以. 

开源工具链的缺点:开发起来有点麻烦;目前不能使用Interface Builder制作界面;环境搭建相对麻烦.

苹果官方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的软件可以做代码签名, 这个我已经测试过了.


三. iphone linux 交叉编译环境搭建步骤

我用的是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真机的Makefile

这里主要build好后通过ssh传过去, 然后iphone上用ldid做代码签名

 

#CC = /path/to/my/toolchain/bin/arm-apple-darwin9-gcc
  2 CC=arm-apple-darwin9-gcc
  3 LD = $(CC)
  4
  5 # Here comes your IP of the ipod/iphone.
  6 # If you do a "make bundle" we build our
  7 # application and copy via ssh the files to
  8 # your ipod/iphone and sign them there.
  9 #
  10 # please make sure you have 'ldid' installed on your
 11 # phone:
 12 #   apt-get install ldid
 13 #
 14 IP=192.168.1.100
 15
 16 SRC=src/
 17 IMG=img/
 18
 19 LDFLAGS=    -lobjc /
 20         -bind_at_load /
 21         -framework Foundation /
 22         -framework CoreFoundation /
 23         -framework UIKit /
 24         -w
 25
 26 all:    HelloToolchain bundle
 27
 28 HelloToolchain: HelloToolchain.o
 29     $(LD) $(LDFLAGS) -o $@ $^
 30
 31 bundle: HelloToolchain
 32     @mkdir -p HelloToolchain.app
 33     @cp HelloToolchain HelloToolchain.app/HelloToolchain_
 34     @cp ${IMG}* HelloToolchain.app
 35     @cp Info.plist HelloToolchain.app
 36     @cp HelloToolchain.sh HelloToolchain.app/HelloToolchain
 37
 38 %.o:    $(SRC)%.m
 39     $(CC) -c $(CFLAGS) $(CPPFLAGS) $< -o $@
 40
  41 deploy: clean bundle
 42     @ssh root@$(IP) "cd /Applications/HelloToolchain.app && rm -R * || echo 'not found' "
 43     @scp -rp HelloToolchain.app root@$(IP):/Applications
 44     @ssh root@$(IP) "cd /Applications/HelloToolchain.app ; ldid -S HelloToolchain_; killall SpringBoard"
 45
 46 clean:
 47     @rm -f *.o
 48     @rm -Rf HelloToolchain.app
 49
 50

四. iphone的开源游戏引擎

 

    cocos2d-iphone: http://code.google.com/p/cocos2d-iphone/


五. 后记

   我发现现在有人说官方sdk开发出来的app也可以用ldid进行签名, 但是因为我的mac os leopard 是装在x86的intel笔记本上的, 而sdk3.1.2至少需要leopard10.5.7, 因此最近我升级了下, 但是有一些问题, 所以还没测试过, 我想如果这样行的话, 只要不是要用到非官方的额外的%25的功能的话, 官方sdk是个比较好的选择, 这样既有模拟器, 又能跑在真机上用, 而不用花99美元放到Apple的App Store上去. 一般很多使用toolchain的软件也有一个发布的站点, 以前是Installer, 现在是Cydia供破解的iphone来下载.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值