iPhone/iPod development/zh CN: what changed
Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.
| Old | New | Line | |
|---|---|---|---|
| 1 | 1 | ## 安装 | |
| 2 | 2 | ||
| 3 | 3 | 系统需求: | |
| 4 | 4 | ||
| 5 | 5 | - Intel Mac (iPhone SDK 需求) | |
| 6 | 6 | - Mac OS X 10.5.5 or later (iPhone SDK 需求) | |
| 7 | 7 | - iPhone SDK 3.x 或更高版本(调试需 2.2 - 5.1). **注意:** 在iPhone SDK 3.0链接时,存在一个漏洞. 更多信息参考下文. | |
| 8 | 8 | ||
| 9 | 9 | 部分特征: | |
| 10 | 10 | ||
| 11 | 11 | - 模拟器支持 | |
| 12 | 12 | - Xcode模板直接支持(实际上是需要)将Pascal和Objective-C源文件在同一应用中使用 | |
| 13 | 13 | - Pascal语言翻译了从SDK中抽取的OpenGL ES 1.1 C语言头文件(这是我们唯一能提供的, 因为这一文件时基于SGI开源许可证), 此文件在gles11单元中 | |
| 14 | 14 | ||
| 15 | 15 | 在提问之前,请阅读安装盘镜像中的ReadMe.rtf文件全文. 这一文件包含了大量的需要关注的信息(尤其是关于模拟器使用的信息),以及当需要增加Pascal源文件时,如何替换使用的模板. | |
| 16 | 16 | ||
| 17 | 17 | 请注意,与其他的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). | |
| 18 | 18 | ||
| 19 | 19 | 如果你在安装结束后运行脚本过程中出现问题,请在提问时务必提供脚本所运行的完整终端截屏。 | |
| 20 | 20 | ||
| 21 | 21 | (Xcode 4兼容性问题: Xcode模板只在Xcode 3上运行, 而不能在Xcode 4上运行.) | |
| 22 | 22 | ||
| 23 | 23 | ### iPhone SDK 3.0 | |
| 24 | 24 | ||
| 25 | 25 | iPhone SDK 3.0在链接过程中会出现一个由包含了FPC的Xcode模板引发的错误. 你可以通过在创建设置中的"其他链接器"中加入链接信息"-Wl,-no_order_inits"来回避这一错误. 这一修正已包含在了上文2.4.0rc1的链接中,但是你如果使用之前版本的模板,可能需要手动修改. | |
| 26 | 26 | ||
| 27 | 27 | 这个链接错误已经向苹果报告了([rdar://problem/7120987](http://openradar.appspot.com/7120987)). 这一错误已经在Xcode4中修复. | |
| 28 | 28 | ||
| 29 | 29 | ### Xcode 4, iOS SDK 5.0, Objective-Pascal | |
| 30 | 30 | ||
| 31 | 31 | 关于Xcode 4模板和在iOS上用Objective-Pascal编程,请参阅http://dl.dropbox.com/u/28343282/ObjP/index.html | |
| 32 | 32 | ||
| 33 | 33 | ## 苹果许可证限制 | |
| 34 | 34 | ||
| 35 | 35 | ### iPhone/iPod应用开发 | |
| 36 | 36 | ||
| 37 | 37 | FPC并不能回避苹果发布的对于iPhone/iPod Touch开发程序的要求.因此开发者必须注册一个苹果iPhone开发者项目账户(美元\$99/年)来对真是硬件做FPC编译程序的开发(与常规的Xcode编译程序项目). | |
| 38 | 38 | ||
| 39 | 39 | 如果没有此许可,开发者只可以在模拟器上运行程序(也可能在已越狱的iPhone/iPod Touch上运行,但是这只限于自有设备). | |
| 40 | 40 | ||
| 41 | 41 | 关于苹果iPhone开发项目的更多信息,请参阅: <http://developer.apple.com/iphone/program/> | |
| 42 | 42 | ||
| 43 | 43 | ### 开发所需的Pascal单元 | |
| 44 | 44 | ||
| 45 | 45 | 发布iPhone SDK衍生品是违反iPhone SDK协议的,这包括了Pascal语言对于框架头文件的翻译版本.因此,如何在发布包括了GUI的纯Pascal程序同时,又遵守苹果iPhone SDK协议是一项巨大的挑战.更多信息,请参阅ReadMe.rtf(包含在上文的.dmg镜像文件中). | |
| 46 | 46 | ||
| 47 | 47 | ## 开发中的技术局限 | |
| 48 | 48 | ||
| 49 | 49 | 至今,我们还无从得知是否能够将应用复制到iPhone/iPod Touch上并执行而无须使用Xcode. 但毋庸置疑的是可以在任何IDE(Lazarus, Lightweight IDE等)上开发iPhone/iPod Touch,并在模拟器上运行.但是所有的应用必须在Xcode上传见以加载到iPhone/iPod Touch设备上并在设备上调试. | |
| 50 | 50 | ||
| 51 | 51 | ### iPhone模拟器与iPhone的不同 | |
| 52 | 52 | ||
| 53 | 53 | iPhone模拟器让iPhone操作系统API能够被一般的Mac应用使用,从而模拟设备所能提供的环境.通过允许在Mac系统上运行应用,模拟器提供了一种无需设备的快速应用调试功能.但是,在模拟器上运行并不等同于在设备上运行. | |
| 54 | 54 | ||
| 55 | 55 | 模拟器使用的是低层的Mac系统版本的iPhone操作系统框架,而非设备所使用的版本.总体而言,模拟器是一个优秀的工具来进行初步的调试工作.但是必须谨记,因为模拟器不能模拟设备的功能,必须在真实设备上对于引用进行最终调试以及运行效果分析.这样做的主要原因在于在模拟器是运行的程序可以直接使用其他Mac系统的框架与功能,而这些框架与功能是iPhone/iPod Touch设备所没有的. | |
| 56 | 56 | ||
| 57 | 57 | ## 在iPhone/iPod Touch上编译和运行纯Pascal应用 | |
| 58 | 58 | ||
| 59 | 59 | 纯命令行应用能够在iPhone/iPod Touch上运行,除非输出结果只在gdb控制台(如果通过Xcode进行运行和调试,按cmd-shift-r或选择Run-\>Console)或设备的控制台日志(如果在iPhone/iPod Touch上执行)上可见.对于图形用户界面应用,需要用到上文中提到的由于协议而不能发布的头文件翻译.当然,也可以使用自定义的C头文件Pascal翻译(最好是使用自动工具创建). | |
| 60 | 60 | ||
| 61 | 61 | ### 仅使用Xcode | |
| 62 | 62 | ||
| 63 | 63 | 1. 由模板创建新的项目 | |
| 64 | 64 | 2. 从项目中移除除*Prefix.pch, Info.plist外的所有文件、框架和产品 | |
| 65 | 65 | 3. 添加新的Pascal原文件 (Project-\>Add to Project...) | |
| 66 | 66 | 4. 双击在左上角的Xcode文件列表中的项目图标,进入`Build`标签,修改`FPC_MAIN_FILE`设置为所新添加的测试程序的文件名. | |
| 67 | 67 | 5. 创建程序 | |
| 68 | 68 | ||
| 69 | 69 | ### 使用编译指令和Xcode | |
| 70 | 70 | ||
| 71 | 71 | 如果你已经使用命令行编译程序(使用Darwin/ARM),将产生的二进制文件复制到Xcode项目中,并在Xcode中运行运行此程序,Xcode将会调用运行这一二进制文件而非原程序(这样仅仅是为了保证Xcode所使用的是最新的原程序,而无需Xcode对其再次连接).你可以使用项目的默认模板实现这一功能,而无需对项目进行进一步设置. | |
| 72 | 72 | ||
| 73 | 73 | 你可以在项目视图中打开`Products`文件夹找到Xcode的二进制文件,右键单击(或ctrl+单击).app文件,选择"Reveal in Finder". 二进制文件的目录即program.app/Contents/MacOS(将`program.app`替换为当前目录). 将`MacOS`文件夹中的全部文件替换为你所编译的二进制文件(可以使用命令行命令`cp`). | |
| 74 | 74 | ||
| 75 | 75 | 对Darwin/ARM程序进行编译的命令行命令(将本节中的"Developer"替换为SDK的安装目录): | |
| 76 | 76 | ||
| 77 | 77 | **对FPC 2.6.0:** | |
| 78 | 78 | ||
| 79 | - | ||
| 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 | + | ``` | |
| 80 | 82 | ||
| 81 | 83 | 对iPhone模拟器 (使用上文中说明的OS_TARGET) | |
| 82 | 84 | ||
| 83 | - | ||
| 85 | + | ``` pascal | |
| 86 | + | ppc388 -Tiphonesim -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas | |
| 87 | + | ``` | |
| 84 | 88 | ||
| 85 | 89 | **对FPC 2.6.0之前版本:** | |
| 86 | 90 | ||
| 87 | - | ||
| 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 | + | ``` | |
| 88 | 94 | ||
| 89 | 95 | 对iPhone模拟器 | |
| 90 | 96 | ||
| 91 | - | ||
| 97 | + | ``` pascal | |
| 98 | + | ppc388 -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk program.pas | |
| 99 | + | ``` | |
| 92 | 100 | ||
| 93 | 101 | ## 在iPhone模拟器上编译和运行纯Pascal应用 | |
| 94 | 102 | ||
| 95 | 103 | 在模拟器上编译和连接需要ppc386编译器. 对于iPhone模拟器和Mac系统应用之间仅有些许不同,主要体现在iPhone的Sim应用需要连接到不同与Mac应用的的构架上. | |
| 96 | 104 | ||
| 97 | 105 | 上文已经介绍了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) | |
| 98 | 106 | ||
| 99 | 107 | 一些构架师iPhone专有的(UIKit),另一些兼容Mac OS X和iOS(CoreFoundation, CoreGraphics等).iPhoneSim SDK提供这些构架的独立版本.为了确保这些构架的SDK版本能够使用,你需要向编译器说明需要的SDK版本(与编译运行在设备上的应用时一样): | |
| 100 | 108 | ||
| 101 | - | ||
| 109 | + | ```text | |
| 110 | + | fpc simtest.pas -XR/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk | |
| 111 | + | ``` | |
| 102 | 112 | ||
| 103 | 113 | 此处 */Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk* 是iPhoneSim SDK的跟目录. 你的iPhone SDK安装路径决定了此目录的位置. | |
| 104 | 114 | ||
| 105 | 115 | 目前,至少有3个版本的iPhone SDK: 2.2.1, 3.0, 3.1.根据你需要的不同版本,路径分别修改为(以上为3.0): | |
| 106 | 116 | ||
| 107 | 117 | - SDK version 2.2.1: */Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator2.2.1.sdk* | |
| 108 | 118 | - SDK version 3.0: */Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.0.sdk* | |
| 109 | 119 | ||
| 110 | 120 | 等. | |
| 111 | 121 | ||
| 112 | 122 | ## 安装ARM交叉编译器 | |
| 113 | 123 | ||
| 114 | 124 | 可下载的FPC/iPhone包包括了一个名为*ppcarm*的交叉编译器用来传见iPhone应用.如果你希望使用SVN中最新版本的编译器和单元,你可以按如下步骤操作: | |
| 115 | 125 | ||
| 116 | 126 | **需求:** iOS SDK必须已通过标准Xcode开发工具安装,并且安装路径上没有空格. | |
| 117 | 127 | ||
| 118 | 128 | 1\) 复制*/Developer/FreePascalCompiler/2.6.0/Source/rtl/darwin/arm/sig_cpu.inc*(这个文件会在安装FPC iPhone SDK集成开发包后自动生成)到你的SVN本地*rtl/darwin/arm*目录. | |
| 119 | 129 | ||
| 120 | 130 | 2\) 在你的SVN目录的FPC顶层目录中执行如下命令(替换第一行中的*/Developer*为你的iPhone SDK安装目录,第二行中的*iPhoneOS4.2.sdk*为你需要使用的SDK版本): | |
| 121 | 131 | ||
| 122 | - | ||
| 123 | - | ||
| 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 | + | ``` | |
| 124 | 136 | ||
| 125 | 137 | 3\) 安装(如上,替换SDK目录和版本号): | |
| 126 | 138 | ||
| 127 | - | ||
| 128 | - | ||
| 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 | + | ``` | |
| 129 | 143 | ||
| 130 | 144 | (可以在"sudo make"命令的最后加上"INSTALL_PREFIX=xyz"参数来将文件安装到任意的"xyz"目录下,而非*/usr/local*目录.这种情况下,需要修改"sudo ln"命令的路径). | |
| 131 | 145 | ||
| 132 | 146 | ## 更多信息 | |
| 133 | 147 | ||
| 134 | 148 | - [使用FPC和SDL的简单iPhone应用范例](http://freeze-dev.de/blog/?p=492) | |
| 135 | 149 | ||
| 136 | 150 | ## 参考信息 | |
| 137 | 151 | ||
| 138 | 152 | - [[iPhone headers translator|iPhone头文件Pascal语言翻译器]] | |
| 139 | 153 | ||
| 140 | 154 | --- | |
| 141 | 155 | *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).* | |
| 142 | 156 | Category: iOS/zh CN | |
| 143 | 157 | Category: zh |
