誰適合閱讀這本書?epaper.gotop.com.tw/pdfsample/a335.pdf序 | xi...

22
iPhone 的到來改變了一切;最最起碼,它改變了行動平台軟體開發的方向,而這可是一 件大事。iPhone 引起其他廠商競相模仿,並且下挫了整個數十億美元的產業。儘管如 此,它還是很適合你的口袋。 2 雖然書名改成 Learning iOS Programming,而且內容已經徹底翻修,但你拿在手中的這本 書,的確是 Learning iPhone Programming 2 版。Apple 推出 iPhone 4 年,不過有時 候對我來說,彷彿長如一生。 2 版的翻修反映了從第 1 版發行之後的諸多變化:iPad 推出、Xcode 大改版、作業系 統本身的兩次改版、Apple 推出 iCloud。因此我們徹底翻修了內容,來反映這個平台的 底層變化,而且使用 ARC 重寫 Xcode 4 iOS 5 的所有範例程式碼。 誰適合閱讀這本書? 這本書提供了 iPhoneiPod touchiPad 程式設計的快速入門內容,給略有程式開發經 驗的人。如果你是 Mac 開發領域的新鮮人、因為 iPhone 才投效這個平台,或者是想要 轉移到 iOS 的資深 Mac 開發人員,這本書就是為你而寫。 本書讀者應具備的條件? 這本書假設讀者略懂 C(或至少是 C 衍生的語言)。此外,雖然我提供了速成課程,但 若能略微熟悉物件導向程式設計概念,將會對閱讀本書很有幫助。

Upload: others

Post on 03-Jun-2020

8 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

iPhone的到來改變了一切;最最起碼,它改變了行動平台軟體開發的方向,而這可是一件大事。iPhone引起其他廠商競相模仿,並且下挫了整個數十億美元的產業。儘管如此,它還是很適合你的口袋。

第 2版雖然書名改成 Learning iOS Programming,而且內容已經徹底翻修,但你拿在手中的這本

書,的確是 Learning iPhone Programming第 2版。Apple推出 iPhone才 4年,不過有時候對我來說,彷彿長如一生。

第 2版的翻修反映了從第 1版發行之後的諸多變化:iPad推出、Xcode大改版、作業系統本身的兩次改版、Apple推出 iCloud。因此我們徹底翻修了內容,來反映這個平台的底層變化,而且使用 ARC重寫 Xcode 4和 iOS 5的所有範例程式碼。

誰適合閱讀這本書?

這本書提供了 iPhone、iPod touch、iPad程式設計的快速入門內容,給略有程式開發經驗的人。如果你是 Mac開發領域的新鮮人、因為 iPhone才投效這個平台,或者是想要轉移到 iOS的資深 Mac開發人員,這本書就是為你而寫。

本書讀者應具備的條件?

這本書假設讀者略懂 C(或至少是 C衍生的語言)。此外,雖然我提供了速成課程,但若能略微熟悉物件導向程式設計概念,將會對閱讀本書很有幫助。

Page 2: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

序 | xi

你能學到什麼?

從第 1次啟動 Xcode,到提交應用程式到 App Store,這本書將帶領你開發第 1個 iOS應用程式。你將會藉由實際編寫程式而學到開發 iOS應用程式所需要的 Objective-C及核心應用框架,讓你瞭解獨立建置自己應用程式的基本應用框架。

本書內容

以下是本書章節的簡短摘要,以及你能從中找到的內容:

第 1 章、為什麼需要原生應用程式?

本章討論原生應用程式的必要,並且比較原生應用程式和Web應用程式的建置方式。

第 2 章、成為開發人員

這章說明了註冊成 iOS 開發人員和設定工作環境的過程,包括安裝 Xcode、iOS SDK,以及產生建置應用程式、部署應用程式到你自己的 iPhone、iPod touch、iPad所需要的開發憑證。

第 3 章、第 1 個 iOS App本章盡快的讓你動手建置第 1個 Hello World應用程式,包括將應用程式部署到你的iPhone、iPod touch、iPad,並且在這些裝置執行。

第 4 章、以 Objective-C 寫程式

這章提供 Objective-C 語言基礎的速成課程,且若你已熟悉其他 C 衍生的語言(或許也熟悉物件導向程式設計),這章內容應該足夠你起而面對本書所需要的

Objective-C和 Cocoa Touch應用框架。

第 5 章、以表格視圖開發應用程式

UITableView及相關類別或許是建置 iOS應用程式的介面最常用到的類別。由於應用程式的本質使然,這些類別可以用來解決很多具代表性的問題,結果幾乎也是隨

手可得。在本章,我們將深入剖析這些類別。

第 6 章、其他的視圖控制器

詳細討論過表格視圖控制器之後,我們會討論一些其他的視圖控制器和建置應用程

式很有用的類別:簡單的雙螢幕視圖、單螢幕分頁視圖、強制回應視圖控制器,以

及選取視訊和圖形的視圖控制器。

Page 3: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

xii | 序

第 7 章、連上網路

本章將討論連接網際網路、瀏覽網頁、傳送電子郵件,以及接收資訊。

第 8 章、處理資料

這章將討論如何處理使用者輸入的資料,以及程式化取得的資料,也會討論如何解

析 XML及 JSON文件。這章也涵蓋將資料儲存到平面檔,以及利用 SQLite資料庫引擎儲存資料。

第 9 章、使用感應器

本章會討論如何偵測可用的硬體,並且說明如何使用 iOS裝置的主要感應器:加速傳感器、磁力計、相機、GPS。

第 10 章、地理定位與地圖

這章將示範如何在應用程式使用 Core Location及 MapKit應用框架。

第 11 章、iCloud 入門

本章簡要說明如何將 Apple iCloud服務加入應用程式。iCloud是一項能協助你在各種裝置同步資料的服務,所有你同意的裝置都可以存取文件及資料。

第 12 章、整合你的應用程式

這章將示範一些應用程式整合到 iOS軟體生態系統的技巧,包括如何以設定捆包呈現使用者偏好設定,以及如何使用自訂的 URL配置來啟動應用程式。這章也會討論如何利用媒體播放器和通訊錄。

第 13 章、發佈應用程式

本章會說明如何將一些最終的修飾加到應用程式,以及建置應用程式發佈的過程,

包括特別設置的 iOS應用程式發佈管道和透過 App Store上架。

第 14 章、更進一步

這章提供了諸多更為進階的主題線索:可能是已經涵蓋在本書的主題,也可能是本

書未能提及的主題。希望讀者能循著這些線索,找到進階主題的閱讀參考資料。

Page 4: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

第一章

為什麼需要原生應用程式?

起初,iPhone在 2007登場時並沒有原生 SDK。Apple認為並不需要,並且認為這個裝置的應用程式,應該是以 JavaScript、CSS、HTML建置成Web應用程式。但開發者社群不大能接受這種說法,他們想要直接存取硬體,並且想與 Apple的應用程式整合。

推出 iPhone的短短幾個月之後,開放源碼社群已經完成了一些許多人認為不可能的成果。儘管 Apple鎖住裝置,但開發人員已經能存取經過逆向工程破解的 SDK,並且持續建置了一組能讓他們建置該裝置原生應用程式的開放源碼工具。有一度有人預估市場上

的 iPhone有三分之一已由使用者「越獄」(jail broken),因而能執行未經允許的第三方應用程式。

不過你拿在手中的這本書,所討論的並非開放源碼破解的 SDK,因為在 2008年 3月,也就是第 1代 iPhone推出後不到 1年,Apple改變了原本的作法,並且釋出原生 SDK給等待多時的開發社群。但不論這項釋出是因為開放源碼社群的破解,或者可能只是向

來神秘兮兮的 Apple原本的計畫,我們大概都難以知道原因。

優點和缺點

原生 SDK推出時,業界有些人認為開發人員實際上倒退了一步。他們認為 Web應用程式真的夠好,特地以 Objective-C編寫 iPhone程式,會讓程式移植變得更困難,而移植Web應用程式或多或少只要以新的 CSS範本重新設計。

但是應用程式的使用者似乎有不同的看法,為什麼?因為要製作出可以重複使用且外觀

是原生的跨平台 Web應用程式雖然並非不可能,但是非常困難。就像從 Windows移植而來的 Mac桌面應用程式,會因運作的不如使用者預期而顯得格格不入,打算要跨平台的Web應用程式也是如此。

1

2

Page 5: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

2 | 第一章

我只是想釐清,而非批評 HTML、CSS、JavaScript。這些 Web技術都很成熟、穩定,對你這樣的開發人員來說,程式碼能跨平台當然吸引人。不過可能未必吸引你的使用

者。多數的爭議在於開發人員與使用者的看法不同,尤其是使用 Web技術所需要的支援,或是外部應用框架(framework),都是從開發人員的觀點。雖然這不會讓對方的論點站不住腳,但你應該從使用者的角度認真看待這些爭議,其中被忽略而且最重要的,

就是適不適用。

消費者不會只因為你支援其他平台,就在他們的平台購買你的應用程式,相反的,他們

想要的應用程式,除了要能整合到他們的平台,外觀也要類似他們平台的其他應用程

式,讓他們能依循既有的使用經驗。

如果你將應用程式整合到 iOS生態圈,並且善用硬體功能、確定程式介面已針對 iOS裝置最佳化,使用者體驗將會大為改善。所有這一切雖然也能利用Web技術達成,但大多真的很難編寫出能順利跨平台運作的非原生應用程式;如果要讓這些程式在一半的平台

能看似原生程式,那就更難了。

為什麼要開發原生應用程式?

Web技術做不到的,很顯然就得使用原生 SDK,第 1代擴增實境應用程式就是很好的例子,這些需要緊密結合 iPhone內建的感應器(例如 GPS、加速器、數位羅盤、相機),而且一定要有這些感應器。

雖然 iOS 的 Safari 瀏覽器支援 HTML5 提供的地理定位功能(http://www.w3.org/TR/geolocation-API/),但這完全無法減緩問題。所有特定平台的硬體都能在 HTML5獲得一視同仁的待遇,的確令人懷疑,因此你不太可能看到擴增實境Web應用程式。

如果你的背景是 Web開發,可能會對跨平台 PhoneGap應用框架(http://

phonegap.com/)感興趣。這個框架提供原生包裝函式,並允許你在一系

列行動平台以 HTML/JavaScript建置原生應用程式。而 iOS則是它鎖定

的其中一種平台。

有時候無關能不能做到,而是關乎執行速度及用戶端錯誤處理。例如和 iOS一起提供的Apple iTunes和 App Store應用程式,實際上是包進原生應用程式的 Web應用程式。就如同 Mac桌面的 Apple iTunes和 App Store,你所看到的主要畫面實際上就是網頁,但圍繞在外的則是原生應用程式。也就是說,雖然沒有網際網路連線,應用程式的功能就

會大大受限,但至少它可以啟動。

3

Page 6: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

為什麼需要原生應用程式? | 3

不過那些都是極端的例子,App Store有許多應用程式都兼具遠端資料和原生介面,這類應用程式若不存取網路,某些 UI通常就會失效。但是當裝置的網路連線消失,或者它一開始就從未出現,就可以將原生應用程式做成容許這種狀況而不顯示錯誤訊息,讓

使用者依然可以使用不需網路連線即可運作的應用程式功能。

有時候也與應用程式不需要的功能有關。如果應用程式不需要網路連線,但手機需要連

上網路才能使用應用程式的想法,會使得過程中耗用額外的電池電力,這就形成浪費。

甚至連線之後,裝置未必都會連到快速的網際網路。如果想將耗用電力的資料量降到最

低,就要改善使用者與應用程式的互動,也就是在本機產生應用程式的 UI,然後從網際網路取得資料,再將資料填入應用程式。

網路效能會影響使用者對速度的感覺。送出 Web要求時呈現 UI,就算因速度過慢而在等待網路,也能允許應用程式繼續回應使用者互動。而這只會是優點。

我甚至還沒提到遊戲開發和 iPod touch(號稱是「有史以來最有趣的 iPod」)。這很重要,因為你無法以Web技術開發現在才出現在 App Store的各種遊戲。雖然本書涵蓋如何開發 iOS裝置程式的基礎,但如果你想深入研究這個平台的遊戲程式設計,我推薦Todd Moore的著作《Tap, Move, Shake: Turning Your Game Ideas into iPhone & iPad Apps》

(http://shop.oreilly.com/product/0636920018414.do,O’Reilly)。

軟體釋出週期

Paul Graham是我喜愛的智者,他認為Web軟體不只已經改變了使用體驗,也改變了開發體驗:

這個新世界最重要的改變,是釋出的方式。在桌面軟體市場,推出軟體會帶

來極大的壓力,整個公司都得繃緊神經。相較之下它們在過程和最終產品都

有差異。

─摘自 Paul Graham所寫的「另一條向前的路」

他說得一點都沒錯。以雲端運作便鮮少需要釋出軟體。儘管好處很多,但我必須承認我

其實有點懷念(經常帶著很大的恐懼)推出新的、改進過的軟體版本。不過編寫原生應

用程式的一大問題,是我們又回到發行週期。

Web軟體可以在出現臭蟲時,隨即釋出新版來修補臭蟲。但原生應用程式更像桌面 軟體。

4

Page 7: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

4 | 第一章

我會在第 13章說明如何提交應用程式到 App Store的細節,但是你現在就應該自己做好心理準備。因為 App Store審核你應用程式的過程,是眾所皆知的不透明,而且會花去不少時間。再者,每個應用程式都必須通過審核,而且不只是提交的第 1個版本必須如此,每個提交的新版本也都一樣。一般來說,從提交到通過檢閱小組的審核,可能需要

7天,但也可能耗費更久的時間。根據我自己的經驗,雖然我有些應用程式僅在 1、2天就順利通過審核,但也有一些應用程式在獲得批准之前,在審核過程花了 4個月。

做出程式然後等待使用者上門

我在本章開頭的態度是反對Web應用程式,因為它們必須連上網際網路;當然這不是全部的真相。雖然 HTML5的離線應用程式快取(Offline Application Cache)顯然有所限制,但你的確可以利用這項技術寫出離線Web應用程式。不過,即使在現今已經相當擁擠的 App Store,原生應用程式最大的優點仍然是曝光。如果沒有人找得到你的應用程式,就沒有人會付錢買你的應用程式,而Web是個很大的地方,會讓曝光更為困難。

原生應用程式勝過Web應用程式的最大優點,是很容易讓潛在使用者找到,而且找到之後也很容易付費購買。也就是說,如果你能找到使用者購買Web應用程式,使用者不會衝動訂閱Web服務,他們會在 App Store衝動購買。

不過別以為只要寫了程式就能吸引使用者出現。除非你的確很幸運,而且你的應用程式

能像病毒擴散,不然還是需要行銷自己的應用程式。相較Web,App Store或許小很多,但還是相當大。

行銷你的應用程式就像行銷任何產品,你需要利用現有的工具及人脈,來獲得軟體在目

標市場的消息。Apple提供可免費下載應用程式的促銷碼(promotional code),許多開發人員會找上人氣部落格或介紹應用程式的網站,提供軟體給他們試用,希望他們能廣

為宣傳軟體。如果軟體設計的好,而且又實用,他們可能就會有興趣評論。

錄一段你應用程式的示範操作影片,以及擁有更多支援資源(例如論壇及問題回報系

統)都能幫助銷售。此外,好的設計也能讓應用程式更顯得出眾,而這也有助於銷售。

好的設計經常意味著「Apple的方式」,包括讓應用程式與手機的其他應用程式融合成一體,而且「不用重新創造輪子」,也就是使用 iOS使用者熟悉的標準組件和介面元素。

5

第二章

成為開發人員

開始編寫程式之前,還有一些例行公事要做。首先需要安裝 Xcode(這是 Apple的開發環境),以及 iOS SDK。這些都能透過 Mac App Store直接從 Apple取得。

但如果想發佈應用程式,或甚至只是將應用程式部署到自己的裝置,你還需要向 Apple註冊成開發人員,然後加入其中一種開發人員計畫。接著你需要建立、下載、安裝一些

憑證和描述檔,才能讓應用程式部署到你的 iPhone、iPod touch或 iPad。

開發 iOS 應用程式需要執行 OS X 10.6(Snow Leopard)或更高版本

的 Intel Mac。但如果開發的應用程式會使用 iCloud,就需要 OS X 10.7

(Lion)或更高的版本。

現在讓我們完成這些例行公事,讓你可以盡快體會寫程式的樂趣。

註冊成 iOS開發人員直到最近,獲得 iOS SDK的唯一方式,是向 Apple註冊成為 iOS開發人員。不過現在也可以直接從 Mac App Store下載最新版的 Xcode和 iOS SDK。

如果你仍在使用 OS X Snow Leopard,就得註冊成 iOS開發人員,並成

為開發人員計畫的成員,然後從 iOS Dev Center 下載 Xcode 4 和 iOS

SDK。因為 Mac App Store所提供的 Xcode版本,只能用在 OS X Lion

以上的版本。我們會在本書第 13章論及 iCloud的更多細節。

7

Page 8: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

第二章

成為開發人員

開始編寫程式之前,還有一些例行公事要做。首先需要安裝 Xcode(這是 Apple的開發環境),以及 iOS SDK。這些都能透過 Mac App Store直接從 Apple取得。

但如果想發佈應用程式,或甚至只是將應用程式部署到自己的裝置,你還需要向 Apple註冊成開發人員,然後加入其中一種開發人員計畫。接著你需要建立、下載、安裝一些

憑證和描述檔,才能讓應用程式部署到你的 iPhone、iPod touch或 iPad。

開發 iOS 應用程式需要執行 OS X 10.6(Snow Leopard)或更高版本

的 Intel Mac。但如果開發的應用程式會使用 iCloud,就需要 OS X 10.7

(Lion)或更高的版本。

現在讓我們完成這些例行公事,讓你可以盡快體會寫程式的樂趣。

註冊成 iOS開發人員直到最近,獲得 iOS SDK的唯一方式,是向 Apple註冊成為 iOS開發人員。不過現在也可以直接從 Mac App Store下載最新版的 Xcode和 iOS SDK。

如果你仍在使用 OS X Snow Leopard,就得註冊成 iOS開發人員,並成

為開發人員計畫的成員,然後從 iOS Dev Center 下載 Xcode 4 和 iOS

SDK。因為 Mac App Store所提供的 Xcode版本,只能用在 OS X Lion

以上的版本。我們會在本書第 13章論及 iCloud的更多細節。

7

Page 9: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

6 | 第二章

然而,你需要註冊成 iOS開發人員才能獲取開發文件。此外,雖然目前的 SDK版本是透過 Mac App Store釋出,但是當新的 Beta版推出時,則是透過 iOS Dev Center以 .dmg檔釋出。

如果想在 iPhone、iPod touch、iPad測試自己的應用程式,你必須加入 iOS Developer Standard Program或 iOS Developer Enterprise Program(兩者皆須年費)。我們將在下一節討論如何加入。

如果選擇免費帳號,除了無法將自己的應用程式安裝到自己的硬體,也無法在 Apple App Store上架販售應用程式(Standard Program),或者無法將應用程式部署到自己公司同仁的硬體(Enterprise Program)。此外,免費帳號也無權使用 iOS SDK或 iOS的預覽版本。

加入的網址是 http://developer.apple.com/ios/。

如果已經有 Apple ID,例如用在 iTunes或 iCloud帳號,你可以此註冊成

iOS開發人員。但如果打算銷售軟體,可能得建立新帳號來加入開發計

畫,才能與你現有的 Apple ID保持獨立。

一開始會請你選擇要使用現有的 Apple ID,或是建立新 ID。如果建立新 ID,會詢問一些個人資訊(例如電子郵件、地址);如果選擇現有的 Apple ID,網頁會列出相關個人資訊請你確認。

你也要提供專業資訊,包括日後將會開發哪種類型的應用程式,以及是否也開發其他行

動平台的程式。

最後需要同意開發人員授權許可。同意之後,可能會有確認碼傳送到你向 Apple註冊的電子郵件位址,雖然不是所有的情況都會如此,但如果你收到確認碼郵件,註冊成 iOS開發人員的最後步驟,會是確認你的電子郵件位址。一般來說,雖然這封電子郵件很快

就會寄出(1、2個小時內),但就我所知,曾有延遲數日才寄出電子郵件的情況。如果你需要建立新的開發人員帳號,別等到最後一刻才做。

Apple網站

iOS開發過程有 3個常用的網站:

iOS Dev Center(http://developer.apple.com/ios/)

這個網站可以讓你取得最新版本的 iOS SDK,以及背景技術資料、API文件、範例程式碼、教學影片。註冊的 iOS開發人員才能存取此站。

8

9

Page 10: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 7

iOS Provisioning Portal (https://developer.apple.com/ios/manage/overview/index.action)

這個網站可以讓你產生並管理憑證、佈建描述檔(provisioning profile)、核可的裝置,以及其他在你的裝置測試應用程式並準備上架推出的必要例行工作。

必須是註冊的 iOS開發人員,並且加入 iOS Developer Programs,才能存取此站。

iTunes Connect(https://itunesconnect.apple.com/)

這個網站讓你管理你在 iTunes App Store 的應用程式,以及你與 Apple 的合約。必須是註冊的 iOS 開發人員,並且加入 iOS Developer Standard Program,才能存取此站。

Apple也提供了豐富的開發技術線上文件,2個特別有用的網站分別是:

iOS Developer Program(https://developer.apple.com/support/ios/)

這個網站提供的支援,與開發人員計畫及開發人員帳號的管理和處理有關,包

括加入開發人員計畫的問題。必須是註冊的 iOS開發人員才能存取此站。

App Store Resource Center(http://developer.apple.com/iphone/appstore/)

這個網站提供如何在 App Store發佈應用程式的協助和建議,包括準備提交應用程式、瞭解 App Store核准過程,並且學習如何在 App Store管理你的 app。必須是註冊的 iOS開發人員,並且加入 iOS Developer Standard Program,才能存取此站。

加入 iOS Developer Program如果你打算在 App Store銷售應用程式,或者只是想將應用程式部署到自己的 iPhone、iPod touch或 iPad,都還需要加入 iOS Developer Program;如果你尚未註冊成 iOS開發人員,可以在加入的過程註冊。

你的 iOS Developer Program會員資格將持續 1年,並可於到期日之前的

60天開始更新。若未更新,將會取消發佈應用程式的能力、撤銷開發人

員憑證和發佈憑證,並且也會移除所有你已經上架到 iTunes App Store的

應用程式。

10

Page 11: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

8 | 第二章

加入 iOS Developer Program 有 2 種選擇,多數人會選擇年費 99 美元的 Standard Program。這種方案可讓你開發免費的 iPhone、iPod touch、iPad應用程式,然後透過App Store或特別設置的通路發佈應用程式,並且提供應用程式二進位檔和佈建憑證給使用者;當然,只要填寫一些表格,就可以販售你所開發的應用程式。

特別設置的發佈通路能讓你略過 App Store,而直接將應用程式發佈給你的

使用者。但在會員資格的 1年時間,只能發佈到 100台裝置。對終端使用

者來說,這種方式比透過 App Store發佈應用程式更複雜,它主要的目的是

為了程式的 beta測試,而非發佈應用程式到 App Store的替代方案。如果

你要大規模的將軟體發佈到特定使用者團體,而且想避開 App Store,大概

就會考慮 Enterprise Program。如果對 iOS在企業端的開發有興趣,我推薦

James Turner著作的《Developing Enterprise iOS Applications》(O'Reilly)。

如果想開發在公司內部發佈的應用程式,而且是超過 500名員工的公司,應該考慮年費較為昂貴的 Enterprise Program(每年 299美元)。雖然這種方案允許你在自己公司內部發佈應用程式,但不准你將應用程式發佈到 App Store銷售。如果你考慮要公開銷售自己的應用程式,需要的是 Standard Program。

此 外 還 有 iOS Developer University Program(http://developer.apple.com/programs/ios/university/),這是特別針對希望引進 iOS程式開發課程的大專院校所設計。不過除非具有大專院校教職,否則這個方案並不適合你。

Mac Developer Program如同加入 iOS Developer Program,你可能也希望能加入 Mac Developer Program。如果你很認真看待 iOS軟體開發,加入 Mac Developer Program會是個很棒的想法;你可以利用這個網址加入 http://developer.apple.com/programs/mac/。

就像 iOS Developer Program,加入 Mac Developer Program也需要每年 99美元年費。如果你要加入這項計畫,最好使用加入 iOS Developer Program的 Apple ID。

11

Page 12: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 9

安裝 iOS SDK本書寫作時的 Xcode 和 iOS SDK,都可從 Mac App Store 一起下載。開啟 Mac App Store然後搜尋 Xcode,連到如圖 2.1的下載頁面,然後點下藍色的 Free按鈕,接著再點下 Install App。

圖 2-1  Mac App Store 裡的 Xcode

從 Mac App Store合併下載的 Xcode開發工具和 iOS SDK大約是 1.35 GB。你可以利用Mac App Store的 Purchased標籤頁來監控下載。順利完成下載之後,就會在應用程式

資料夾找到名為 Install Xcode的新應用程式 1。

安裝之後,你可以啟動 Xcode來檢查一切是否正常,而 Xcode現在應該已經裝進電腦的應用程式資料夾。啟動 Xcode之後,螢幕應該會出現如圖 2-2的 New Project視窗。

1 譯註:Xcode 4.4版下載後即可執行 Xcode,沒有 Install Xcode,也不需要安裝。

Page 13: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

10 | 第二章

圖 2-2  Xcode 的 New Project 視窗

你現在已經擁有編寫應用程式以及在模擬器執行測試所需要的一切。

如果你要在實際的 iOS 裝置測試程式,就需要加入 Standard 或

Enterprise iOS Developer Program。然而各種計畫批准入會所需要的時

間各不相同,所以在你加入並獲准入會之後,應該將本頁標入書籤,並且

完成本章的步驟。在你等待批准的這段時間,可以使用 iPhone和 iPad模

擬器來測試本書的範例。

儘管模擬器非常棒,但並不完美。程式在模擬器的執行速度會比實際裝置更快,如果你

所處理的應用程式具有複雜的 UI,或會消耗大量的處理器資源,模擬器和實際裝置的效能差異就變得很重要。我在許多狀況都必須回頭重寫程式,並且重構 UI功能的作法;當我在模擬器測試自己的應用程式,它運作的十分良好,但是在實際的硬體,它就變得

很慢。而且你也可以在模擬器配置數量比實際硬體更多的記憶體。

此外,模擬器內含若干剛好不存在實際裝置的應用框架(framework),尤其是NSPredicate和 NSXMLDocument類別。使用這些類別的程式碼將會編譯並在模擬器執行,但在實際裝置就不行。因此除了經常在 iPhone Simulator建置應用程式,也應該經常在實際裝置測試、執行。如果你偶爾使用其中一種不存在實際裝置的類別,則會在編譯時

針對每個組建顯示連結錯誤。畢竟你也不想應用程式的開發之路已經走得老遠(數小

時,或更糟的是數日之後),才發現所用的類別或應用框架實際上不會出現在裝置。

12

13

Page 14: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 11

NSPredicate和 NSXMLDocument都是常用的類別。例如 NSXMLDocument是

多數人在 Mac(而非 iPhone )以 Objective-C編寫程式時,在 XML文件

執行 Xquery的類別。大多數開發人員很快就會發現少了 NSXMLDocument

類別。

雖然我聽到一些 iOS模擬器處理 UIKit的像素對齊有時候會有些偏差的抱怨,但我自己還沒有遇過這種情況。然而在使用諸如 OpenGL ES等低階圖形程式庫時,實際裝置的描繪器(renderer)會與用在模擬器略有差別,因此當模擬器呈現場景時,在像素階層所呈現的場景和實際裝置所呈現的可能不是同一個。

此外,iOS模擬器有一些內建的限制,例如若應用程式的 UI是用來回應 2指以上的觸控事件,就難在模擬器裡測試。

雖然不允許你模擬多指手勢,但 iPhone Simulator的確能讓你測試需要 2

指觸控手勢(多點觸控)的應用程式。你可以在使用滑鼠時,利用

Option-點擊(捏)或 Option-Shift-點擊(拖),來模擬兩根手指。

而且在模擬器執行的應用程式也無法使用加速度計、GPS、藍牙、數位羅盤。如果應用程式需要這些硬體功能,除了在實際裝置測試,你別無選擇。

關於測試版

在過去,Apple以不同的方式釋出開發工具的測試版,但通常是透過 iOS Dev Center發佈成 .dmg格式的檔案。儘管最近這些工具大多以單一下載的方式發佈,但之前仍然有些發佈方式必須先下載 Xcode,然後再從個別的安裝程式來安裝 iOS SDK。

Apple以後甚至可能透過 Mac App Store並以 iTunes代碼提供這些工具給開發人員:iTunes代碼會連結到你註冊成 Apple開發人員的 Apple ID,只要取得 iTunes代碼就能獲得測試版。

準備你的 iOS裝置在你能將應用程式裝進自己的 iOS裝置之前,還有一些步驟必須完成,這些步驟的順序如圖 2.3。

14

Page 15: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

12 | 第二章

測試應用程式

組態描述檔 建置並執行下載並安裝

CodeSign

ID#

ID#PROV

圖 2-3  建立憑證和行動佈建描述檔的流程

因此如果你已經加入 Standard或 Enterprise iOS Developer Program,現在就要產生適當的憑證和佈建描述檔,才能將下一章的測試應用程式部署到你的裝置。

憑證和佈建描述檔

你必須擁有 Xcode 開發憑證(development certificate)來簽署應用程式的二進位檔,這個憑證也有識別的作用,讓大家知道你就是應用程式的開發者。建置

iPhone應用程式時,Xcode會尋找 Mac OS X keychain裡的這個憑證,並且也找尋對應的憑證,也就是要從 Developer Portal下載的 WWDR中級憑證(WWDR Intermediate certificate)。

數個佈建描述檔結合 1個開發憑證、1部硬體裝置、1個 iOS應用程式 ID(應用程式的唯一識別碼)。欲將已經以自己的開發憑證簽署過的應用程式安裝進 iOS裝置,你也需要將相結合的佈建描述檔安裝進 iOS裝置。

儘管新版的 Xcode在某種程度已能自動建立並更新憑證和佈建描述檔,但我認為至少第1次你應該自己建立這些描述檔,因為有了自己手動的經驗,才能瞭解 Xcode在背後做了什麼。而且 Xcode建立這些檔案也經常出錯,你也必須自己修正。所以能自己手動建立這些檔案,也是遲早能夠派上用場。

建立開發憑證

首先你需要的是開發憑證和 Apple 的 WWDR 中級憑證。欲向 Provisioning Portal 要求開發憑證,需要利用鑰匙圈存取應用程式產生簽署的憑證要求(certificate-signing request,CSR)。

15

Page 16: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 13

你可以在應用程式 /工具程式資料夾找到鑰匙圈存取應用程式。啟動鑰匙圈存取,並從選單列選取鑰匙圈存取→偏好設定,如圖 2-4,確認 Online Certificate Status Protocol(線上憑證狀態協定)和 Certificate Revocation List(憑證撤銷列表)選項都是 Off。

圖 2-4  鑰匙圈存取應用程式偏好設定面板的憑證標籤頁

接著從鑰匙圈存取選單列選取憑證輔助程式→從憑證授權要求憑證,然後如圖 2-5,輸入你作為 Apple ID的電子郵件位址和名字,並且按下 Saved to disk(儲存到磁碟)和Let me specify key pair information(指定密鑰配對資訊),再按下 Continue(繼續)。接著會提示你憑證要求的檔案名稱。

接受預設值(使用 RSA演算法、金鑰長度 2,048位元),並按下 Continue。此程式會開始產生 CSR檔案,並將它存到磁碟。這個檔案會存放在提示你選擇檔名時,你所指定的位置(預設通常是桌面)。

接著登入 iOS Dev Center(http://developer.apple.com/ios/,並按下 iOS Provisioning Portal的超連結,這會帶你到管理你憑證和裝置的主要入口網站。

Page 17: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

14 | 第二章

圖 2-5  Keychain Access.app 的 Certificate Assistant

按 下 Certificates 超 連 結, 這 會 連 往 Development 標 籤 頁, 接 著 再 按 下 Request Certificate,然後跟著指令將你的 CSR檔案上傳到入口網站。

如果你是以個人名義加入 iOS Developer Program,你的憑證要求會自動批准。但如果你是開發團隊的一員,你指定的團隊管理者必須在憑證產生以及能夠下載之前批准你的憑

證要求。

如果在按下 Approve之後未能看到 Download出現,請按 Development

標籤頁超連結來重新整理網頁,Download應該就會出現。

批准之後,需要下載你個人的憑證及 WWDR中級憑證,然後將它們安裝到 Mac OS X 鑰匙圈。同樣是在 Development標籤頁,請按下 Download按鈕來下載你的個人憑證,再以右鈕按下WWDR中級憑證超連結,並將超連結的檔案存到磁碟。

只要這些憑證都下載到本機電腦,你需要將它們安裝到 Mac OS X keychain。雙按這些憑證檔案即可安裝;雙按之後會啟動鑰匙圈存取應用程式,並且會要求你確認要將憑證

加入鑰匙圈。

16

Page 18: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 15

如果你有好幾個鑰匙圈,需要確定憑證安裝在預設的鑰匙圈,通常稱為登

入(login)。預設的鑰匙圈會以粗體字呈現在 Keychain Access.app應用程

式左上角的鑰匙圈最上列。一般來說,最好將登入鑰匙圈保持為預設,

如果不是,你可以從選單列選取檔案→設定 "登入 "作為預設鑰匙圈,讓

登入變成預設。如果憑證未裝進預設鑰匙圈,Xcode就找不到憑證,也

就無法以憑證簽署二進位檔。這意味著你也無法應用程式安裝到你的 iOS

裝置。

你可以按下鑰匙圈存取應用程式左下角類別裡的憑證,來檢查這 2個憑證是否正確安裝到鑰匙圈;如圖 2-6,你自己的憑證和 Apple的WWDR憑證應該都要在登入鑰匙圈裡。

圖 2-6  鑰匙圈存取應用程式顯示最近安裝的憑證,Xcode 簽署二進位檔及部署二進位檔到 iOS裝置,都必須要有這些憑證

取得開發裝置的 UDID將打算用來開發的 iOS裝置插進 Mac,接著開啟 Xcode,然後從選單列選取Window → Organizer項目,這會開啟 Organizer視窗,如圖 2-7,其中顯示了連上 Mac的裝置。

17

Page 19: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

16 | 第二章

圖 2-7  Xcode Organizer 視窗

為了建立開發裝置的行動佈建描述檔,你需要這個開發裝置的唯一裝置識別碼(unique device identifier,UDID)。以滑鼠右鈕或 Control-click 按下圖 2-7 標示為 Identifier 的40個字元長的字串,然後選取複製。

回到 Provisioning Portal 網頁,按下 Devices,再選取 Manage 標籤頁,然後按下 Add Devices。在適當的文字方塊輸入裝置名稱,然後在標示為 Device ID的文字方塊輸入UDID,最後按下 Submit,你就完成裝置的註冊。

建立 App ID要將應用程式安裝到 iOS裝置,你需要建立該程式的 App ID。這個唯一識別碼讓裝置授予應用程式存取鑰匙圈裡它自己的資料,但也僅能讓應用程式存取使用者名稱、密

碼、其他應用程式使用的憑證。

App ID也當成行動佈建描述檔的一部份在使用。行動佈建描述檔與你早先產生的憑證有所差異:憑證會留在你 Mac裡的鑰匙圈,並且會由 Xcode用來數位簽署 iOS應用程式二進位檔;而你要產生的行動佈建描述檔則會結合 1或數個裝置,並且會由 Xcode轉移到 iOS裝置。這能讓你開發的應用程式在該裝置執行。

18

Page 20: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 17

在 iOS Developer Program Portal網頁的 App ID區塊選取 Manage標籤頁,再按下 New App ID,然後替你的 App ID輸入名稱;目的是以此方便記憶的名稱來識別這個 App ID,完全可以讓你自行命名。由於這是你第 1個 App ID,Bundle Seed ID(捆包種子ID)請選取 Generate New(產生新的)。

最後,要輸入 Bundle Identifier(捆包識別碼),這必須是唯一且不能重複,多數開發人員會反轉他們網域名稱當作 Bundle Identifier。例如我的網域名稱是 babilim.co.uk,因此就將 uk.co.babilim.*當作我的 Bundle Identifier。

上述出現在我的 Bundle Identifier 結尾的星號(*)是萬用字元。在

Bundle Identifier裡使用星號,意味著你可以在各個不同的應用程式使用

這個 App ID。如果這裡不使用星號,就必須在應用程式部署到 iOS裝置

之前,替每個應用程式都產生新的 App ID,並且替這裡的每個應用程式

產生新的佈建描述檔。使用星號表示你能產生允許你將數個應用程式部署

到 iOS裝置的單一個行動佈建描述檔。

技術上來說,這意味著所有利用這個 Bundle Identifier 建置的應用程

式,會在 iOS裝置共用 keychain相同的部分;這點我會在稍後討論。在

Bundle Identifier使用星號,也代表你所建置的應用程式會使用這個 App

ID,而且與它結合的行動佈建描述檔將無法使用 Apple推播通知(Push

Notification)及程式內加購(in-app purchase)等服務。

按下 Submit,入口網站現在會產生長度為 10個字元的新的 Bundle Seed ID,並且會將它加在你提供的 Bundle Identifier之前。這就是你的 App ID。

你需要記下你的 Bundle Identifier,諸如靠近第 3章結尾所述,屆時必須將此識別碼提供給 Xcode,才能將正在開發的應用程式部署到 iOS裝置。

建立行動佈建描述檔

現在你已經準備好建立行動佈建描述檔了。在 Provisioning Portal網頁的 Provisioning區塊,選取 Development標籤頁,再按下 New Profile。

接著請輸入描述檔名稱,雖然名稱可以任你決定,但我建議名稱裡要有 Developer Profile。因為你可能會產生許多佈建描述檔,包括稍後還會有許多用在發佈(特別設置或 App Store皆可),因此知道這個描述檔是用在開發,將會很有幫助。

然後請檢查相關的憑證方塊:如果你是獨立的開發人員,之前利用鑰匙圈存取應用程式

產生的憑證,這裡只能選擇一次。

19

Page 21: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

18 | 第二章

選取你在前一小節產生的 App ID,然後選取這個描述檔的開發裝置(如果有 1個以上的裝置可用,可同時選取數個裝置)。如我之前所述,Xcode會將佈建描述檔轉移到你的 iOS裝置,而以 Xcode利用佈建描述檔所建置的應用程式二進位檔,只有在這個描述檔合法有效的裝置才能成功執行。如果這裡沒有選取正確的裝置,你的程式將無法在錯

誤的裝置執行。別擔心,你隨時可以將額外的裝置加到描述檔,但需要在 Provisioning Portal網站重新產生佈建描述檔。

按下 Submit可產生新的行動佈建描述檔。在後面的章節,我會討論發佈應用程式所需的佈建描述檔。這裡的狀態會顯示成尚待回覆,按下 Developmemt標籤頁可以重新載入它,直到它不再顯示尚待回覆為止。

等到備妥描述檔,按下 Download即可將佈建描述檔下載到你的 Mac。許多方法可以安裝描述檔,但最容易的方法,是將你所下載的 mobileprovision檔案拖到 Dock 裡的Xcode圖示;這會在 Xcode安裝它,並能在開發時使用它。

讓裝置能開發程式

在你開始開發程式之前,還要讓你的裝置可以當作開發之用。作法是先回到 Xcode,然後從選單列執行 Window→ Organizer,再從左面板選取開發裝置,接著按下 Use for Developmemt。如果 Xcode無法管理你正確註冊的裝置,你可能需要先拔下裝置,再重新插入電腦,讓 Xcode可以正確的找到裝置。如果還是無法運作,應該試著關閉裝置,然後再重新開啟。根據你所安裝的 SDK版本及裝置的 OS版本,你可能需要從 Xcode的 Organizer視窗還原裝置。但還原的過程會讓裝置裡的任何資料消失。如果必須還原裝置,還原之前可以利用 iTunes的同步功能或以 iCloud來備份資料。

如果能負擔額外的費用,我會建議開發裝置和日常使用的裝置應該分開。因為日後你可

能會在開發裝置安裝測試版的 iOS,而測試版在本質上勢必不穩定。例如若你依賴自己的 iPhone與世界保持聯繫,可能就不會想將這支 iPhone當作開發測試機。

只要安裝了這類的描述檔,你可以確認 Xcode應該會與你的 iOS裝置自動同步。你可以確認描述檔已經安裝,作法如圖 2-8,在你的 iOS裝置執行 Setting→ General→ Profile,然後檢查並確認描述檔是否已經正確安裝。

現在請確認所有的一切是不是都能正確運作,請留意 Xcode的 Organizer視窗,看看連線裝置旁的狀態燈號,如果一切順利,這個狀態燈號是綠色。如圖 2-9,你也可以在Organizer視窗中央看到行動佈建描述檔。

恭喜,現在所有的憑證和描述檔都已經就定位,能讓你在 iOS裝置執行自己所開發的程式了。

20

Page 22: 誰適合閱讀這本書?epaper.gotop.com.tw/PDFSample/A335.pdf序 | xi 你能學到什麼?從第1 次啟動Xcode,到提交應用程式到App Store,這本書將帶領你開發第1

成為開發人員 | 19

圖 2-8  開發佈建描述檔已安裝在我的 iPhone 4S

圖 2-9  Xcode 的 Organizer 視 窗 顯 示 我 的 開 發 佈 建 描 述 檔 已 經 裝 進 我 的 iPhone 4S, 這支手機已經可以當作開發測試機

21