iphone 3.1.2开发环境搭建——linux平台
一、引子
前段時(shí)間看到了apple公司發(fā)布了iphone os4.0的預(yù)覽視頻,iphone終于打算支持多任務(wù)了,尤其是對(duì)于預(yù)覽視頻中的skype軟件的展示讓人印象深刻。
一般來(lái)說(shuō),想做一名正規(guī)的iphone應(yīng)用開(kāi)發(fā)者應(yīng)當(dāng)至少準(zhǔn)備三件事情:
(1)一臺(tái)apple的電腦
可以是mac book或者mac mini,國(guó)內(nèi)比較“節(jié)儉”的公司大都選擇mac mini(現(xiàn)價(jià)大概5k左右),然后配個(gè)便宜的顯示器;而對(duì)于mac book最便宜的也要上萬(wàn),在此按下不表。沒(méi)辦法,iphone的集成開(kāi)發(fā)環(huán)境只能夠在apple的電腦上運(yùn)行。
(2)一臺(tái)iphone
最好是iphone 3gs,(現(xiàn)價(jià)大概4.5k左右);當(dāng)然iphone 3g也可以,不過(guò)從開(kāi)發(fā)者的角度來(lái)看,最好性能能強(qiáng)一些(不保證每一位開(kāi)發(fā)者一開(kāi)始接觸iphone開(kāi)發(fā)就能寫(xiě)出高效率的代碼)。
(3)一個(gè)開(kāi)發(fā)者授權(quán)
到蘋(píng)果開(kāi)發(fā)者網(wǎng)站上面注冊(cè)一個(gè)開(kāi)發(fā)者ID,然后為這個(gè)ID申請(qǐng)開(kāi)發(fā)者授權(quán)(需要每年交納99美金,注意,單位是美金,需要考慮匯率問(wèn)題,呵呵)。
有了這些以后就是下載iphone的sdk,用xcode開(kāi)發(fā)應(yīng)用,真機(jī)測(cè)試,然后送到app store里面發(fā)布,最后就是每天看看帳戶。雖然網(wǎng)上一直有謠傳說(shuō)iphone的用戶“人傻、錢(qián)多”,隨便做點(diǎn)啥都能賺錢(qián),但經(jīng)過(guò)偶的觀察,iphone的用戶是強(qiáng)調(diào)創(chuàng)意、時(shí)尚和個(gè)性的,對(duì)于操作流暢性非常挑剔(這主要是由于apple“寵壞”了這些用戶)。所以在app store里面絕對(duì)不可能“隨便”做點(diǎn)東西就能賺到錢(qián)的,“隨便”做點(diǎn)東西的結(jié)果就是讓apple公司“隨便”地賺到了那可憐的99美金(當(dāng)然,還包括賣(mài)給開(kāi)發(fā)者的mac電腦和iphone的收入),而到頭來(lái)開(kāi)發(fā)者還是兩手空空。
當(dāng)然,上面這些是對(duì)于想通過(guò)app store賺到錢(qián)的開(kāi)發(fā)者來(lái)說(shuō)的。偶個(gè)人對(duì)apple向開(kāi)發(fā)者收錢(qián)的這個(gè)事情一直比較反感(同樣,對(duì)于symbian sign要花170歐元的行為,在此也一并聲討一下)。所以,偶在做一些研究和實(shí)驗(yàn)的時(shí)候,一般都是從最省錢(qián)的角度出發(fā)。于是偶決定在辦公電腦上搭建一套簡(jiǎn)單的開(kāi)發(fā)環(huán)境(一直以來(lái),偶的辦公電腦上只有l(wèi)inux),閑暇時(shí)候可以玩玩home brew。(還是印證了那句名言:少壯不努力,老大做it)。
二、準(zhǔn)備工作
1、基本原理
iphone 2g/3g的cpu都是采用三星的S3C6400,而3gs的cpu是采用S5PC100總體上來(lái)講都是arm體系結(jié)構(gòu)。從原理上來(lái)說(shuō),給iphone開(kāi)發(fā)應(yīng)該與其他的嵌入式設(shè)備開(kāi)發(fā)沒(méi)有什么區(qū)別,把代碼用支持arm指令集的編譯程序編譯一下,生成在arm系統(tǒng)下可以運(yùn)行的文件即可(例如,在pc上面生成arm平臺(tái)可以運(yùn)行的文件,這也就是所謂的“交叉編譯”了)。下面,偶就要在linux平臺(tái)下面建立這樣一套交叉編譯的環(huán)境了,跟著偶一步一步的來(lái),應(yīng)該可以順利完成環(huán)境搭建(看個(gè)人的造化了,哈哈)。
2、開(kāi)始前要想好的事情
缺點(diǎn):
(1)linux下面的sdk開(kāi)發(fā)出來(lái)的軟件只能夠用于被jailbreak(俗稱越獄)過(guò)的iphone手機(jī)。
(2)不支持iphone模擬器,不支持單步調(diào)試,不支持真機(jī)調(diào)試,沒(méi)有ide集成開(kāi)發(fā)環(huán)境。
(3)目前最高版本只能支持到iphone sdk 3.1.2(估計(jì)3.2未來(lái)也不會(huì)出了,都在等4.0呢)。
(4)環(huán)境配置過(guò)程繁瑣耗時(shí),即使按照本文也有可能失敗(“即使自宮,未必成功?!”,哈哈)。
(5)運(yùn)行此sdk開(kāi)發(fā)出來(lái)的應(yīng)用,存在讓iphone變磚的可能(其實(shí)只要jailbreak,就會(huì)有變磚的可能)。
優(yōu)點(diǎn):
(1)不用交99美金購(gòu)買(mǎi)開(kāi)發(fā)者權(quán)限。
(2)不用購(gòu)買(mǎi)apple的電腦。
(3)。。。可以用來(lái)消磨時(shí)間(不知道這算不算是優(yōu)點(diǎn))。
如果面對(duì)上述這么多缺點(diǎn),仍然執(zhí)意要安裝的話,請(qǐng)跟隨偶繼續(xù)往下做:
3、開(kāi)始前的準(zhǔn)備工作
偶的電腦是:thinkpad sl400。
系統(tǒng)是:slackware 13.0
內(nèi)核版本:Linux wayne 2.6.29.6-smp-wayne #1 SMP Thu Mar 18 20:00:29 HKT 2010 i686 Intel(R) Core(TM)2 Duo CPU???? T5870? @ 2.00GHz GenuineIntel GNU/Linux
gcc版本信息:
Reading specs from /usr/lib/gcc/i486-slackware-linux/4.3.3/specs
Target: i486-slackware-linux
Configured with: ../gcc-4.3.3/configure --prefix=/usr --libdir=/usr/lib --enable-shared --enable-bootstrap --enable-languages=ada,c,c++,fortran,java,objc --enable-threads=posix --enable-checking=release --with-system-zlib --disable-libunwind-exceptions --enable-__cxa_atexit --enable-libssp --with-gnu-ld --verbose --with-arch=i486 --target=i486-slackware-linux --build=i486-slackware-linux --host=i486-slackware-linux
Thread model: posix
gcc version 4.3.3 (GCC)
測(cè)試手機(jī)是jailbreak過(guò)的iphone 3gs,系統(tǒng)為iphone os 3.1.2
理論上來(lái)說(shuō),按照下面的方式開(kāi)發(fā)出來(lái)的程序在iphone 3g平臺(tái)上也能夠運(yùn)行。
(1)下載iphone的sdk
此sdk必須是3.1.2的官方sdk,下載地址如下:
http://ipsw.info/iphone_sdk_3.1.2_with_xcode_3.2.1__snow_leopard__10m2003.dmg
預(yù)先說(shuō)明,這東西可是非常大,2.5G,要下載一整天呢!(想到可以免費(fèi)用。。。偶忍了。。。)
(2)下載iphone 3g的firmware(固件)
注意,一定是iphone 3g的,3gs的firmware是不可以的。
(好在開(kāi)發(fā)出來(lái)的軟件在3g和3gs上面都可以跑!apple的向下兼容做得不錯(cuò))
下載地址如下:
http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7265.20091008.Xsd32/iPhone1,2_3.1.2_7D11_Restore.ipsw
(3)通過(guò)svn下載工具鏈腳本
cd ~
mkdir -p iphone_dev/toolchain
cd iphone_dev/toolchain
svn checkout http://iphonedevonlinux.googlecode.com/svn/trunk/ ./
這個(gè)腳本工程很小,如果網(wǎng)絡(luò)沒(méi)問(wèn)題的話,應(yīng)該很快就會(huì)下載好。
(4)下載darwin-tools.list里面的所有文件
這個(gè)文件是在iphone_dev/toolchain目錄下可以找到,這個(gè)文件里面有一個(gè)長(zhǎng)長(zhǎng)的文件列表。
可以用kget或者wget把這些文件都下載好。
(5)xar工具下載和安裝
http://xar.googlecode.com/files/xar-1.5.2.tar.gz
這個(gè)工具是用來(lái)解包dmg文件的,slackware上面默認(rèn)是沒(méi)有這個(gè)工具的,直接通過(guò)源代碼安裝即可。
上面這幾個(gè)步驟可以說(shuō)是整個(gè)linux環(huán)境下iphone應(yīng)用編譯環(huán)境最為耗時(shí)的準(zhǔn)備工作了。
三、讓我們開(kāi)始吧(按照老外的說(shuō)法就是——get our hands dirty)
以下操作,為了方便起見(jiàn),直接輸入命令了。
(1)進(jìn)入安裝腳本目錄
cd ~/iphone_dev/toolchain
(2)創(chuàng)建files目錄和子目錄
mkdir -p files/{firmware,darwin_sources}
(3)把iphone 3g的固件拷貝到files/firmware目錄下
cp ~/downloads/iPhone1,2_3.1.2_7D11_Restore.ipsw ./files/firmware/
(4)把iphone sdk拷貝到files目錄下
cp ~/downloads/iphone_sdk_3.1.2_with_xcode_3.2.1__snow_leopard__10m2003.dmg ./files/
(5)把前面下載的darwin-tools.list中的所有文件拷貝到darwin_sources目錄
cp ~/downloads/*.tar.gz ./files/darwin_sources/
(6)開(kāi)始修改toolchain.sh腳本
原本不需要修改這個(gè)腳本的,但是由于一些網(wǎng)絡(luò)和諧的問(wèn)題,導(dǎo)致國(guó)外的一個(gè)提供解碼串的wiki無(wú)法訪問(wèn),因此只好用這種土一點(diǎn)的辦法來(lái)解決了。
用喜愛(ài)的編輯器打開(kāi)toolchain.sh文件,找到下面這一行:
??? if [ -z "$DECRYPTION_KEY_SYSTEM" ] ; then
??????? echo "We need the decryption key for `basename $FW_RESTORE_SYSTEMDISK`."
??????? echo "I'm going to try to fetch it from $IPHONEWIKI_KEY_URL...."
然后在上面的if [....] ; then這一行語(yǔ)句的上面(再次強(qiáng)調(diào),是上面!)添加如下的一行: DECRYPTION_KEY_SYSTEM="a8a886d56011d2d98b190d0a498f6fcac719467047639cd601fd53a4a1d93c24e1b2ddc6"
修改完畢后,保存并退出。
(7)開(kāi)始解包頭文件
./toolchain.sh headers
(8)開(kāi)始解包firmware文件
./toolchain.sh firmware
(9)開(kāi)始解包drawin_sources
./toolchain.sh darwin_sources
這個(gè)過(guò)程會(huì)比較漫長(zhǎng),要有耐心。
(10)最后一步編譯,這一步事關(guān)成敗
./toolchain.sh build
(11)錯(cuò)誤處理
ld: library not found for -lc
collect2: ld returned 1 exit status
make[3]: *** [libgcc_s.dylib] error 1
....
make[2]: *** [stmp-multilib] error 2
rm gcov.pod fsf-funding.pod gfdl.pod gpl.pod cpp.pod gcc.pod
....
make[1]: *** [all-gcc] error 2
make[1]:leaving dir `/home/xxx/toolchain/toolchain/bld/gcc-4.2-iphone'
make: *** [all] error 2
則可以執(zhí)行如下命令:
cp ./sdks/iPhoneOS3.1.2.sdk/usr/lib/libSystem.B.dylib ./toolchain/bld/gcc-4.2-iphone/gcc/libc.dylib
然后,再次運(yùn)行如下命令:
./toolchain.sh build
如果看到如下提示,就代表環(huán)境搭建成功了。
It seems like the toolchain built!
ps:
這里提一句,關(guān)于上面的拷貝libc.dylib的命令,其實(shí)可以在運(yùn)行./toolchain.sh build命令以后,稍微等一小會(huì)兒,等到它開(kāi)始編譯的時(shí)候,直接打開(kāi)一個(gè)新的terminal窗口,然后進(jìn)入toolchain目錄,然后執(zhí)行這個(gè)拷貝的命令,這樣以來(lái),就可以一次性編譯成功了。
(12)設(shè)定環(huán)境變量
關(guān)于這個(gè),偶只把自己的配置貼出來(lái),各位可以根據(jù)自己的配置進(jìn)行修改和調(diào)整:
export PATH=/home/wayne/iphone_dev/toolchain/toolchain/pre/bin:$PATH
可以把這個(gè)設(shè)置保存在.bashrc或者/etc/profile里面,這些偶就不聒噪了。
四、測(cè)試編譯環(huán)境
1、編譯程序
這個(gè)過(guò)程很簡(jiǎn)單,只要進(jìn)入~/iphone_dev/toolchain/apps目錄下即可看到兩個(gè)用于測(cè)試的工程:
HelloToolchain和HelloWorldFirst。這個(gè)HelloWorldFirst是一個(gè)命令行的軟件,在iphone上面即使可以運(yùn)行了,也是在終端輸入一個(gè)HelloWorldFirst以后輸出一個(gè)hello world;而那個(gè)HelloToolchain是支持gui界面的,是一個(gè)textview,因此,比較有說(shuō)服力一些。
在這兩個(gè)目錄下面默認(rèn)的都有一個(gè)Makefile文件,這個(gè)文件應(yīng)該是缺少一些路徑的定義,怕麻煩的朋友可以直接使用偶的Makefile(參見(jiàn)本文的附件),這是偶手工改過(guò)的并且也在真機(jī)上運(yùn)行過(guò)的。用偶的Makefile替換掉原來(lái)那兩個(gè)項(xiàng)目的Makefile,然后執(zhí)行make即可。
如果這個(gè)過(guò)程中沒(méi)有顯示什么錯(cuò)誤,那么恭喜你,你的linux平臺(tái)的sdk已經(jīng)搭建成功了。
2、真機(jī)上運(yùn)行程序
好了,接下來(lái)就是更加有挑戰(zhàn)性的工作了——在真正的iphone上面運(yùn)行程序。但是在這之前還是要確認(rèn)一下手機(jī)沒(méi)有問(wèn)題。偶使用的是jailbreak過(guò)的iphone 3gs,利用blackrain越獄,利用cydia+wifi安裝的openssh,apt和ldid(這部分偶就懶得寫(xiě)了,iphone越獄的方法,幾乎“滿大街”都是)。
需要提一點(diǎn)的是關(guān)于ldid,這個(gè)工具是在iphone平臺(tái)上對(duì)二進(jìn)制文件進(jìn)行簽名的,網(wǎng)上很多人反應(yīng)在iphone 3gs下面,這個(gè)工具不好使了,但是經(jīng)過(guò)偶的真機(jī)測(cè)試,這個(gè)工具完全沒(méi)有問(wèn)題。
偶就把如何正確地安裝這個(gè)工具來(lái)簡(jiǎn)單地提一下:
(1)通過(guò)cydia安裝一個(gè)叫做terminal的程序,它是一個(gè)虛擬的命令行終端。
(2)把iphone聯(lián)上wifi,然后啟動(dòng)這個(gè)terminal。
(3)運(yùn)行su,輸入密碼(如果從沒(méi)輸入過(guò)密碼,默認(rèn)的密碼就是“alpine”,建議大家都給改掉,安全一些),得到root權(quán)限
(4)運(yùn)行如下命令:apt-get install ldid
(5)當(dāng)命令行界面上提示已經(jīng)安裝成功后才能代表安裝成功了。
好,開(kāi)始把HelloToolchain拷貝到手機(jī)的/Applications目錄下了。
(1)首先查看iphone連接wifi的ip地址(這個(gè)如果不會(huì)的話,可以直接跳過(guò)偶的文章。)
(2)在linux下面運(yùn)行如下命令:
cd ~/iphone_dev/toolchain/apps/HelloToolchain
make clean ; make
scp -rp ./HelloToolchain.app root@192.168.0.2:/Applications/
如果看到下面的輸出(別忘記輸入密碼!):
RSA key fingerprint is 33:bc:25:5a:a6:3c:21:72:5d:84:22:d4:4b:62:43:25.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.0.2' (RSA) to the list of known hosts.
root@192.168.0.2's password:
icon.png??????? 100% 1073???? 1.1KB/s?? 00:00???
Info.plist????? 100%? 746???? 0.7KB/s?? 00:00???
HelloToolchain_ 100%?? 13KB? 13.2KB/s?? 00:00???
HelloToolchain? 100%?? 61???? 0.1KB/s?? 00:00???
代表文件上傳成功。
(3)登錄到iphone里面,為剛剛的程序簽名
ssh root@192.168.0.2(輸入root密碼)
cd /Applications
cd /HelloToolchain
ldid -S HelloToolchain_ (注意,這里是HelloToolchain_,下劃線一定要有!)
好了,如此一來(lái),就都準(zhǔn)備好了!
很多人納悶,怎么在iphone的桌面上看不到程序的圖標(biāo)呢?!
別著急,運(yùn)行一下如下命令即可:
killall SpringBoard
這個(gè)命令是強(qiáng)行把iphone的桌面程序殺掉,然后iphone會(huì)自動(dòng)重新把這個(gè)桌面打開(kāi),這個(gè)時(shí)候就可以看到測(cè)試程序的圖標(biāo)了。
網(wǎng)上有句俗話“有圖有相”,偶就照兩張圖片上來(lái)秀一秀:
這是測(cè)試手機(jī)iphone 3gs的版本。
恩,界面上很漂亮,各位可以看到有“紅,藍(lán),綠”三種顏色的問(wèn)號(hào)圖標(biāo)(這是偶手工改的圖標(biāo),原本的圖標(biāo)是白色的三個(gè)問(wèn)號(hào))。
這個(gè)就是程序運(yùn)行起來(lái)的樣子,就是一個(gè)簡(jiǎn)單的text view。
?
posted on 2010-04-29 10:01?SunBo 閱讀(...) 評(píng)論(...) 編輯 收藏轉(zhuǎn)載于:https://www.cnblogs.com/sunyubo/archive/2010/04/29/2282174.html
總結(jié)
以上是生活随笔為你收集整理的iphone 3.1.2开发环境搭建——linux平台的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 家族关系查询系统程序设计算法思路_数据结
- 下一篇: centos linux开机启动项,Ce