环境得搭建请看Part1,简单得应用开发请参考下面两个帖子
iPhone 實機開發 Part 1 - HelloWorld: http://www.weiphone.com/viewthread.php?tid=222380&extra=&page=1
iPhone 實機開發 Part 2 - 移動的 View:http://www.weiphone.com/viewthread.php?tid=224718&extra=&page=1
其中我遇到了0xe800003a,codesign warning :provisioning is not application in SDK device - iphone os 2.2 ignoring还有因为签名问题而无法编译得问题。
其中前两个问题是因为你的mobileInstallation版本太低得缘故,替换成2.2就可以了,这边是下载地址:http://www.weiphone.com/thread-206698-1-1.html
因为签名问题而无法编译通过得问题是因为在编译得时候当询问你是否允许签署该签名时,你选择了“总是允许”,不可以这样做,只能选择“允许”。
下面的内容转自Weiphone网
最近小弟開始在研究 iPhone 的開發,無奈找到的資料都是舊的,也不知道怎麼放到 iPhone
上,應該很多人都跟我有同樣的困擾吧!經過幾天的研究總算寫出第一個 HelloWorld,而且可以不用付99元美金就可以放到實機上執行!
今天先和大家分享怎麼放到手機上,以及基本的 Xcode 使用:
我的環境如下:
IBMX60+iDeneb 10.5.5
iPhone 港版16G+FW2.2+越獄
iPhone SDK 2.2 final
MobileInstallation 已替換(這很重要,不然沒法放到 IP 上,可以參考 weiphone 的這個帖子:
http://www.weiphone.com/thread-206698-1-1.html)
注意: SDK 版本最好和 IP 版本一致!
好啦,同學們,課程開始啦!
1. 產生證書
由於 XCode 後面的版本都要求應用程式必須經過簽署,也因此你必須要
多花99美元加入 Developer Program (真是黑呀),反正我又不放到 App Store 賣錢,乾脆自己簽個證書來用不就好了
打開 Key Access 這個工具程式(在應用程式->工具程式內),並建立一個 "iPhone Developer" 名稱的證書(這個名稱不要改,否則你得在專案內改變)
類型選擇"編碼簽名"
輸入憑證資訊
最後選擇存放在"系統"內(不是 "登入",否則會找不到)
這樣就大功告成了,你已經省下$99了!
2. 打開 XCode 建立 View Based Application
2. 專案建立好了後,打開 Project Setting,並在 User-Defined Settings 輸入:
PROVISIONING_PROFILE_ALLOWED = NO
PROVISIONING_PROFILE_REQUIRED = NO
3. 打開 Info.plist,這個檔案主要存放應用程式的相關描述,按右鍵 Add Row,新增 SignerIdentity = "Apple iPhone OS Application Signing" (要一樣的,亂輸好像不行)
4. 打開 MainWindow.xib 檔案,並雙擊 Window 這個圖標,我們可以看到 iPhone 內唯一的一個 Window
5. 加入我們自己的 View,在 Class Identity(切換到最右邊的 Tab) 輸入 MyView 按下回車鍵
6. 同樣的我們拉進一個 UILabel 和 UIButton,並調整一下 Label 的屬性,這邊 Autosizing 的調整還蠻容易懂的,大家可以試著調整看看就知道了
7. 畫面弄好了,但是還沒有把我們的 View 和 ViewController 建立連接,點選 HelloWorld View
Controller 後可以在菜單內的 Tools->Connections Inspector 看到和 View Controller
連接的 Outlet(也就是類裡面的變量),連接的方法是把 outlet 內的view 拖拉到我們實際建立的 View
8. 接著我們在建立好的 View 新增一個 outlet(lbl) 和 action(clickMe),這樣我們才可以改變 Label
這個物件,並分別把 outlet 連接到 HelloWorld 這個實際的 Label,action 連接到 "點我" 這個按鈕,並選擇
Touch Down 的事件,稍後我們會用到這個事件來改變 Label
9. 連接關係都建立好了,我們要產生實體的類,XCode 會幫我們把必要的 code 產生,產生的方法是在 File->Write Class Files
10.接下來我們加上一些代碼,分別打開MyView.h(注意要在 MyView 後面輸入 UIView,Xcode 不會加上)和MyView.m並輸入下面代碼
值得一提的是你可以在寫的過程中按 CTRL+"<" 看到提示
11. 選擇要使用的設備,在此我們選擇 Device - iPhone OS 2.2,XCode 會幫我們簽署,按下"允許"(不能按"總是允許")就可以輸出到你的iPhone了(第一次跑可能會出現 Security policy error,再跑一次
就不會出現了)
12. 要刪除模擬器或實體機上的 Ap, 只要按住圖標不放就可以了
13. 來個實體和虛擬機的合照吧,點"按我"可以改變 Hello World 的顏色
P1010190.JPG (72.1 KB)
下課了~
可能還有些同學沒有完成第一課的進度,沒關系,歡迎這些同學用 QQ
和我聯系(QQ:865099857),希望日後有機會能夠與大家一起合作,目前我人回臺灣了,不過大部分時間會在深圳,明年希望有機會和深圳的 IP
迷們一起聚會討論.
抱歉我使用繁體中文,雖然我看得懂簡體字,不過不是所有的字都能認識,為避免造成筆誤,或是用語上的不同,我還是使用自己習慣的繁體,相關用語上我盡量使
用大家可以接受的,如果有發現奇怪的用語的,請大陸的朋友不吝指正.
在第一課,我們學會了怎麼自己產生證書,拿它來簽署我們寫的無聊程式(好吧!我承認那個 HelloWorld 實在沒什麼用處).
我們也知道怎麼把 UI 和 變量連結起來,但是可能很多人對於裏面那些名詞,包括 View,Controller,Delegate
搞得一頭霧水,在第二課開始之前,我們有必要把這些東西搞懂:
View:
這個名詞相信大多數的朋友都知道了,你可以在 View 上面畫畫,可以在上頭放一些控件,甚至可以把一個 View 放到另外一個 View
裏面,所有的 View 都來自於 UIView 這個類,而 UIView 又來自於 UIResponder,如果你看一下 Apple
的文檔,大概就可以知道 UIResponder 主要工作在於處理事件的. View 的外框我們稱為 frame,我們透過這個 frame
來定義 View 的大小位置(例如:[view setFrame:frame]),至于要把一個 View 加到另一個 View 則可以用
[view addSubView:subView]
Controller:
在 XCode 產生代碼你會發現有一個繼承自 UIViewController 的類.甚至打開 MainWindow.xib
也可以看到它的蹤影. 也許有同學會以為這個和 MVC 裏面的 "C" 是同一個東東,其實 UIViewController 只是幫你控制
View 的 Layout,例如當你旋轉 iPhone 時,Controller 要幫你處理 View 的位置,另外像 View 與其他控件如
Toolbar 間的位置控制也是他的傑作. 當然Controller 並不是必要的,你也是可以用 View 就來完成同樣的事.
Delegate:
Delegate 這個名詞相信大家都常看到吧,這東西有點像是現代孝順兒子的父母一樣,父母親擔任 Delegate(代理)幫兒子寫家庭作業.
所有與用戶的互動都會交給 Delegate 來處理,這樣子好處是可以把畫面與事件的處理分開,通常我們是以 Controller 來擔任
Delegate 的角色.
好了,看到這邊是不是有點了解又不太了解呢? 是的,我們只解釋了這些名詞,但是一個 iPhone
的程式是怎麼開始動起來的,這時候建議大家先產生一個應用程式看看,並且打開 MainWindow.xib 找到 File's Owner
後看看他的 Delegate 是什麼? 我們尋著線索找下去應該是 XXXAppDelegate,打開後大致上可以看到以下代碼片段:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
[window addSubview:viewController.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[viewController release];
[window release];
[super dealloc];
}
首先映入眼簾的是 UIApplication 這個類,我們都知道 iPhone 要求同時間只能有一個 Application
執行,因此每個應用程式都會對應到一個 UIApplication,我們可以用 [UIApplication sharedInstance]
來取得所對應的應用程式實例(instance),當你執行你的應用程式後applicationDidFinishLaunching
就會被呼叫到(記得我們上面談到 Delegate 這個可憐的父母吧,事件傳給了他,由 Delegate 來處理事件)接著我們把 view 加到
window(其實他也是個 view),然後讓這個 window 變成可見的. 好了,如果你有興趣,最好能夠把 MainWindow.xib
內的每一個圖標打開來看看(File's Owner,First Responder,XXXController...),然後追蹤一下他們的
delegate,相信你能了解的更多.
前面講了這麼多無非是希望同學們在看下面的文章時不會雞同鴨講的,我們今天要講的主題就是 View,還會談到如何把一個 View 動態加到另一個 View 裏面,如何使用圖片,設定應用程式的圖標,以及 touch 事件的處理等等.
今天的例子多了些動態效果,主要是讓你在雙點擊屏幕時會出現一朵花,如果你把手指放在花上面,還可以拖拉著到處跑,而且拉動的時候花還會變亮,放開後花會變暗,也許它還是很無聊的東西,不過這個例子比起 HelloWorld 好玩多了:
1. 產生一個 View-Based Application,並存為 DragView
2. 打開 MainWindow.xib,並點選 Loaded From "DragViewViewController.nib"
以開啟真正的 UIView,切換到 Class Identity 後輸入MainView(名稱可自訂)按回車鍵,接著 Write Class
Files 以產生實體的類檔案
3. 打開 MainView.h 並在後面加上 UIView (我一直不了解為什麼 XCode 不幫我們加上?)
4. 從 Library 裏面拉一個 UIImageView 進來
5. 點選這個 UIImageView 並在菜單上打開 Inspector,在 Class Identity 改為 DraggedView (記得按回車鍵)
6. 同樣的 Write Class Files 以產生實體的類檔案
7. 記得修改一下 DraggedView.h 加上 UIImageView (很容易忘記的),並加上 start 這個變量,它會記錄我們開始接觸的那一點:
好了,到目前為止,畫面算是弄好了,大家可以先在模擬器跑跑看會不會發生編譯錯誤... 接下來我們要介紹在 UIView 裏面的 touch 的事件:
- (void) touchesBegan:(NSSet *) touches withEvent:(UIEvent *) event
- (void) touchesMoved:(NSSet *) touches withEvent:(UIEvent *) event
- (void) touchesEnded:(NSSet *) touches withEvent:(UIEvent *) event
這三個照字面上意思解釋應該不難了解,分別代表接觸點開始,移動,結束的事件,後面的 touches 代表接觸的點(因為是多點接觸所以可能包括多個點),event 代表接觸的事件
8. 打開 MainView.m 輸入以下代碼,這個 MainView 是我們最底層的 View,還記得我們講到的 frame
吧,在這邊派上用場了,值得注意的是我這邊特別是用到建構子(Constructor),默認的形態是 -(void) init
且不帶參數的,我們在 MainView 被產生時把他的背景設定為黑色的:
9. 打開 DraggedView.m 輸入以下代碼,我們在 touchesBegan 時先記錄開始的位置,然後用 setAlpha 讓這個
View 變亮(<=1.0f),在 touchesMoved 時計算移動後的位置,用 setFrame
來改變圖片的位置,這樣子看起來圖片好像跟著我們動了
10. 現在還不能執行,因為我們的圖片還沒有加到 Resource 裏面,隨便找一張你喜歡的圖把它拉到 Resources 裏面,勾選 Copy items into...
11. 這個圖片還有其他用途,可以用來作為我們的應用程式圖標,打開 Info.plist,在 Icon file 輸入 images.jpg
12. 最後為了讓這個應用程式可以在 iPhone 上跑,我們修改了 Project Setting 和 Info.plist (詳細情形可以看第一課)
13. 看看是不是可以跑起來了,隨便在任意地方雙敲擊兩下看看是不是有朵花跑出來,再用手指移動這些花看看,哇!這次總算像是個 iPhone 的應用程式了(雖然那張圖處理的不是很好)!
跟實體機器比較看看...(呵呵,我是用臺灣大哥大的,信號強呀!)
---------------------------------------------------------
专注移动开发
Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
posted on 2009-06-14 19:47
TiGERTiAN 阅读(2460)
评论(0) 编辑 收藏 所属分类:
iPhone