iPhone/iPoddevelopmentwith Lazarus/FreePascal(FPC)
iPhone/iPod基于FreePascal和跨平臺神器Lazarus的開發(fā)
轉(zhuǎn)載自: "http://wiki.lazarus.freepascal.org/index.php?title=iPhone/iPod_development/zh_CN"安裝
系統(tǒng)需求:
部分特征:
在提問之前,請閱讀安裝盤鏡像中的ReadMe.rtf文件全文.這一文件包含了大量的需要關(guān)注的信息(尤其是關(guān)于模擬器使用的信息),以及當需要增加Pascal源文件時,如何替換使用的模板.

請注意,與其他的FPC發(fā)布版本不同,這一安裝包會安裝FPC的源文件和腳本文件,并運行這些腳本來編譯FPC(當你向安裝文件提供了iPhoneSDK的安裝路徑,就會自動生成所需的C語言頭文件的Pascal版本). 這一做法是為了符合iPhone SDK的協(xié)議條文,iPhone SDK協(xié)議不允許發(fā)布任何的有SDK衍生產(chǎn)物.如果腳本因某種原因終止,你可以在以下路徑/Developer/FreePascalCompiler/2.6.0/InstallScript/finish_fpc_iphone_install.command重新加載. 你也可以從我們的官網(wǎng)下載.
如果你在安裝結(jié)束后運行腳本過程中出現(xiàn)問題,請在提問時務(wù)必提供腳本所運行的完整終端截屏。
(Xcode 4兼容性問題: Xcode模板只在Xcode 3上運行, 而不能在Xcode 4上運行.)
iPhone SDK 3.0
iPhone SDK 3.0在鏈接過程中會出現(xiàn)一個由包含了FPC的Xcode模板引發(fā)的錯誤.你可以通過在創(chuàng)建設(shè)置中的"其他鏈接器"中加入鏈接信息"-Wl,-no_order_inits"來回避這一錯誤.這一修正已包含在了上文2.4.0rc1的鏈接中,但是你如果使用之前版本的模板,可能需要手動修改.
這個鏈接錯誤已經(jīng)向蘋果報告了(rdar://problem/7120987).這一錯誤已經(jīng)在Xcode4中修復.
Xcode 4, iOS SDK 5.0,Objective-Pascal
關(guān)于Xcode4模板和在iOS上用Objective-Pascal編程,請參閱http://dl.dropbox.com/u/28343282/ObjP/index.html
蘋果許可證限制
iPhone/iPod應(yīng)用開發(fā)
FPC并不能回避蘋果發(fā)布的對于iPhone/iPodTouch開發(fā)程序的要求.因此開發(fā)者必須注冊一個蘋果iPhone開發(fā)者項目賬戶(美元$99/年)來對真是硬件做FPC編譯程序的開發(fā)(與常規(guī)的Xcode編譯程序項目).
如果沒有此許可,開發(fā)者只可以在模擬器上運行程序(也可能在已越獄的iPhone/iPodTouch上運行,但是這只限于自有設(shè)備).
關(guān)于蘋果iPhone開發(fā)項目的更多信息,請參閱: http://developer.apple.com/iphone/program/
開發(fā)所需的Pascal單元
發(fā)布iPhone SDK衍生品是違反iPhoneSDK協(xié)議的,這包括了Pascal語言對于框架頭文件的翻譯版本.因此,如何在發(fā)布包括了GUI的純Pascal程序同時,又遵守蘋果iPhoneSDK協(xié)議是一項巨大的挑戰(zhàn).更多信息,請參閱ReadMe.rtf(包含在上文的.dmg鏡像文件中).
開發(fā)中的技術(shù)局限
至今,我們還無從得知是否能夠?qū)?yīng)用復制到iPhone/iPod Touch上并執(zhí)行而無須使用Xcode.但毋庸置疑的是可以在任何IDE(Lazarus, Lightweight IDE等)上開發(fā)iPhone/iPodTouch,并在模擬器上運行.但是所有的應(yīng)用必須在Xcode上傳見以加載到iPhone/iPodTouch設(shè)備上并在設(shè)備上調(diào)試.
iPhone模擬器與iPhone的不同
iPhone模擬器讓iPhone操作系統(tǒng)API能夠被一般的Mac應(yīng)用使用,從而模擬設(shè)備所能提供的環(huán)境.通過允許在Mac系統(tǒng)上運行應(yīng)用,模擬器提供了一種無需設(shè)備的快速應(yīng)用調(diào)試功能.但是,在模擬器上運行并不等同于在設(shè)備上運行.
模擬器使用的是低層的Mac系統(tǒng)版本的iPhone操作系統(tǒng)框架,而非設(shè)備所使用的版本.總體而言,模擬器是一個優(yōu)秀的工具來進行初步的調(diào)試工作.但是必須謹記,因為模擬器不能模擬設(shè)備的功能,必須在真實設(shè)備上對于引用進行最終調(diào)試以及運行效果分析.這樣做的主要原因在于在模擬器是運行的程序可以直接使用其他Mac系統(tǒng)的框架與功能,而這些框架與功能是iPhone/iPodTouch設(shè)備所沒有的.
在iPhone/iPodTouch上編譯和運行純Pascal應(yīng)用
純命令行應(yīng)用能夠在iPhone/iPodTouch上運行,除非輸出結(jié)果只在gdb控制臺(如果通過Xcode進行運行和調(diào)試,按cmd-shift-r或選擇Run->Console)或設(shè)備的控制臺日志(如果在iPhone/iPodTouch上執(zhí)行)上可見.對于圖形用戶界面應(yīng)用,需要用到上文中提到的由于協(xié)議而不能發(fā)布的頭文件翻譯.當然,也可以使用自定義的C頭文件Pascal翻譯(最好是使用自動工具創(chuàng)建).
僅使用Xcode
- 由模板創(chuàng)建新的項目
- 從項目中移除除*Prefix.pch, Info.plist外的所有文件、框架和產(chǎn)品
- 添加新的Pascal原文件 (Project->Add to Project...)
- 雙擊在左上角的Xcode文件列表中的項目圖標,進入Build標簽,修改FPC_MAIN_FILE設(shè)置為所新添加的測試程序的文件名.
- 創(chuàng)建程序
使用編譯指令和Xcode
如果你已經(jīng)使用命令行編譯程序(使用Darwin/ARM),將產(chǎn)生的二進制文件復制到Xcode項目中,并在Xcode中運行運行此程序,Xcode將會調(diào)用運行這一二進制文件而非原程序(這樣僅僅是為了保證Xcode所使用的是最新的原程序,而無需Xcode對其再次連接).你可以使用項目的默認模板實現(xiàn)這一功能,而無需對項目進行進一步設(shè)置.
你可以在項目視圖中打開Products文件夾找到Xcode的二進制文件,右鍵單擊(或ctrl+單擊).app文件,選擇"Revealin Finder".二進制文件的目錄即program.app/Contents/MacOS(將program.app替換為當前目錄).將MacOS文件夾中的全部文件替換為你所編譯的二進制文件(可以使用命令行命令cp).
對Darwin/ARM程序進行編譯的命令行命令(將本節(jié)中的"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應(yīng)用
在模擬器上編譯和連接需要ppc386編譯器.對于iPhone模擬器和Mac系統(tǒng)應(yīng)用之間僅有些許不同,主要體現(xiàn)在iPhone的Sim應(yīng)用需要連接到不同與Mac應(yīng)用的的構(gòu)架上.
上文已經(jīng)介紹了FPC 2.6.0編譯iphonesim應(yīng)用.對于SDK 3.2,需要更高版本的FPC包對iphonesim目標文件進行編譯(參閱 #17470). 原因:這種情況下的FPC編譯沒有較大改變(i386目標文件),但是Objective-CABI不同.對于Darwin-i386程序FPC使用ObjC1(與OSX10.4以及更早版本兼容),同時iPhonesim-i386僅使用ObjC2.(較早的iPhoneSimSDK 2.x和3.0允許使用ObjC1)
一些構(gòu)架師iPhone專有的(UIKit),另一些兼容Mac OS X和iOS(CoreFoundation,CoreGraphics等).iPhoneSimSDK提供這些構(gòu)架的獨立版本.為了確保這些構(gòu)架的SDK版本能夠使用,你需要向編譯器說明需要的SDK版本(與編譯運行在設(shè)備上的應(yīng)用時一樣):
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安裝路徑?jīng)Q定了此目錄的位置.
目前,至少有3個版本的iPhone SDK: 2.2.1, 3.0,3.1.根據(jù)你需要的不同版本,路徑分別修改為(以上為3.0):
等.
安裝ARM交叉編譯器
可下載的FPC/iPhone包包括了一個名為ppcarm的交叉編譯器用來傳見iPhone應(yīng)用.如果你希望使用SVN中最新版本的編譯器和單元,你可以按如下步驟操作:
需求: iOS SDK必須已通過標準Xcode開發(fā)工具安裝,并且安裝路徑上沒有空格.
1)復制/Developer/FreePascalCompiler/2.6.0/Source/rtl/darwin/arm/sig_cpu.inc(這個文件會在安裝FPCiPhone SDK集成開發(fā)包后自動生成)到你的SVN本地rtl/darwin/arm目錄.
2) 在你的SVN目錄的FPC頂層目錄中執(zhí)行如下命令(替換第一行中的/Developer為你的iPhoneSDK安裝目錄,第二行中的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" all3) 安裝(如上,替換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(可以在"sudomake"命令的最后加上"INSTALL_PREFIX=xyz"參數(shù)來將文件安裝到任意的"xyz"目錄下,而非/usr/local目錄.這種情況下,需要修改"sudoln"命令的路徑).
愛華網(wǎng)



