iPhone/iPod development/zh CN

From Free Pascal wiki
Jump to navigationJump to search
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

English (en) | 한국어 (ko) | 中文(中国大陆)‎ (zh_CN) | 中文(台灣)‎ (zh_TW)

安装

系统需求:

  • Intel Mac (iPhone SDK 需求)
  • Mac OS X 10.5.5 or later (iPhone SDK 需求)
  • iPhone SDK 3.x 或更高版本(调试需 2.2 - 5.1). 注意: 在iPhone SDK 3.0链接时,存在一个漏洞. 更多信息参考下文.

部分特征:

  • 模拟器支持
  • Xcode模板直接支持(实际上是需要)将Pascal和Objective-C源文件在同一应用中使用
  • Pascal语言翻译了从SDK中抽取的OpenGL ES 1.1 C语言头文件(这是我们唯一能提供的, 因为这一文件时基于SGI开源许可证), 此文件在gles11单元中

在提问之前,请阅读安装盘镜像中的ReadMe.rtf文件全文. 这一文件包含了大量的需要关注的信息(尤其是关于模拟器使用的信息),以及当需要增加Pascal源文件时,如何替换使用的模板.

请注意,与其他的FPC发布版本不同,这一安装包会安装FPC的源文件和脚本文件,并运行这些脚本来编译FPC(当你向安装文件提供了iPhone SDK的安装路径,就会自动生成所需的C语言头文件的Pascal版本). 这一做法是为了符合iPhone SDK的协议条文, iPhone SDK协议不允许发布任何的有SDK衍生产物. 如果脚本因某种原因终止,你可以在以下路径/Developer/FreePascalCompiler/2.6.0/InstallScript/finish_fpc_iphone_install.command 重新加载. 你也可以从我们的官网下载.

如果你在安装结束后运行脚本过程中出现问题,请在提问时务必提供脚本所运行的完整终端截屏。

(Xcode 4兼容性问题: Xcode模板只在Xcode 3上运行, 而不能在Xcode 4上运行.)

iPhone SDK 3.0

iPhone SDK 3.0在链接过程中会出现一个由包含了FPC的Xcode模板引发的错误. 你可以通过在创建设置中的"其他链接器"中加入链接信息"-Wl,-no_order_inits"来回避这一错误. 这一修正已包含在了上文2.4.0rc1的链接中,但是你如果使用之前版本的模板,可能需要手动修改.

这个链接错误已经向苹果报告了(rdar://problem/7120987). 这一错误已经在Xcode4中修复.

Xcode 4, iOS SDK 5.0, Objective-Pascal

关于Xcode 4模板和在iOS上用Objective-Pascal编程,请参阅http://dl.dropbox.com/u/28343282/ObjP/index.html

苹果许可证限制

iPhone/iPod应用开发

FPC并不能回避苹果发布的对于iPhone/iPod Touch开发程序的要求.因此开发者必须注册一个苹果iPhone开发者项目账户(美元$99/年)来对真是硬件做FPC编译程序的开发(与常规的Xcode编译程序项目).

如果没有此许可,开发者只可以在模拟器上运行程序(也可能在已越狱的iPhone/iPod Touch上运行,但是这只限于自有设备).

关于苹果iPhone开发项目的更多信息,请参阅: http://developer.apple.com/iphone/program/

开发所需的Pascal单元

发布iPhone SDK衍生品是违反iPhone SDK协议的,这包括了Pascal语言对于框架头文件的翻译版本.因此,如何在发布包括了GUI的纯Pascal程序同时,又遵守苹果iPhone SDK协议是一项巨大的挑战.更多信息,请参阅ReadMe.rtf(包含在上文的.dmg镜像文件中).

开发中的技术局限

至今,我们还无从得知是否能够将应用复制到iPhone/iPod Touch上并执行而无须使用Xcode. 但毋庸置疑的是可以在任何IDE(Lazarus, Lightweight IDE等)上开发iPhone/iPod Touch,并在模拟器上运行.但是所有的应用必须在Xcode上传见以加载到iPhone/iPod Touch设备上并在设备上调试.

iPhone模拟器与iPhone的不同

iPhone模拟器让iPhone操作系统API能够被一般的Mac应用使用,从而模拟设备所能提供的环境.通过允许在Mac系统上运行应用,模拟器提供了一种无需设备的快速应用调试功能.但是,在模拟器上运行并不等同于在设备上运行.

模拟器使用的是低层的Mac系统版本的iPhone操作系统框架,而非设备所使用的版本.总体而言,模拟器是一个优秀的工具来进行初步的调试工作.但是必须谨记,因为模拟器不能模拟设备的功能,必须在真实设备上对于引用进行最终调试以及运行效果分析.这样做的主要原因在于在模拟器是运行的程序可以直接使用其他Mac系统的框架与功能,而这些框架与功能是iPhone/iPod Touch设备所没有的.

在iPhone/iPod Touch上编译和运行纯Pascal应用

纯命令行应用能够在iPhone/iPod Touch上运行,除非输出结果只在gdb控制台(如果通过Xcode进行运行和调试,按cmd-shift-r或选择Run->Console)或设备的控制台日志(如果在iPhone/iPod Touch上执行)上可见.对于图形用户界面应用,需要用到上文中提到的由于协议而不能发布的头文件翻译.当然,也可以使用自定义的C头文件Pascal翻译(最好是使用自动工具创建).

仅使用Xcode

  1. 由模板创建新的项目
  2. 从项目中移除除*Prefix.pch, Info.plist外的所有文件、框架和产品
  3. 添加新的Pascal原文件 (Project->Add to Project...)
  4. 双击在左上角的Xcode文件列表中的项目图标,进入Build标签,修改FPC_MAIN_FILE设置为所新添加的测试程序的文件名.
  5. 创建程序

使用编译指令和Xcode

如果你已经使用命令行编译程序(使用Darwin/ARM),将产生的二进制文件复制到Xcode项目中,并在Xcode中运行运行此程序,Xcode将会调用运行这一二进制文件而非原程序(这样仅仅是为了保证Xcode所使用的是最新的原程序,而无需Xcode对其再次连接).你可以使用项目的默认模板实现这一功能,而无需对项目进行进一步设置.

你可以在项目视图中打开Products文件夹找到Xcode的二进制文件,右键单击(或ctrl+单击).app文件,选择"Reveal in Finder". 二进制文件的目录即program.app/Contents/MacOS(将program.app替换为当前目录). 将MacOS文件夹中的全部文件替换为你所编译的二进制文件(可以使用命令行命令cp).

对Darwin/ARM程序进行编译的命令行命令(将本节中的"Developer"替换为SDK的安装目录):

对FPC 2.6.0:

ppcarm -Cparmv6 -Cfvfpv2 -FD/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin -XR/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.2.sdk program.pas

对iPhone模拟器 (使用上文中说明的OS_TARGET)

ppc388 -Tiphonesim  -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas

对FPC 2.6.0之前版本:

ppcarm -FD/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin -XR/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.0.sdk program.pas

对iPhone模拟器

ppc388  -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas

在iPhone模拟器上编译和运行纯Pascal应用

在模拟器上编译和连接需要ppc386编译器. 对于iPhone模拟器和Mac系统应用之间仅有些许不同,主要体现在iPhone的Sim应用需要连接到不同与Mac应用的的构架上.

上文已经介绍了FPC 2.6.0编译iphonesim应用. 对于SDK 3.2,需要更高版本的FPC包对iphonesim目标文件进行编译(参阅 #17470). 原因: 这种情况下的FPC编译没有较大改变(i386目标文件),但是Objective-C ABI不同.对于Darwin-i386程序FPC使用ObjC1(与OSX10.4以及更早版本兼容),同时iPhonesim-i386仅使用ObjC2.(较早的iPhoneSim SDK 2.x和3.0允许使用ObjC1)

一些构架师iPhone专有的(UIKit),另一些兼容Mac OS X和iOS(CoreFoundation, CoreGraphics等).iPhoneSim SDK提供这些构架的独立版本.为了确保这些构架的SDK版本能够使用,你需要向编译器说明需要的SDK版本(与编译运行在设备上的应用时一样):

 fpc simtest.pas -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk

此处 /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk 是iPhoneSim SDK的跟目录. 你的iPhone SDK安装路径决定了此目录的位置.

目前,至少有3个版本的iPhone SDK: 2.2.1, 3.0, 3.1.根据你需要的不同版本,路径分别修改为(以上为3.0):

  • SDK version 2.2.1: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk
  • SDK version 3.0: /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk

等.

安装ARM交叉编译器

可下载的FPC/iPhone包包括了一个名为ppcarm的交叉编译器用来传见iPhone应用.如果你希望使用SVN中最新版本的编译器和单元,你可以按如下步骤操作:

需求: iOS SDK必须已通过标准Xcode开发工具安装,并且安装路径上没有空格.

1) 复制/Developer/FreePascalCompiler/2.6.0/Source/rtl/darwin/arm/sig_cpu.inc(这个文件会在安装FPC iPhone SDK集成开发包后自动生成)到你的SVN本地rtl/darwin/arm目录.

2) 在你的SVN目录的FPC顶层目录中执行如下命令(替换第一行中的/Developer为你的iPhone SDK安装目录,第二行中的iPhoneOS4.2.sdk为你需要使用的SDK版本):

 export IPHONEPLATFORMBASEDIR=/Developer/Platforms/iPhoneOS.platform/Developer
 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

3) 安装(如上,替换SDK目录和版本号):

 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
 sudo ln -sf ../lib/fpc/2.5.1/ppcrossarm /usr/local/bin/ppcarm

(可以在"sudo make"命令的最后加上"INSTALL_PREFIX=xyz"参数来将文件安装到任意的"xyz"目录下,而非/usr/local目录.这种情况下,需要修改"sudo ln"命令的路径).

更多信息

参考信息