iOS開發指南:從零基礎到App Store上架

內容介紹

內 容 提 要
本書共4 部分:第一部分為基礎篇,介紹了iOS 的一些基礎知識;第二部分為網路篇,介紹了iOS 網路開發相關的知識;第三部分為進階篇,介紹了iOS 高級內容、商業思考等;第四部分為實戰篇,從無到有地介紹了兩個真實的iOS 套用——MyNotes 套用和2016 里約熱內盧奧運會套用。書中包括了100 多個完整的案例項目原始碼,大家可以到本書網站http://www.iOSBook1.com 下載。
本書適合iOS 開發人員閱讀。

作者介紹

關東升
國內知名iOS技術作家,iOS技術顧問,高級培訓講師,移動開發專家。精通iOS、Android和Windows Phone及HTML5等移動開發技術。曾先後主持開發大型網路遊戲神農訣的iOS和Android客戶端開發,國家農產品追溯系統的iPad客戶端開發,酒店預訂系統的iPhone客戶端開發,金融系統微博的iOS、Windows Phone 7、Android客戶端開發。在App Store上發布多款遊戲和套用軟體,擅長移動平台的套用和遊戲類項目開發。近期為中國移動研究院、雲南移動、東軟、方正科技、大唐電信、中石油、深圳康拓普、上海財富168、天津港務局等企事業單位授課。
著有《iOS網路編程與雲端套用最佳實踐》、《iPhone與iPad開發實戰——iOS經典套用剖析》、《Android開發案例驅動教程》、《Android網路遊戲開發實戰》、《移動平台用戶體驗設計》以及《JSP網路程式設計》等圖書。

作品目錄

目 錄
第一部分 基礎篇
第1章 開篇綜述2
1.1  iOS概述2
1.1.1  iOS介紹2
1.1.2  iOS 6新特性2
1.2  開發環境及開發工具3
1.3  本書中的約定4
1.3.1  案例代碼約定4
1.3.2  圖示的約定5
第2章 第一個iOS應用程式7
2.1  創建基於nib的HelloWorld工程7
2.1.1  創建工程7
2.1.2  Xcode中的iOS工程模板10
2.1.3  套用剖析11
2.2  基於故事板的HelloWorld工程13
2.2.1  使用故事板重構HelloWorld14
2.2.2  nib、xib與故事板15
2.2.3  故事板中的Scene和Segue16
2.3  套用生命周期17
2.3.1  非運行狀態——套用啟動場景18
2.3.2  點擊Home鍵——套用退出場景19
2.3.3  掛起重新運行場景20
2.3.4  記憶體清除——套用終止場景21
2.4  視圖生命周期21
2.4.1  視圖生命周期與視圖控制器關係22
2.4.2  iOS 6 UI狀態保持和恢復23
2.5  設定產品屬性25
2.5.1  Xcode中的Project和Target25
2.5.2  設定常用的產品屬性27
2.6  iOS API簡介29
2.6.1  API概述29
2.6.2  如何使用API幫助31
2.7  小結33
第3章 iOS常用設計模式34
3.1  單例模式34
3.1.1  問題提出34
3.1.2  實現原理34
3.1.3  套用案例35
3.2  委託模式37
3.2.1  問題提出37
3.2.2  實現原理39
3.2.3  套用案例41
3.3  觀察者模式44
3.3.1  問題提出44
3.3.2  實現原理45
3.3.3  通知機制和KVO機制47
3.4  MVC模式53
3.4.1  MVC模式概述53
3.4.2  Cocoa Touch中的MVC模式54
3.5  小結56
第4章 UIView與控制項57
4.1  視圖“始祖”——UIView57
4.1.1  UIView“家族”57
4.1.2  套用界面的構建層次59
4.1.3  視圖分類60
4.2  標籤控制項和按鈕控制項60
4.2.1  標籤控制項61
4.2.2  按鈕控制項61
4.2.3  動作和輸出口63
4.3  TextField控制項和TextView控制項66
4.3.1  TextField控制項66
4.3.2  TextView控制項67
4.3.3  鍵盤的打開和關閉67
4.3.4  關閉和打開鍵盤的通知68
4.3.5  鍵盤的種類69
4.4  開關控制項、滑塊控制項和分段控制項70
4.4.1  開關控制項71
4.4.2  滑塊控制項71
4.4.3  分段控制項71
4.5  網頁控制項WebView72
4.5.1  WebView介紹72
4.5.2  使用WebView構建Hybrid套用75
4.6  螢幕滾動控制項ScrollView80
4.6.1  ScrollView屬性的設定80
4.6.2  鍵盤與其他控制項的協同84
4.7  等待相關的控制項與進度條86
4.7.1  活動指示器ActivityIndicatorView87
4.7.2  進度條ProgressView88
4.8  警告框和操作表88
4.8.1  警告框AlertView89
4.8.2  操作表ActionSheet90
4.9  工具列和導航欄92
4.9.1  工具列92
4.9.2  導航欄94
4.10  螢幕布局98
4.10.1  iPad與iPhone螢幕布局98
4.10.2  絕對布局和相對布局99
4.10.3  使用AutoLayout布局102
4.10.4  旋轉你的螢幕103
4.11  選擇器108
4.11.1  日期選擇器108
4.11.2  普通選擇器110
4.11.3  數據源協定與委託協定112
4.12  iOS 6中的集合視圖113
4.12.1  集合視圖介紹114
4.12.2  集合視圖單元格116
4.12.3  數據源協定與委託協定118
4.13  小結119
第5章 表視圖120
5.1  概述120
5.1.1  表視圖的組成120
5.1.2  表視圖的相關類121
5.1.3  表視圖分類122
5.1.4  單元格的組成和樣式123
5.1.5  數據源協定與委託協定124
5.2  簡單表視圖125
5.2.1  創建簡單表視圖125
5.2.2  自定義單元格129
5.2.3  添加搜尋欄133
5.3  分節表視圖138
5.3.1  添加索引138
5.3.2  分組與靜態表141
5.4  修改單元格144
5.4.1  刪除和插入單元格144
5.4.2  移動單元格150
5.5  表視圖UI設計模式152
5.5.1  分頁模式152
5.5.2  下拉刷新模式152
5.5.3  iOS 6下拉刷新控制項153
5.6  小結155
第6章 視圖控制器與導航模式156
6.1  概述156
6.1.1  視圖控制器的種類156
6.1.2  導航模式156
6.1.3  模態視圖157
6.2  平鋪導航163
6.2.1  套用場景163
6.2.2  基於分屏導航的實現165
6.2.3  基於分頁導航的實現168
6.3  標籤導航173
6.3.1  套用場景174
6.3.2  nib實現174
6.3.3  故事板實現179
6.4  樹形結構導航182
6.4.1  套用場景182
6.4.2  nib實現183
6.4.3  故事板實現189
6.5  組合使用導航模式193
6.5.1  套用場景193
6.5.2  故事板實現194
6.6  小結200
第7章 iPhone與iPad套用開發的差異201
7.1  概述201
7.1.1  套用場景差異201
7.1.2  設計和開發需注意的問題201
7.1.3  構建自適應的iPhone和iPad工程204
7.2  iPad專用API206
7.2.1  UIPopoverController控制器206
7.2.2  UISplitViewController控制器209
7.2.3  模態視圖專用屬性215
7.3  Master-Detail應用程式模板219
7.3.1  nib實現220
7.3.2  故事板實現225
7.4  Utility應用程式模板228
7.4.1  nib實現229
7.4.2  故事板實現232
7.5  移動平台的分層架構設計234
7.5.1  低耦合企業級系統架構設計234
7.5.2  移動平台的分層架構設計235
7.5.3  基於同一工程的分層235
7.5.4  基於一個工作空間不同工程的分層241
7.6  小結244
第8章 應用程式設定245
8.1  概述245
8.1.1  設定245
8.1.2  配置246
8.2  應用程式設定包247
8.3  設定項目種類248
8.3.1  文本欄位251
8.3.2  開關253
8.3.3  滑塊254
8.3.4  值列表256
8.3.5  子界面257
8.4  讀取設定259
8.5  小結260
第9章 應用程式本地化261
9.1  概述261
9.1.1  本地化內容261
9.1.2  本地化目錄結構263
9.2  文本信息本地化263
9.2.1  系統按鈕和信息本地化263
9.2.2  套用名稱本地化265
9.2.3  程式代碼輸出的靜態文本本地化266
9.2.4  使用genstring工具268
9.3  nib和故事板檔案本地化268
9.3.1  添加本地化269
9.3.2  開關使用ibtool工具270
9.4  資源檔案本地化271
9.5  小結273
第10章 數據持久化274
10.1  概述274
10.1.1  沙箱目錄274
10.1.2  持久化方式275
10.2  屬性列表275
10.3  對象歸檔280
10.4  使用SQLite資料庫285
10.4.1  SQLite數據類型285
10.4.2  創建資料庫285
10.4.3  查詢數據287
10.4.4  修改數據290
10.5  Core Data292
10.5.1  ORM292
10.5.2  Core Data堆疊293
10.5.3  建模和生成實體296
10.5.4  採用Core Data分層架構設計299
10.5.5  查詢數據301
10.5.6  修改數據302
10.6  小結304
第11章 訪問通訊錄305
11.1  概述305
11.2  讀取聯繫人信息306
11.2.1  查詢聯繫人記錄307
11.2.2  讀取單值屬性309
11.2.3  讀取多值屬性311
11.2.4  讀取圖片屬性313
11.3  寫入聯繫人信息313
11.3.1  創建聯繫人315
11.3.2  修改聯繫人317
11.3.3  刪除聯繫人318
11.4  高級API319
11.4.1  選擇聯繫人319
11.4.2  顯示和修改聯繫人322
11.4.3  創建聯繫人324
11.5  小結328
第二部分 網路篇
第12章 訪問Web Service330
12.1  概述330
12.2  數據交換格式330
12.2.1  XML文檔結構332
12.2.2  解析XML文檔333
12.2.3  JSON文檔結構340
12.2.4  JSON數據解碼341
12.3  REST Web Service343
12.3.1  HTTP和HTTPS協定343
12.3.2  同步GET請求方法344
12.3.3  異步GET請求方法348
12.3.4  POST請求方式349
12.3.5  調用REST Web Service的插入、修改和刪除方法350
12.4  使用ASIHTTPRequest框架355
12.4.1  安裝和配置ASIHTTPRequest框架355
12.4.2  同步請求356
12.4.3  異步請求358
12.4.4  使用請求佇列359
12.4.5  上傳數據362
12.5  反饋網路信息改善用戶體驗364
12.5.1  iOS 6表視圖刷新控制項的使用364
12.5.2  使用等待指示器控制項367
12.5.3  使用網路等待指示器369
12.6  小結370
第13章 定位服務與地圖套用371
13.1  定位服務371
13.1.1  定位服務編程371
13.1.2  地理信息反編碼376
13.1.3  地理信息編碼查詢377
13.1.4  關於定位服務的測試379
13.2  使用iOS 6蘋果地圖382
13.2.1  顯示地圖382
13.2.2  添加標註384
13.2.3  跟蹤用戶位置變化387
13.3  使用程式外地圖388
13.3.1  調用iOS 6蘋果地圖388
13.3.2  調用谷歌Web地圖391
13.4  小結392
第三部分 進階篇
第14章 iOS中的商業模式394
14.1  收費策略394
14.1.1  iOS如何賺錢394
14.1.2  避免定價策略誤區395
14.1.3  免費軟體的藝術395
14.1.4  在適當的時間、適當的地點植入廣告395
14.1.5  嘗試不同的盈利模式395
14.2  使用蘋果iAd廣告396
14.2.1  橫幅廣告396
14.2.2  插頁廣告401
14.2.3  查看你的收入406
14.3  使用谷歌AdMob廣告408
14.3.1  註冊AdMob賬號和管理套用408
14.3.2  下載谷歌AdMob Ads SDK和示例代碼412
14.3.3  添加AdMob橫幅廣告414
14.3.4  添加AdMob插頁廣告418
14.3.5  為廣告提交用戶和位置信息421
14.3.6  搜尋廣告422
14.3.7  查看你的收入424
14.4  套用內購買425
14.4.1  概述425
14.4.2  測試環境搭建426
14.4.3  在程式中實現套用內購買431
14.4.4  測試套用內購買437
14.5  小結439
第15章 找出程式中的bug——調試440
15.1  Xcode調試工具440
15.1.1  定位編譯錯誤440
15.1.2  查看和顯示日誌441
15.1.3  設定和查看斷點442
15.1.4  調試工具列446
15.1.5  輸出視窗447
15.1.6  變數查看視窗448
15.1.7  查看執行緒449
15.2  日誌與斷言輸出450
15.2.1  使用NSLog函式450
15.2.2  使用NSAssert宏451
15.2.3  移除NSLog和NSAssert452
15.3  LLDB調試工具455
15.3.1  斷點命令455
15.3.2  觀察點命令457
15.3.3  查看變數和計算表達式命令458
15.4  異常堆疊報告分析461
15.4.1  跟蹤異常堆疊461
15.4.2  分析堆疊報告463
15.5  在iOS設備上調試464
15.5.1  創建開發者證書465
15.5.2  設備註冊468
15.5.3  創建App ID470
15.5.4  創建配置概要檔案471
15.5.5  設備調試473
15.6  Xcode設備管理工具474
15.6.1  管理設備配置概要檔案474
15.6.2  查看設備上的應用程式475
15.6.3  設備控制台477
15.6.4  設備日誌477
15.7  小結479
第16章 基於測試驅動的iOS開發480
16.1  測試驅動的軟體開發概述480
16.1.1  測試驅動的軟體開發流程480
16.1.2  測試驅動的軟體開發案例481
16.1.3  iOS單元測試框架486
16.2  使用OCUnit測試框架486
16.2.1  添加OCUnit到工程中486
16.2.2  套用測試和邏輯測試489
16.2.3  編寫OCUnit測試方法489
16.2.4  分析測試報告494
16.3  使用GHUnit測試框架495
16.3.1  添加GHUnit到工程496
16.3.2  編寫GHUnit測試用例498
16.3.3  分析測試報告500
16.4  使用偽對象502
16.4.1  添加OCMock到工程503
16.4.2  使用OCMock對象505
16.5  iOS單元測試最佳實踐507
16.5.1  iOS單元測試策略507
16.5.2  測試數據持久層507
16.5.3  測試業務邏輯層512
16.5.4  測試表示層515
16.6  小結522
第17章 讓你的程式“飛”起來——性能最佳化523
17.1  記憶體最佳化523
17.1.1  記憶體泄漏問題的解決523
17.1.2  查找和解決殭屍對象531
17.1.3  autorelease的使用問題534
17.1.4  回響記憶體警告534
17.1.5  選擇nib還是故事板536
17.2  最佳化資源檔案537
17.2.1  圖片檔案最佳化537
17.2.2  音頻檔案最佳化538
17.3  延遲載入539
17.3.1  資源檔案的延遲載入540
17.3.2  故事板和nib檔案的延遲載入543
17.4  數據持久化的最佳化546
17.4.1  使用檔案546
17.4.2  使用SQLite資料庫549
17.4.3  使用Core Data550
17.5  可重用對象的使用552
17.5.1  表視圖中的可重用對象553
17.5.2  集合視圖中的可重用對象554
17.5.3  地圖視圖中的可重用對象555
17.6  並發處理與多核CPU556
17.6.1  主執行緒阻塞問題556
17.6.2  選擇NSThread還是GCD557
17.7  編譯器和編譯參數558
17.7.1  GCC、LLVM GCC與Apple LLVM比較558
17.7.2  ARM架構559
17.7.3  Optimization Level561
17.8  小結562
第18章 管理好你的程式代碼——代碼版本控制563
18.1  概述563
18.1.1  版本控制歷史563
18.1.2  基本概念564
18.2  Git代碼版本控制564
18.2.1  伺服器搭建564
18.2.2  Gitolite伺服器管理566
18.2.3  Git常用命令568
18.2.4  Git分支570
18.2.5  Git協同開發574
18.2.6  Xcode中Git的配置與使用576
18.3  GitHub代碼託管服務583
18.3.1  創建和配置GitHub賬號584
18.3.2  創建代碼庫586
18.3.3  派生代碼庫589
18.3.4  使用GitHub協同開發591
18.3.5  管理組織596
18.4  小結599
第19章 把你的套用放到App Store上600
19.1  收官600
19.1.1  添加圖示600
19.1.2  添加啟動界面602
19.1.3  調整Application Target屬性604
19.1.4  為發布進行編譯605
19.1.5  套用打包609
19.2  發布流程610
19.2.1  創建套用及基本信息611
19.2.2  套用定價信息612
19.2.3  最後信息輸入613
19.2.4  上傳套用616
19.3  常見審核不通過的原因618
19.4  小結619
第四部分 實戰篇
第20章 重構MyNotes套用——iOS網路通信中的設計模式與架構設計622
20.1  行動網路通信套用的分層架構設計622
20.2  基於委託模式實現623
20.2.1  網路通信與委託模式623
20.2.2  在異步網路通信中使用委託模式實現分層架構設計623
20.2.3  類圖624
20.2.4  時序圖626
20.2.5  數據持久層的代碼實現629
20.2.6  業務邏輯層的代碼實現631
20.2.7  表示層的代碼實現632
20.3  基於觀察者模式的通知機制實現637
20.3.1  觀察者模式的通知機制回顧637
20.3.2  異步網路通信中通知機制的分層架構設計638
20.3.3  類圖638
20.3.4  時序圖639
20.3.5  數據持久層的代碼實現642
20.3.6  業務邏輯層的代碼實現643
20.3.7  表示層的代碼實現644
20.4  小結649
第21章 iOS敏捷開發項目實戰——2016里約熱內盧奧運會套用開發及App Store發布650
21.1  套用分析與設計650
21.1.1  套用概述650
21.1.2  需求分析650
21.1.3  原型設計651
21.1.4  資料庫設計652
21.1.5  架構設計652
21.2  iOS敏捷開發653
21.2.1  敏捷開發宣言653
21.2.2  iOS適合敏捷開發?654
21.2.3  iOS敏捷開發最佳實踐654
21.3  任務1:創建套用基本工作空間656
21.4  任務2:信息系統層與持久層開發657
21.4.1  疊代2.1:編寫資料庫DDL腳本657
21.4.2  疊代2.2:插入初始數據到資料庫658
21.4.3  疊代2.3:編寫實體類658
21.4.4  疊代2.4:DAO類GHUnit單元測試659
21.4.5  疊代2.5:編寫DAO類663
21.4.6  疊代2.6:發布到GitHub666
21.5  任務3:業務邏輯層開發667
21.5.1  疊代3.1:比賽項目業務邏輯類GHUnit單元測試667
21.5.2  疊代3.2:編寫比賽項目業務邏輯類668
21.5.3  疊代3.3:比賽日程業務邏輯類GHUnit單元測試669
21.5.4  疊代3.4:編寫比賽日程業務邏輯類670
21.5.5  疊代3.5:發布到GitHub672
21.6  任務4:表示層開發672
21.6.1  疊代4.1:根據原型設計初步設計iPad故事板673
21.6.2  疊代4.2:根據原型設計初步設計iPhone故事板674
21.6.3  疊代4.3:首頁模組674
21.6.4  疊代4.4:比賽項目模組675
21.6.5  疊代4.5:比賽日程模組679
21.6.6  疊代4.6:倒計時模組表示層681
21.6.7  疊代4.7:關於我們模組表示層683
21.6.8  疊代4.8:發布到GitHub683
21.7  任務5:收工684
21.7.1  疊代5.1:添加圖示684
21.7.2  疊代5.2:設計和添加啟動界面684
21.7.3  疊代5.3:植入谷歌AdMob橫幅廣告685
21.7.4  疊代5.4:性能測試與改善686
21.7.5  疊代5.5:發布到GitHub687
21.7.6  疊代5.6:在App Store上發布套用687
21.8  小結690

相關詞條

熱門詞條

聯絡我們