向下一代iOS應用開發前進,你準備好了嗎。
伴隨著應用的下載量超過5百萬,而且這一數字仍在增長,應用開發可以說是獲利頗豐,但是你必須能夠脫穎而出。為此,你的應用需要集成高級功能。
通過利用可用的iOS框架,使用現代的Objective-C編程規則的方式,本書將逐步引導你創建高級iOS應用。貫穿全部章節,你將發現70個貼合實際的示例程序,你可以下載這些示例并以此為起點。使用本指南,你將能夠創建最前沿的應用,并為發布到App Store做好準備。
我第一次與計算機結緣是15歲那年在荷蘭讀高等技術學校時,在那里我結識了Sinclair ZX-81。這是一臺只有16KB內存的小型計算機,但是它很神奇,我從接觸它的第一天起就開始了我的編程生涯。
在1981年,當硬件和軟件革命開始時,我又使用了Exidy Sourcer和Commodore 64計算機,很快我又有了我的第一臺個人電腦XT(IBM Personal Computer XT)。讓我著迷的事實是,你可以通過編程讓計算機去精確地執行想要它們做的事情。而且,我能夠為這些計算機的系統開發軟件。
我開始用匯編語言編程,在一段時間后,我學會了用C、Basic、QuickBasic、Delphi、Pascal、Turbo Pascal、C++、Java、Microsoft VB.NET、Microsoft C#和Objective-C等語言編程。編程成為了我的職業,我熱愛這份職業。
不管怎樣,像許多程序員一樣,由于之前已經獲得的知識和技能,我做了分析師、軟件工程師和顧問,并最終進入了管理崗位。我的編程時間開始變得越來越少,而這卻是我最喜歡做的事。
在我的職業生涯中,我管理和共同成立了幾家IT服務公司,并在這些公司中擔任項目經理、商業顧問和董事,但是我總是能夠在這些項目中找到時間去做一些軟件開發工作。
在這些年里,我曾經給一些大公司交付過高端軟件解決方案,例如富士膠片公司(Fuji Photo Film)、殼牌公司(Shell)、聯合利華公司(Unilever)、普利斯通公司(Bridgestone)、阿爾卡特(Alcate)、理光公司(Ricoh)以及全世界的其他許多公司。我不是圖像設計師,并且設計應用的視覺效果并不是我的強項。我向來關注于代碼優化和新技術的探索。開發出高階面向對象的代碼而又使用極少內存占用空間的設計仍舊是一項挑戰。
在2006年,我決定拋棄荷蘭的繁忙生活,搬到法國,在那里我成立了一家軟件公司,專注于開發后端的軟件解決方案,不久后,也專注于開發iOS應用。
我的專業團隊現在為澳大利亞、歐洲和美國的客戶開發iPhone和iPad應用,在這一領域內,我們使用最新的SDK和現代程序開發實踐,并交付從后端的管理系統到iOS應用的端到端的解決方案。
本書讀者對象
這本書適用于想要提高和擴展Objective-C語言編程技能的開發人員、有經驗的iOS開發者以及毫無經驗的iOS開發新人。
本書需要讀者掌握Xcode開發環境的一些基本知識和Objective-C語言開發的基礎,這樣能夠理解本書提供的詳細而深入的說明,以及70個編程示例代碼。
本書在介紹開發高級iOS應用所涉及的技術方面,對想要加深理解其內容的每一位讀者和iOS開發人員都很有價值。本書可以被當作參考書來使用,用以理解iOS SDK的細節。
本書包含編程技巧的詳細說明,以及70個示例代碼,這也使本書成為大學教授和培訓師的理想教材。
本書主要內容:
本書涵蓋了開發高級iOS應用所需要的所有主題。所有的說明和代碼示例都適用于最新的iOS 7 SDK并經過測試。
本書涵蓋以下主題范圍:
●創建Personal Library
●UITableView
●Map Kit框架
●Action和Alert概述
●國際化
●在你的應用中使用多媒體
●使用Web服務和XML-JSON解析
●開發FTP客戶端
●Core Data框架的實現
●使用通知
●實現E-mail、SMS和撥號功能
●Address Book框架的介紹和使用
●Event Kit框架編程
●Social and Accounts框架的使用
●分析你的應用
●從應用獲利和Store Kit框架的使用
●證書和配置文件
●打包和發布你的應用
Interface Builder和Storyboard的用法,以及用戶界面設計范例
每個iOS程序員在他們的應用中如何創建用戶界面元素都有個人的喜好。在我自己的工作中,我使用代碼創建所有的用戶界面元素,因為我喜歡這種方式帶來的可控性和可擴展性。因此,在這本書的絕大多數的課程中,你將發現使用Interface Build文件。例如,有些開發者更喜歡使用Storyboard,在任何項目中,他們都可以使用Storyboard代替Interface Builder,你也可以如此選擇。這本書在兩種情況下對開發者來說應該都有用處。
本書篇章結構
本書分為4個部分:
●第Ⅰ部分:開發高級UI
●第Ⅱ部分:網絡和數據處理
●第Ⅲ部分:集成應用
●第Ⅳ部分:將應用運用到生產環境中
第Ⅰ部分:開發高級UI包含以下章節:
●第1章:創建Personal Library
●第2章:Tableview進階指南
●第3章:Map Kit框架
●第4章:ActionView和Alert概述
●第5章:國際化:為全世界構建應用
●第6章:多媒體的使用
第1章以開發包含可重用代碼的Personal Library類為開頭,你可以將這些代碼用作基礎框架在每一個應用中使用。在后續的章節中,你將用更多的功能擴展這個Personal Library類。
第2章將教你構建讓人眼前一亮的表視圖的方法,你將學會如何構建帶有下拉即出現搜索條功能的表視圖。
第3章全部是關于Map Kit框架的內容。你將了解位置管理器(Location Manager)的概念,并且會以開發為目的擴展GPS模擬器。你將會開發帶有自定義標注的群集地圖視圖。
動作視圖和提醒控件是第4章要討論的主題內容。你將學會如何在應用中實現動作視圖和提醒控件,與使用應用的用戶交互。
第5章將通過對本地化的技巧的講解,以及對國際化日期和數字格式的方法的講解,教會你如何為全世界的用戶國際化應用。
第6章全部介紹的是多媒體。你將學會顯示和創建PDF文檔的有效方法,以及使用不同的可用框架播放和錄制音頻或者視頻。
第Ⅱ部分:網絡和數據處理包含以下章節:
●第7章:使用Web服務和解析
●第8章:使用FTP
●第9章:Core Data框架的實現
第7章將教會你如何通過REST或SOAP協議使用Web服務,以及如何使用GET和POST動作將數據發送給這些Web服務。對以XML和JSON格式返回的應答信息的解析將在本章的結尾詳細闡述。
第8章將講解文件傳送協議(File Transfer Protocol,FTP)適配iOS應用架構的方法。還將講解使用Objective-C語言怎樣能夠編寫出簡單的FTP客戶端。應大多數讀者的進一步要求,本章也會講解基于Objective-C的類編寫一條FTP命令的方法。
第9章將講解所有關于Core Data框架的內容。它闡述了Core Data這個框架的概念,存儲方法、實體、關系以及讀取數據的方法。
第Ⅲ部分:集成應用包含以下章節:
●第10章:通知
●第11章:發送電子郵件、SMS和撥打電話
●第12章:了解Address Book
●第13章:事件編程
●第14章:與社交媒體集成
第10章將會講解實現內部通知和外部推送通知的方法。
第11章將會講解從應用內發送E-mail和短信消息的方法,以及撥打電話的方法。
第12章將會講解使用Address Book框架讀取和寫入聯系人數據庫的方法。你將學會如何請求訪問聯系人數據庫的權限,以及為了使用聯系人數據而展示用戶界面。
第13章將會講解從應用內創建和管理事件和提醒的方法。
第14章將會講解在應用中內部集成Facebook和Twitter的方法。你將學會如何展示用戶的Tweet(注:Twitter上用戶發送的一條消息)和Facebook用戶墻上的留言,以及如何發表留言到Facebook,或者發送Tweet。
第Ⅳ部分:將應用轉化為產品包含以下章節:
●第15章:分析應用
●第16章:從應用中獲利
●第17章:了解iTunes Connect
●第18章:構建與發布
第15章講解在應用中實現耗用分析的方法。
第16章講解從應用中獲利的方法。本章包含了深入的闡述和程序內購買的輔助類。本章也涵蓋包括像iAd和AdMob在內的Advertisement框架的實現。
第17章講解使用iTunes Connect為應用的提交作準備的方法。理解provisioning profile、certificate和device這幾個名詞對能夠發布應用來說是至關重要的。
第18章,最后一章,講解以Ad-Hoc發布版,抑或是以App Store發布版構建和發布應用的方法。
使用本書條件
為了編寫iOS應用,你需要下載包含有最新iOS SDK的最新版本的Xcode。你可以在這里下載http://developer.apple.com。
本書約定
為了幫助你最大限度地理解文字內容并提醒你注意正在介紹的內容,我們在本書中使用了大量的規范。
源代碼
在練習書中的示例時,可以選擇手動輸入代碼或者使用本書附帶的源代碼文件。書中用到的所有源代碼都可以從www.wrox.com下載。進入站點http://www.wrox.com后,只需要找到本書的書名(使用Search搜索框或書名列表),單擊本書詳細信息頁面上的Download Code鏈接,就可以得到本書所有的源代碼。
下載完代碼后,用你喜歡的壓縮工具把它解壓縮。此外,也可以去Wrox的主下載頁面www.wrox.com/dynamic/books/download.aspx 找到本書或Wrox出版的其他書籍的代碼。
勘誤表
盡管我們已經盡了各種努力來保證文章或代碼中不出現錯誤,但是錯誤總是難免的,如果你在本書中找到了錯誤,例如拼寫錯誤或代碼錯誤,請告訴我們,我們將非常感激。通過勘誤表,可以讓其他讀者避免受挫,當然,這還有助于提供更高質量的信息。
要在網站上找到本書的勘誤表,可以登錄http://www.wrox.com,通過Search工具或書名列表查找本書,然后在本書的細目頁面上,單擊Book Errata鏈接。在這個頁面上可以查看Wrox編輯已提交和粘貼的所有勘誤項。完整的圖書列表還包括每本書的勘誤表,網址是www.wrox.com/misc-pages/booklist.shtml。
如果在Book Errata頁面上沒有看到你找出的錯誤,請進入www.wrox.com/contact/ techsupport.shtml,填寫表單,發電子郵件,我們就會檢查你的信息,如果是正確的,就在本書的勘誤表中粘貼一個消息,我們將在本書的后續版本中采用。
p2p.wrox.com
P2P郵件列表是為作者和讀者之間的討論而建立的。讀者可以在p2p.wrox.com上加入P2P論壇。該論壇是一個基于Web的系統,用于傳送與Wrox圖書相關的信息和相關技術,與其他讀者和技術用戶交流。該論壇提供了訂閱功能,當論壇上有新帖子時,會給你發送你選擇的主題。Wrox作者、編輯和其他業界專家和讀者都會在這個論壇上進行討論。
在http://p2p.wrox.com上有許多不同的論壇,幫助讀者閱讀本書,在讀者開發自己的應用程序時,也可以從這個論壇中獲益。要加入這個論壇,必須執行下面的步驟:
(1) 進入p2p.wrox.com,單擊Register鏈接。
(2) 閱讀其內容,單擊Agree按鈕。
(3) 提供加入論壇所需的信息及愿意提供的可選信息,單擊Submit按鈕。
(4) 然后就可以收到一封電子郵件,其中的信息描述了如何驗證賬戶,完成加入過程。
加入論壇后,就可以發送新信息,回應其他用戶的帖子。可以隨時在Web上閱讀信息。如果希望某個論壇給自己發送新信息,可以在論壇列表中單擊該論壇對應的Subscribe to this Forum圖標。
對于如何使用Wrox P2P的更多信息,可閱讀P2P FAQ,了解論壇軟件的工作原理,以及許多針對P2P和Wrox圖書的常見問題解答。要閱讀FAQ,可以單擊任意P2P頁面上的FAQ鏈接。
第Ⅰ部分 開發高級UI
第1章 創建Personal Library3
1.1 創建Personal Library4
1.1.1 項目基礎知識4
1.1.2 啟動新項目5
1.1.3 配置項目6
1.1.4 定義常量8
1.1.5 使用配置文件8
1.1.6 導入頭文件10
1.2 注冊——登錄11
1.2.1 創建注冊邏輯12
1.2.2 初始化數據15
1.2.3 初始化應用的默認設置15
1.2.4 創建登錄邏輯16
1.2.5 保護密碼的安全19
1.2.6 在keychain中存儲密碼20
1.3 崩潰管理21
1.3.1 理解崩潰21
1.3.2 實現崩潰處理程序22
1.4 本章小結28
第2章 Tableview進階指南31
2.1 理解UITableView31
2.1.1 datasource和delegate32
2.1.2 滾動36
2.2 構建聊天視圖控制器39
2.2.1 構建datasource40
2.2.2 構建聊天數據對象40
2.2.3 構建定制的UITableView控件43
2.2.4 靈活的單元格高度47
2.2.5 開發定制的單元格47
2.2.6 創建聊天用戶對象51
2.2.7 融會貫通52
2.3 UITableView的下拉功能58
2.3.1 實現UISearchbar68
2.3.2 添加字母表索引73
2.4 本章小結78
第3章 Map Kit框架79
3.1 模擬iOS設備的位置移動80
3.1.1 為何需要一個GPS模擬器80
3.1.2 創建模擬器80
3.1.3 使用Google Maps創建GPS路線文件84
3.1.4 實現YDLocation-Simulator類88
3.2 使用標記90
3.2.1 創建定制的標記91
3.2.2 響應標記的批注95
3.2.3 標記群集101
3.3 本章小結119
第4章 Action View和Alert概述121
4.1 請求用戶輸入121
4.2 使用多個選項創建UIActionSheet122
4.3 呈現UIActionSheet126
4.3.1 使用showInView方法來呈現126
4.3.2 使用showFromTabBar方法來呈現126
4.3.3 使用showFromBarButtonItem方法來呈現129
4.3.4 使用showFromRect方法來呈現130
4.3.5 使用showFromToolbar方法來呈現132
4.3.6 用戶輸入的響應134
4.3.7 處理用戶選項134
4.3.8 擴展UIAlertView137
4.3.9 在UIAlertView上添加UITextField137
4.4 本章小結141
第5章 國際化:為全世界構建應用143
5.1 本地化應用143
5.1.1 建立本地化144
5.1.2 本地化Interface Builder文件145
5.1.3 本地化字符串147
5.1.4 本地化圖片149
5.1.5 本地化應用的名稱152
5.2 使用日期格式152
5.2.1 區域的概念152
5.2.2 日歷概述156
5.2.3 以通用方式存儲日期158
5.3 使用數字159
5.4 本章小結164
第6章 多媒體的使用165
6.1 可攜式文檔格式165
6.2 使用UIWebView顯示PDF文檔166
6.3 Instruments分析工具介紹168
6.4 使用QuickLook顯示PDF文檔170
6.5 從PDF文檔創建縮略圖173
6.6 創建PDF文檔177
6.7 播放和錄制音頻181
6.8 相關框架介紹181
6.8.1 AVFoundation框架181
6.8.2 Audio Toolbox框架182
6.8.3 Media Player框架182
6.9 播放來自應用包的音頻文件182
6.10 從iTunes庫中播放音頻187
6.11 播放音頻流190
6.12 錄制音頻193
6.13 播放和錄制視頻198
6.14 從iTunes庫播放視頻201
6.15 播放YouTube視頻204
6.16 錄制視頻206
6.17 本章小結209
第Ⅱ部分 網絡和數據處理
第7章 使用Web服務和解析213
7.1 為什么需要使用Web服務213
7.2 了解基本網絡214
7.2.1 了解協議214
7.2.2 了解操作215
7.2.3 了解響應代碼215
7.3 Web服務簡介215
7.4 調用HTTP服務216
7.4.1 請求網站216
7.4.2 從HTTP URL下載圖片219
7.4.3 使用HTTPS請求安全網站224
7.4.4 使用數據塊227
7.5 調用REST服務231
7.5.1 構建請求232
7.5.2 處理響應235
7.5.3 發布到RESTful服務241
7.6 發出SOAP請求248
7.6.1 為請求做準備250
7.6.2 將值傳遞到操作252
7.6.3 了解安全的SOAP請求257
7.7 更多解析259
7.7.1 逗號分隔值文件260
7.7.2 將XML轉換為NSDictionary266
7.8 本章小結269
第8章 使用FTP271
8.1 開發FTP客戶端271
8.1.1 編寫簡單的FTP客戶端272
8.1.2 下載遠程文件276
8.1.3 創建遠程目錄278
8.1.4 列出遠程目錄279
8.1.5 上傳文件283
8.1.6 從NSStream中讀取284
8.1.7 寫入NSStream284
8.1.8 編寫復雜的FTP客戶端288
8.2 使用FTP客戶端296
8.3 本章小結296
第9章 實現Core Data297
9.1 Core Data簡介297
9.1.1 為什么應使用Core Data298
9.1.2 托管對象上下文簡介298
9.1.3 托管對象模型簡介298
9.1.4 托管對象簡介298
9.1.5 持久性存儲簡介299
9.1.6 獲取請求簡介299
9.2 在應用中使用Core Data299
9.2.1 創建托管對象模型300
9.2.2 創建托管對象302
9.2.3 創建持久性存儲303
9.2.4 設置Appdelegate304
9.3 在應用中使用Core Data307
9.3.1 使用托管對象307
9.3.2 獲取托管對象308
9.3.3 使用關系313
9.3.4 了解模型更改317
9.4 針對性能進行調優322
9.4.1 優化保存326
9.4.2 配置托管對象上下文327
9.5 通過Core Data實現并發328
9.6 本章小結330
第III部分 集成應用
第10章 通知333
10.1 實現本地通知333
10.1.1 了解本地通知333
10.1.2 創建通知335
10.1.3 接收通知338
10.2 了解推送通知338
10.2.1 配置開發者門戶340
10.2.2 獲取證書343
10.2.3 通過Urban Airship實現345
10.3 外部通知348
10.3.1 自定義URL模式348
10.3.2 響應URL請求349
10.4 本章小結350
第11章 發送電子郵件、SMS和撥打電話351
11.1 發送電子郵件351
11.1.1 撰寫電子郵件352
11.1.2 使用附件354
11.2 發送SMS(文本消息)354
11.2.1 驗證SMS是否可用355
11.2.2 撰寫文本消息355
11.3 撥打電話號碼356
11.4 本章小結357
第12章 了解Address Book359
12.1 Address Book框架簡介359
12.2 訪問Address Book360
12.2.1 選擇聯系人360
12.2.2 請求訪問權限362
12.2.3 顯示并編輯聯系人365
12.2.4 創建聯系人367
12.2.5 刪除聯系人369
12.3 以編程方式訪問Address Book370
12.3.1 了解Address Book370
12.3.2 了解記錄373
12.3.3 了解屬性374
12.3.4 以編程方式創建聯系人375
12.3.5 以編程方式刪除聯系人378
12.4 本章小結378
第13章 事件編程379
13.1 Event Kit框架簡介379
13.2 使用EventKitUI框架380
13.2.1 請求訪問權限380
13.2.2 訪問日歷382
13.2.3 創建和編輯日歷事件384
13.3 以編程方式訪問Calendar數據庫385
13.3.1 創建事件385
13.3.2 編輯事件390
13.3.3 刪除事件390
13.3.4 保持同步390
13.4 使用提醒391
13.4.1 創建提醒391
13.4.2 編輯提醒392
13.4.3 刪除提醒392
13.4.4 使用警報392
13.5 本章小結394
第14章 與社交媒體集成395
14.1 社交媒體集成簡介395
14.2 了解Accounts框架396
14.3 了解Social框架400
14.3.1 發帖401
14.3.2 檢索推文409
14.4 與Facebook集成411
14.5 創建單點登錄應用418
14.6 本章小結423
第Ⅳ部分 將應用運用到生產環境中
第15章 分析應用427
15.1 執行技術分析427
15.1.1 應用崩潰428
15.1.2 阻止主線程428
15.1.3 內存泄漏429
15.1.4 使用同步的HTTP請求429
15.1.5 廣泛的帶寬使用率430
15.1.6 電池消耗434
15.1.7 糟糕的用戶界面436
15.2 執行商業分析436
15.3 本章小結437
第16章 從應用中獲利439
16.1 獲利簡介439
16.1.1 付費應用439
16.1.2 廣告440
16.1.3 In-App Purchases440
16.1.4 訂閱440
16.1.5 潛在客戶開發440
16.1.6 加盟銷售441
16.2 開發In-App Purchases441
16.2.1 In-App Purchase簡介441
16.2.2 注冊產品441
16.2.3 選擇產品類型441
16.2.4 了解In-App Purchase進程442
16.2.5 實現In-App Purchase443
16.3 從廣告中獲利464
16.3.1 iAd框架簡介464
16.3.2 實現AdMob網絡467
16.4 本章小結470
第17章 了解iTunes Connect471
17.1 iOS開發者會員中心472
17.1.1 獲取開發者證書472
17.1.2 管理設備476
17.1.3 管理應用479
17.1.4 創建開發配置文件484
17.1.5 創建發布配置文件488
17.2 本章小結491
第18章 構建與發布493
18.1 App Store審核493
18.1.1 了解審核指南493
18.1.2 了解審核流程494
18.1.3 了解拒絕狀態496
18.1.4 避免各種常見誤區496
18.2 為Ad Hoc發布構建應用497
18.2.1 構建應用497
18.2.2 發布后進行測試499
18.3 為App Store發布構建應用501
18.4 本章小結507
附錄A 音頻代碼509
附錄B 圖片尺寸513