Sign in Join
Wiki copytemporary

iPhone/iPod development/zh CN

한국어 · English · 中文(中国) · 中文(台灣)

安装

系统需求:

部分特征:

在提问之前,请阅读安装盘镜像中的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:

pascal
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)

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

对FPC 2.6.0之前版本:

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

对iPhone模拟器

pascal
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版本(与编译运行在设备上的应用时一样):

text
 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):

等.

安装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版本):

text
 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目录和版本号):

text
 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"命令的路径).

更多信息

参考信息


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.

Revision 2, last changed by WikiArchive .

Edited on wiki.freepascal.org by 3 people, 2013–2015

From the official wiki's backup of 26 May 2024: who edited this page there, and when. Edits made there after that date were not recorded, and the earlier versions are not shown here; the main page says why.

WhenWhoWhat changed
GarphyCreated page
Garphy安装
Garphy苹果许可证限制
Garphy安装
GarphyiPhone/iPod应用开发
Garphy开发所需的Pascal单元
Garphy开发中的技术局限
GarphyiPhone模拟器与iPhone的不同
Garphy在iPhone/iPod Touch上编译和运行纯Pascal应用
Garphy仅使用Xcode
Garphy使用编译指令和Xcode
Garphy在iPhone/iPod Touch上编译和运行纯Pascal应用
Garphy在iPhone模拟器上编译和运行纯Pascal应用
Garphy安装ARM交叉编译器
Garphy更多信息
Garphy参考信息
Garphy参考信息
Swen (minor)
FTurtle

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.