Sign in Join
Wiki copytemporary

iPhone/iPod development/zh CN: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11## 安装
22
33系统需求:
44
55- Intel Mac (iPhone SDK 需求)
66- Mac OS X 10.5.5 or later (iPhone SDK 需求)
77- iPhone SDK 3.x 或更高版本(调试需 2.2 - 5.1). **注意:** 在iPhone SDK 3.0链接时,存在一个漏洞. 更多信息参考下文.
88
99部分特征:
1010
1111- 模拟器支持
1212- Xcode模板直接支持(实际上是需要)将Pascal和Objective-C源文件在同一应用中使用
1313- Pascal语言翻译了从SDK中抽取的OpenGL ES 1.1 C语言头文件(这是我们唯一能提供的, 因为这一文件时基于SGI开源许可证), 此文件在gles11单元中
1414
1515在提问之前,请阅读安装盘镜像中的ReadMe.rtf文件全文. 这一文件包含了大量的需要关注的信息(尤其是关于模拟器使用的信息),以及当需要增加Pascal源文件时,如何替换使用的模板.
1616
1717请注意,与其他的FPC发布版本不同,这一安装包会安装FPC的源文件和脚本文件,并运行这些脚本来编译FPC(当你向安装文件提供了iPhone SDK的安装路径,就会自动生成所需的C语言头文件的Pascal版本). 这一做法是为了符合iPhone SDK的协议条文, iPhone SDK协议不允许发布任何的有SDK衍生产物. 如果脚本因某种原因终止,你可以在以下路径`/Developer/FreePascalCompiler/2.6.0/InstallScript/finish_fpc_iphone_install.command` 重新加载. 你也可以从我们的官网[下载](http://www.freepascal.org/down/i386/macosx.var).
1818
1919如果你在安装结束后运行脚本过程中出现问题,请在提问时务必提供脚本所运行的完整终端截屏。
2020
2121(Xcode 4兼容性问题: Xcode模板只在Xcode 3上运行, 而不能在Xcode 4上运行.)
2222
2323### iPhone SDK 3.0
2424
2525iPhone SDK 3.0在链接过程中会出现一个由包含了FPC的Xcode模板引发的错误. 你可以通过在创建设置中的"其他链接器"中加入链接信息"-Wl,-no_order_inits"来回避这一错误. 这一修正已包含在了上文2.4.0rc1的链接中,但是你如果使用之前版本的模板,可能需要手动修改.
2626
2727这个链接错误已经向苹果报告了([rdar://problem/7120987](http://openradar.appspot.com/7120987)). 这一错误已经在Xcode4中修复.
2828
2929### Xcode 4, iOS SDK 5.0, Objective-Pascal
3030
3131关于Xcode 4模板和在iOS上用Objective-Pascal编程,请参阅http://dl.dropbox.com/u/28343282/ObjP/index.html
3232
3333## 苹果许可证限制
3434
3535### iPhone/iPod应用开发
3636
3737FPC并不能回避苹果发布的对于iPhone/iPod Touch开发程序的要求.因此开发者必须注册一个苹果iPhone开发者项目账户(美元\$99/年)来对真是硬件做FPC编译程序的开发(与常规的Xcode编译程序项目).
3838
3939如果没有此许可,开发者只可以在模拟器上运行程序(也可能在已越狱的iPhone/iPod Touch上运行,但是这只限于自有设备).
4040
4141关于苹果iPhone开发项目的更多信息,请参阅: <http://developer.apple.com/iphone/program/>
4242
4343### 开发所需的Pascal单元
4444
4545发布iPhone SDK衍生品是违反iPhone SDK协议的,这包括了Pascal语言对于框架头文件的翻译版本.因此,如何在发布包括了GUI的纯Pascal程序同时,又遵守苹果iPhone SDK协议是一项巨大的挑战.更多信息,请参阅ReadMe.rtf(包含在上文的.dmg镜像文件中).
4646
4747## 开发中的技术局限
4848
4949至今,我们还无从得知是否能够将应用复制到iPhone/iPod Touch上并执行而无须使用Xcode. 但毋庸置疑的是可以在任何IDE(Lazarus, Lightweight IDE等)上开发iPhone/iPod Touch,并在模拟器上运行.但是所有的应用必须在Xcode上传见以加载到iPhone/iPod Touch设备上并在设备上调试.
5050
5151### iPhone模拟器与iPhone的不同
5252
5353iPhone模拟器让iPhone操作系统API能够被一般的Mac应用使用,从而模拟设备所能提供的环境.通过允许在Mac系统上运行应用,模拟器提供了一种无需设备的快速应用调试功能.但是,在模拟器上运行并不等同于在设备上运行.
5454
5555模拟器使用的是低层的Mac系统版本的iPhone操作系统框架,而非设备所使用的版本.总体而言,模拟器是一个优秀的工具来进行初步的调试工作.但是必须谨记,因为模拟器不能模拟设备的功能,必须在真实设备上对于引用进行最终调试以及运行效果分析.这样做的主要原因在于在模拟器是运行的程序可以直接使用其他Mac系统的框架与功能,而这些框架与功能是iPhone/iPod Touch设备所没有的.
5656
5757## 在iPhone/iPod Touch上编译和运行纯Pascal应用
5858
5959纯命令行应用能够在iPhone/iPod Touch上运行,除非输出结果只在gdb控制台(如果通过Xcode进行运行和调试,按cmd-shift-r或选择Run-\>Console)或设备的控制台日志(如果在iPhone/iPod Touch上执行)上可见.对于图形用户界面应用,需要用到上文中提到的由于协议而不能发布的头文件翻译.当然,也可以使用自定义的C头文件Pascal翻译(最好是使用自动工具创建).
6060
6161### 仅使用Xcode
6262
63631. 由模板创建新的项目
64642. 从项目中移除除*Prefix.pch, Info.plist外的所有文件、框架和产品
65653. 添加新的Pascal原文件 (Project-\>Add to Project...)
66664. 双击在左上角的Xcode文件列表中的项目图标,进入`Build`标签,修改`FPC_MAIN_FILE`设置为所新添加的测试程序的文件名.
67675. 创建程序
6868
6969### 使用编译指令和Xcode
7070
7171如果你已经使用命令行编译程序(使用Darwin/ARM),将产生的二进制文件复制到Xcode项目中,并在Xcode中运行运行此程序,Xcode将会调用运行这一二进制文件而非原程序(这样仅仅是为了保证Xcode所使用的是最新的原程序,而无需Xcode对其再次连接).你可以使用项目的默认模板实现这一功能,而无需对项目进行进一步设置.
7272
7373你可以在项目视图中打开`Products`文件夹找到Xcode的二进制文件,右键单击(或ctrl+单击).app文件,选择"Reveal in Finder". 二进制文件的目录即program.app/Contents/MacOS(将`program.app`替换为当前目录). 将`MacOS`文件夹中的全部文件替换为你所编译的二进制文件(可以使用命令行命令`cp`).
7474
7575对Darwin/ARM程序进行编译的命令行命令(将本节中的"Developer"替换为SDK的安装目录):
7676
7777**对FPC 2.6.0:**
7878
79-`ppcarm -Cparmv6 -Cfvfpv2 -FD/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin -XR/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk program.pas`
79+``` pascal
80+ppcarm -Cparmv6 -Cfvfpv2 -FD/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin -XR/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk program.pas
81+```
8082
8183对iPhone模拟器 (使用上文中说明的OS_TARGET)
8284
83-`ppc388 -Tiphonesim  -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas`
85+``` pascal
86+ppc388 -Tiphonesim -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas
87+```
8488
8589**对FPC 2.6.0之前版本:**
8690
87-`ppcarm -FD/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin -XR/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk program.pas`
91+``` pascal
92+ppcarm -FD/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin -XR/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk program.pas
93+```
8894
8995对iPhone模拟器
9096
91-`ppc388  -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas`
97+``` pascal
98+ppc388 -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas
99+```
92100
93101## 在iPhone模拟器上编译和运行纯Pascal应用
94102
95103在模拟器上编译和连接需要ppc386编译器. 对于iPhone模拟器和Mac系统应用之间仅有些许不同,主要体现在iPhone的Sim应用需要连接到不同与Mac应用的的构架上.
96104
97105上文已经介绍了FPC 2.6.0编译**iphonesim**应用. 对于SDK 3.2,需要更高版本的FPC包对iphonesim目标文件进行编译([参阅 \#17470](http://bugs.freepascal.org/view.php?id=17470)). 原因: 这种情况下的FPC编译没有较大改变(i386目标文件),但是Objective-C ABI不同.对于Darwin-i386程序FPC使用ObjC1(与OSX10.4以及更早版本兼容),同时iPhonesim-i386仅使用ObjC2.(较早的iPhoneSim SDK 2.x和3.0允许使用ObjC1)
98106
99107一些构架师iPhone专有的(UIKit),另一些兼容Mac OS X和iOS(CoreFoundation, CoreGraphics等).iPhoneSim SDK提供这些构架的独立版本.为了确保这些构架的SDK版本能够使用,你需要向编译器说明需要的SDK版本(与编译运行在设备上的应用时一样):
100108
101-` fpc simtest.pas -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk`
109+```text
110+ fpc simtest.pas -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk
111+```
102112
103113此处 */Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk* 是iPhoneSim SDK的跟目录. 你的iPhone SDK安装路径决定了此目录的位置.
104114
105115目前,至少有3个版本的iPhone SDK: 2.2.1, 3.0, 3.1.根据你需要的不同版本,路径分别修改为(以上为3.0):
106116
107117- SDK version 2.2.1: */Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk*
108118- SDK version 3.0: */Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk*
109119
110120等.
111121
112122## 安装ARM交叉编译器
113123
114124可下载的FPC/iPhone包包括了一个名为*ppcarm*的交叉编译器用来传见iPhone应用.如果你希望使用SVN中最新版本的编译器和单元,你可以按如下步骤操作:
115125
116126**需求:** iOS SDK必须已通过标准Xcode开发工具安装,并且安装路径上没有空格.
117127
1181281\) 复制*/Developer/FreePascalCompiler/2.6.0/Source/rtl/darwin/arm/sig_cpu.inc*(这个文件会在安装FPC iPhone SDK集成开发包后自动生成)到你的SVN本地*rtl/darwin/arm*目录.
119129
1201302\) 在你的SVN目录的FPC顶层目录中执行如下命令(替换第一行中的*/Developer*为你的iPhone SDK安装目录,第二行中的*iPhoneOS4.2.sdk*为你需要使用的SDK版本):
121131
122-` export IPHONEPLATFORMBASEDIR=/Developer/Platforms/iPhoneOS.platform/Developer`\
123-` make FPC=/usr/local/lib/fpc/2.6/0/ppc386 CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS4.2.sdk/ -ap -Cfvfpv2" all`
132+```text
133+ export IPHONEPLATFORMBASEDIR=/Developer/Platforms/iPhoneOS.platform/Developer
134+ make FPC=/usr/local/lib/fpc/2.6/0/ppc386 CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS4.2.sdk/ -ap -Cfvfpv2" all
135+```
124136
1251373\) 安装(如上,替换SDK目录和版本号):
126138
127-``  sudo make FPC=`pwd`/compiler/ppcrossarm OPT="-ap" CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS4.2.sdk/ -ap" install CROSSINSTALL=1 ``\
128-` sudo ln -sf ../lib/fpc/2.5.1/ppcrossarm /usr/local/bin/ppcarm`
139+```text
140+ sudo make FPC=`pwd`/compiler/ppcrossarm OPT="-ap" CPU_TARGET=arm CROSSOPT="-FD${IPHONEPLATFORMBASEDIR}/usr/bin -XR${IPHONEPLATFORMBASEDIR}/SDKs/iPhoneOS4.2.sdk/ -ap" install CROSSINSTALL=1
141+ sudo ln -sf ../lib/fpc/2.5.1/ppcrossarm /usr/local/bin/ppcarm
142+```
129143
130144(可以在"sudo make"命令的最后加上"INSTALL_PREFIX=xyz"参数来将文件安装到任意的"xyz"目录下,而非*/usr/local*目录.这种情况下,需要修改"sudo ln"命令的路径).
131145
132146## 更多信息
133147
134148- [使用FPC和SDL的简单iPhone应用范例](http://freeze-dev.de/blog/?p=492)
135149
136150## 参考信息
137151
138152- [[iPhone headers translator|iPhone头文件Pascal语言翻译器]]
139153
140154---
141155*From the Free Pascal wiki, page "iPhone/iPod development/zh CN", as it stood on 2015-07-20 after a change by FTurtle, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
142156Category: iOS/zh CN
143157Category: zh

Back to history