iphone 3.1.2开发环境搭建——linux平台
一、引子
前段時間看到了apple公司發布了iphone os4.0的預覽視頻,iphone終于打算支持多任務了,尤其是對于預覽視頻中的skype軟件的展示讓人印象深刻。
一般來說,想做一名正規的iphone應用開發者應當至少準備三件事情:
(1)一臺apple的電腦
可以是mac book或者mac mini,國內比較“節儉”的公司大都選擇mac mini(現價大概5k左右),然后配個便宜的顯示器;而對于mac book最便宜的也要上萬,在此按下不表。沒辦法,iphone的集成開發環境只能夠在apple的電腦上運行。
(2)一臺iphone
最好是iphone 3gs,(現價大概4.5k左右);當然iphone 3g也可以,不過從開發者的角度來看,最好性能能強一些(不保證每一位開發者一開始接觸iphone開發就能寫出高效率的代碼)。
(3)一個開發者授權
到蘋果開發者網站上面注冊一個開發者ID,然后為這個ID申請開發者授權(需要每年交納99美金,注意,單位是美金,需要考慮匯率問題,呵呵)。
有了這些以后就是下載iphone的sdk,用xcode開發應用,真機測試,然后送到app store里面發布,最后就是每天看看帳戶。雖然網上一直有謠傳說iphone的用戶“人傻、錢多”,隨便做點啥都能賺錢,但經過偶的觀察,iphone的用戶是強調創意、時尚和個性的,對于操作流暢性非常挑剔(這主要是由于apple“寵壞”了這些用戶)。所以在app store里面絕對不可能“隨便”做點東西就能賺到錢的,“隨便”做點東西的結果就是讓apple公司“隨便”地賺到了那可憐的99美金(當然,還包括賣給開發者的mac電腦和iphone的收入),而到頭來開發者還是兩手空空。
當然,上面這些是對于想通過app store賺到錢的開發者來說的。偶個人對apple向開發者收錢的這個事情一直比較反感(同樣,對于symbian sign要花170歐元的行為,在此也一并聲討一下)。所以,偶在做一些研究和實驗的時候,一般都是從最省錢的角度出發。于是偶決定在辦公電腦上搭建一套簡單的開發環境(一直以來,偶的辦公電腦上只有linux),閑暇時候可以玩玩home brew。(還是印證了那句名言:少壯不努力,老大做it)。
二、準備工作
1、基本原理
iphone 2g/3g的cpu都是采用三星的S3C6400,而3gs的cpu是采用S5PC100總體上來講都是arm體系結構。從原理上來說,給iphone開發應該與其他的嵌入式設備開發沒有什么區別,把代碼用支持arm指令集的編譯程序編譯一下,生成在arm系統下可以運行的文件即可(例如,在pc上面生成arm平臺可以運行的文件,這也就是所謂的“交叉編譯”了)。下面,偶就要在linux平臺下面建立這樣一套交叉編譯的環境了,跟著偶一步一步的來,應該可以順利完成環境搭建(看個人的造化了,哈哈)。
2、開始前要想好的事情
缺點:
(1)linux下面的sdk開發出來的軟件只能夠用于被jailbreak(俗稱越獄)過的iphone手機。
(2)不支持iphone模擬器,不支持單步調試,不支持真機調試,沒有ide集成開發環境。
(3)目前最高版本只能支持到iphone sdk 3.1.2(估計3.2未來也不會出了,都在等4.0呢)。
(4)環境配置過程繁瑣耗時,即使按照本文也有可能失敗(“即使自宮,未必成功?!”,哈哈)。
(5)運行此sdk開發出來的應用,存在讓iphone變磚的可能(其實只要jailbreak,就會有變磚的可能)。
優點:
(1)不用交99美金購買開發者權限。
(2)不用購買apple的電腦。
(3)。。。可以用來消磨時間(不知道這算不算是優點)。
如果面對上述這么多缺點,仍然執意要安裝的話,請跟隨偶繼續往下做:
3、開始前的準備工作
偶的電腦是:thinkpad sl400。
系統是:slackware 13.0
內核版本: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)
測試手機是jailbreak過的iphone 3gs,系統為iphone os 3.1.2
理論上來說,按照下面的方式開發出來的程序在iphone 3g平臺上也能夠運行。
(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
預先說明,這東西可是非常大,2.5G,要下載一整天呢!(想到可以免費用。。。偶忍了。。。)
(2)下載iphone 3g的firmware(固件)
注意,一定是iphone 3g的,3gs的firmware是不可以的。
(好在開發出來的軟件在3g和3gs上面都可以跑!apple的向下兼容做得不錯)
下載地址如下:
http://appldnld.apple.com.edgesuite.net/content.info.apple.com/iPhone/061-7265.20091008.Xsd32/iPhone1,2_3.1.2_7D11_Restore.ipsw
(3)通過svn下載工具鏈腳本
cd ~
mkdir -p iphone_dev/toolchain
cd iphone_dev/toolchain
svn checkout http://iphonedevonlinux.googlecode.com/svn/trunk/ ./
這個腳本工程很小,如果網絡沒問題的話,應該很快就會下載好。
(4)下載darwin-tools.list里面的所有文件
這個文件是在iphone_dev/toolchain目錄下可以找到,這個文件里面有一個長長的文件列表。
可以用kget或者wget把這些文件都下載好。
(5)xar工具下載和安裝
http://xar.googlecode.com/files/xar-1.5.2.tar.gz
這個工具是用來解包dmg文件的,slackware上面默認是沒有這個工具的,直接通過源代碼安裝即可。
上面這幾個步驟可以說是整個linux環境下iphone應用編譯環境最為耗時的準備工作了。
三、讓我們開始吧(按照老外的說法就是——get our hands dirty)
以下操作,為了方便起見,直接輸入命令了。
(1)進入安裝腳本目錄
cd ~/iphone_dev/toolchain
(2)創建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)開始修改toolchain.sh腳本
原本不需要修改這個腳本的,但是由于一些網絡和諧的問題,導致國外的一個提供解碼串的wiki無法訪問,因此只好用這種土一點的辦法來解決了。
用喜愛的編輯器打開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這一行語句的上面(再次強調,是上面!)添加如下的一行: DECRYPTION_KEY_SYSTEM="a8a886d56011d2d98b190d0a498f6fcac719467047639cd601fd53a4a1d93c24e1b2ddc6"
修改完畢后,保存并退出。
(7)開始解包頭文件
./toolchain.sh headers
(8)開始解包firmware文件
./toolchain.sh firmware
(9)開始解包drawin_sources
./toolchain.sh darwin_sources
這個過程會比較漫長,要有耐心。
(10)最后一步編譯,這一步事關成敗
./toolchain.sh build
(11)錯誤處理
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
則可以執行如下命令:
cp ./sdks/iPhoneOS3.1.2.sdk/usr/lib/libSystem.B.dylib ./toolchain/bld/gcc-4.2-iphone/gcc/libc.dylib
然后,再次運行如下命令:
./toolchain.sh build
如果看到如下提示,就代表環境搭建成功了。
It seems like the toolchain built!
ps:
這里提一句,關于上面的拷貝libc.dylib的命令,其實可以在運行./toolchain.sh build命令以后,稍微等一小會兒,等到它開始編譯的時候,直接打開一個新的terminal窗口,然后進入toolchain目錄,然后執行這個拷貝的命令,這樣以來,就可以一次性編譯成功了。
(12)設定環境變量
關于這個,偶只把自己的配置貼出來,各位可以根據自己的配置進行修改和調整:
export PATH=/home/wayne/iphone_dev/toolchain/toolchain/pre/bin:$PATH
可以把這個設置保存在.bashrc或者/etc/profile里面,這些偶就不聒噪了。
四、測試編譯環境
1、編譯程序
這個過程很簡單,只要進入~/iphone_dev/toolchain/apps目錄下即可看到兩個用于測試的工程:
HelloToolchain和HelloWorldFirst。這個HelloWorldFirst是一個命令行的軟件,在iphone上面即使可以運行了,也是在終端輸入一個HelloWorldFirst以后輸出一個hello world;而那個HelloToolchain是支持gui界面的,是一個textview,因此,比較有說服力一些。
在這兩個目錄下面默認的都有一個Makefile文件,這個文件應該是缺少一些路徑的定義,怕麻煩的朋友可以直接使用偶的Makefile(參見本文的附件),這是偶手工改過的并且也在真機上運行過的。用偶的Makefile替換掉原來那兩個項目的Makefile,然后執行make即可。
如果這個過程中沒有顯示什么錯誤,那么恭喜你,你的linux平臺的sdk已經搭建成功了。
2、真機上運行程序
好了,接下來就是更加有挑戰性的工作了——在真正的iphone上面運行程序。但是在這之前還是要確認一下手機沒有問題。偶使用的是jailbreak過的iphone 3gs,利用blackrain越獄,利用cydia+wifi安裝的openssh,apt和ldid(這部分偶就懶得寫了,iphone越獄的方法,幾乎“滿大街”都是)。
需要提一點的是關于ldid,這個工具是在iphone平臺上對二進制文件進行簽名的,網上很多人反應在iphone 3gs下面,這個工具不好使了,但是經過偶的真機測試,這個工具完全沒有問題。
偶就把如何正確地安裝這個工具來簡單地提一下:
(1)通過cydia安裝一個叫做terminal的程序,它是一個虛擬的命令行終端。
(2)把iphone聯上wifi,然后啟動這個terminal。
(3)運行su,輸入密碼(如果從沒輸入過密碼,默認的密碼就是“alpine”,建議大家都給改掉,安全一些),得到root權限
(4)運行如下命令:apt-get install ldid
(5)當命令行界面上提示已經安裝成功后才能代表安裝成功了。
好,開始把HelloToolchain拷貝到手機的/Applications目錄下了。
(1)首先查看iphone連接wifi的ip地址(這個如果不會的話,可以直接跳過偶的文章。)
(2)在linux下面運行如下命令:
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_,下劃線一定要有!)
好了,如此一來,就都準備好了!
很多人納悶,怎么在iphone的桌面上看不到程序的圖標呢?!
別著急,運行一下如下命令即可:
killall SpringBoard
這個命令是強行把iphone的桌面程序殺掉,然后iphone會自動重新把這個桌面打開,這個時候就可以看到測試程序的圖標了。
網上有句俗話“有圖有相”,偶就照兩張圖片上來秀一秀:
這是測試手機iphone 3gs的版本。
恩,界面上很漂亮,各位可以看到有“紅,藍,綠”三種顏色的問號圖標(這是偶手工改的圖標,原本的圖標是白色的三個問號)。
這個就是程序運行起來的樣子,就是一個簡單的text view。
?
posted on 2010-04-29 10:01?SunBo 閱讀(...) 評論(...) 編輯 收藏轉載于:https://www.cnblogs.com/sunyubo/archive/2010/04/29/2282174.html
總結
以上是生活随笔為你收集整理的iphone 3.1.2开发环境搭建——linux平台的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 家族关系查询系统程序设计算法思路_数据结
- 下一篇: 萤石开放平台二次开发——摄像头取流至抖音