第一部分 基礎篇
第1章 開篇綜述 2
1.1 iOS概述 2
1.1.1 iOS介紹 2
1.1.2 iOS 9新特性 2
1.2 開發環境及開發工具 3
1.3 本書約定 4
1.3.1 案例代碼約定 4
1.3.2 圖示的約定 5
1.3.3 方法命名約定 6
1.3.4 構造函數命名約定 7
1.3.5 錯誤處理約定 8
第2章 第一個iOS應用程序 10
2.1 創建HelloWorld工程 10
2.1.1 創建工程 10
2.1.2 Xcode中的iOS工程模闆 14
2.1.3 應用剖析 15
2.2 應用生命周期 17
2.2.1 非運行狀態——應用啓動場景 19
2.2.2 點擊Home鍵——應用退齣場景 20
2.2.3 掛起重新運行場景 22
2.2.4 內存清除:應用終止場景 23
2.3 設置産品屬性 23
2.3.1 Xcode中的工程和目標 23
2.3.2 設置常用的産品屬性 26
2.4 iOS API簡介 27
2.4.1 API概述 27
2.4.2 如何使用API幫助 29
2.5 小結 32
第3章 Cocoa Touch框架與構建應用界麵 33
3.1 視圖控製器 33
3.1.1 視圖控製器種類 33
3.1.2 視圖的生命周期 33
3.2 視圖 35
3.2.1 UIView繼承層次結構 35
3.2.2 視圖分類 37
3.2.3 應用界麵構建層次 37
3.3 使用故事闆構建界麵 38
3.3.1 什麼是故事闆 39
3.3.2 場景和過渡 41
3.4 使用XIB文件構建界麵 42
3.4.1 重構HelloWorld 42
3.4.2 XIB與故事闆比較 45
3.5 使用純代碼構建界麵 45
3.5.1 重構HelloWorld 46
3.5.2 視圖的幾個重要屬性 47
3.6 3種構建界麵技術討論 49
3.6.1 所見即所得 49
3.6.2 原型驅動開發 49
3.6.3 團隊協同開發 49
3.7 小結 50
第4章 UIView與視圖 51
4.1 標簽與按鈕 51
4.1.1 Interface Builder實現 51
4.1.2 代碼實現 55
4.2 事件處理 56
4.2.1 Interface Builder實現 56
4.2.2 代碼實現 59
4.3 訪問視圖 60
4.3.1 Interface Builder實現 60
4.3.2 代碼實現 62
4.4 TextField和TextView 63
4.4.1 Interface Builder實現 64
4.4.2 代碼實現 65
4.4.3 鍵盤的打開和關閉 67
4.4.4 關閉和打開鍵盤的通知 68
4.4.5 鍵盤的種類 69
4.5 開關控件、分段控件和滑塊控件 70
4.5.1 開關控件 71
4.5.2 分段控件 72
4.5.3 滑塊控件 74
4.6 Web視圖:WKWebView類 76
4.7 警告框和操作錶 80
4.7.1 UIAlertController實現警告框 81
4.7.2 UIAlertController實現操作錶 83
4.8 等待相關的控件與進度條 84
4.8.1 活動指示器ActivityIndicatorView 85
4.8.2 進度條ProgressView 87
4.9 工具欄和導航欄 90
4.9.1 工具欄 90
4.9.2 導航欄 94
4.10 小結 98
第5章 委托協議、數據源協議與高級視圖 99
5.1 視圖中的委托協議和數據源協議 99
5.2 選擇器 99
5.2.1 日期選擇器 99
5.2.2 普通選擇器 104
5.2.3 數據源協議與委托協議 109
5.3 集閤視圖 111
5.4 實例:Interface Builder實現奧運會比賽項目 112
5.4.1 添加集閤視圖 113
5.4.2 添加集閤視圖單元格 114
5.4.3 數據源協議與委托協議 118
5.5 實例:代碼實現奧運會比賽項目 120
5.5.1 添加集閤視圖 120
5.5.2 自定義集閤視圖單元格 122
5.6 小結 123
第6章 錶視圖 124
6.1 概述 124
6.1.1 錶視圖的組成 124
6.1.2 錶視圖的相關類 125
6.1.3 錶視圖分類 125
6.1.4 單元格的組成和樣式 127
6.1.5 數據源協議與委托協議 129
6.2 簡單錶視圖 129
6.2.1 實現協議方法 130
6.2.2 UIViewController根視圖控製器 130
6.2.3 UITableViewController根視圖控製器 137
6.3 自定義錶視圖單元格 140
6.3.1 Interface Builder實現 141
6.3.2 代碼實現 145
6.4 添加搜索欄 146
6.5 分節錶視圖 150
6.5.1 添加索引 150
6.5.2 分組 153
6.6 靜態錶與界麵布局 154
6.7 插入和刪除單元格 160
6.7.1 Interface Builder實現 162
6.7.2 代碼實現 167
6.8 移動單元格 169
6.9 錶視圖UI設計模式 171
6.9.1 分頁模式 171
6.9.2 下拉刷新模式 171
6.9.3 下拉刷新控件 172
6.10 小結 174
第7章 界麵布局與屏幕適配 175
7.1 界麵布局概述 175
7.2 iOS界麵布局設計模式 176
7.2.1 錶單布局模式 176
7.2.2 列錶布局模式 176
7.2.3 網格布局模式 177
7.3 傳統布局技術 177
7.4 Auto Layout布局技術 179
7.4.1 Interface Builder中管理Auto Layout約束 179
7.4.2 實例:Auto Layout布局 180
7.5 iOS 9堆視圖StackView 185
7.5.1 堆視圖與布局 185
7.5.2 實例:堆視圖布局 186
7.6 iOS 屏幕的多樣性 191
7.6.1 iOS屏幕介紹 191
7.6.2 iOS的3種分辨率 192
7.6.3 獲得iOS設備屏幕信息 193
7.7 Size Class與iOS多屏幕適配 194
7.7.1 Interface Builder中使用Size Class 195
7.7.2 Size Class的九宮格 195
7.7.3 實例:使用Size Class 196
7.8 資源目錄與圖片資源適配 201
7.9 小結 204
第8章 視圖控製器與導航模式 205
8.1 概述 205
8.1.1 視圖控製器的種類 205
8.1.2 導航模式 205
8.2 模態視圖 207
8.2.1 Interface Builder實現 208
8.2.2 代碼實現 214
8.3 平鋪導航 215
8.3.1 應用場景 215
8.3.2 基於分屏導航的實現 217
8.3.3 基於電子書導航的實現 223
8.4 標簽導航 228
8.4.1 應用場景 229
8.4.2 Interface Builder實現 230
8.4.3 代碼實現 234
8.5 樹形結構導航 235
8.5.1 應用場景 235
8.5.2 Interface Builder實現 236
8.5.3 代碼實現 244
8.6 組閤使用導航模式 245
8.6.1 應用場景 246
8.6.2 Interface Builder實現 246
8.6.3 代碼實現 254
8.7 小結 257
第9章 iPad應用開發 258
9.1 iPad與iPhone應用開發的差異 258
9.1.1 應用場景不同 258
9.1.2 導航模式不同 258
9.1.3 API不同 258
9.2 iPad樹形結構導航 259
9.2.1 郵件應用中的樹形結構導航 259
9.2.2 Master-Detail應用程序模闆 260
9.2.3 Interface Builder實現SplitViewSample案例 266
9.2.4 代碼實現SplitViewSample案例 270
9.3 iPad模態視圖 273
9.3.1 郵件應用中的模態導航 273
9.3.2 iPad模態導航相關API 275
9.3.3 Interface Builder實現ModalView-Sample案例 277
9.3.4 代碼實現ModalViewSample案例 281
9.4 Popover(浮動層)視圖 284
9.4.1 Popover相關API 284
9.4.2 PopoverViewSample案例 285
9.5 iOS 9分屏多任務 289
9.5.1 Slide Over多任務 289
9.5.2 分屏視圖多任務 290
9.5.3 畫中畫多任務 293
9.6 iPad分屏多任務適配開發 293
9.6.1 分屏多任務前提條件 293
9.6.2 分屏多任務適配 294
9.7 小結 295
第二部分 設計與架構篇
第10章 iOS常用設計模式 298
10.1 單例模式 298
10.1.1 問題提齣 298
10.1.2 Objective-C實現原理 298
10.1.3 Swift實現原理 299
10.1.4 應用案例 300
10.2 委托模式 301
10.2.1 問題提齣 301
10.2.2 實現原理 303
10.2.3 應用案例 306
10.3 觀察者模式 309
10.3.1 問題提齣 309
10.3.2 實現原理 310
10.3.3 通知機製和KVO機製 311
10.4 再談MVC模式 317
10.4.1 MVC模式概述 317
10.4.2 Cocoa Touch中的MVC模式 318
10.5 小結 320
第11章 iOS分層架構設計 321
11.1 低耦閤企業級係統架構設計 321
11.2 iOS分層架構設計 322
11.2.1 工程與工作空間 322
11.2.2 靜態鏈接庫 323
11.2.3 框架 323
11.2.4 16種分層模式 324
11.3 實例:MyNotes應用 325
11.4 基於同一工程的分層 327
11.4.1 采用純Swift語言實現:PSSS模式 327
11.4.2 采用純Objective-C語言實現:POOO模式 330
11.4.3 采用Swift調用Objective-C的混閤搭配實現:PSOO模式 334
11.5 基於同一工作空間靜態鏈接庫實現的WLSOO模式 335
11.5.1 使用工作空間 335
11.5.2 添加數據持久層工程 336
11.5.3 建立業務邏輯層與數據持久層依賴關係 337
11.5.4 建立錶示層與業務邏輯層依賴關係 339
11.6 基於同一工作空間框架實現的WFSSS模式 339
11.6.1 創建框架工程 340
11.6.2 建立依賴關係 341
11.6.3 代碼重構 342
11.7 基於同一工作空間框架實現的WFOOO模式 344
11.7.1 設置Public頭文件 344
11.7.2 設置保護傘頭文件 345
11.7.3 代碼重構 345
11.8 基於同一工作空間框架實現的WFSOO模式 346
11.8.1 設置Public頭文件 346
11.8.2 設置保護傘頭文件 346
11.8.3 建立錶示層與業務邏輯層依賴關係 346
11.8.4 代碼重構 346
11.9 基於同一工作空間框架實現的WFOSS模式 346
11.9.1 設置Public頭文件 346
11.9.2 設置Swift代碼嵌入應用 347
11.9.3 代碼重構 347
11.10 基於同一個工程不同目標框架實現的TFSOO模式 348
11.10.1 使用目標 348
11.10.2 添加框架目標 348
11.11 小結 349
第12章 數據持久化 350
12.1 概述 350
12.1.1 沙箱目錄 350
12.1.2 持久化方式 351
12.2 屬性列錶 351
12.3 對象歸檔 357
12.4 使用SQLite數據庫 361
12.4.1 SQLite數據類型 361
12.4.2 配置Objective-C框架工程環境 362
12.4.3 配置Swift框架工程環境 362
12.4.4 創建數據庫 364
12.4.5 查詢數據 365
12.4.6 修改數據 368
12.5 Core Data 370
12.5.1 ORM 370
12.5.2 Core Data棧 371
12.5.3 建模和生成實體 374
12.5.4 采用Core Data分層架構設計 380
12.5.5 查詢數據 382
12.5.6 修改數據 384
12.6 小結 385
第三部分 進 階 篇
第13章 應用程序設置 388
13.1 概述 388
13.1.1 設置 388
13.1.2 配置 389
13.2 應用程序設置包 390
13.3 設置項目種類 392
13.3.1 文本字段 395
13.3.2 開關 398
13.3.3 滑塊 399
13.3.4 值列錶 400
13.3.5 子界麵 401
13.4 讀取設置 403
13.5 小結 405
第14章 本地化 406
14.1 概述 406
14.1.1 需要本地化的內容 406
14.1.2 本地化目錄結構 409
14.2 文本信息本地化 410
14.2.1 係統按鈕和信息本地化 410
14.2.2 應用名稱本地化 411
14.2.3 程序代碼輸齣的靜態文本本地化 413
14.2.4 使用genstring工具 414
14.3 故事闆和XIB文件本地化 415
14.3.1 使用Base Internationalization技術 415
14.3.2 Auto Layout與本地化 417
14.4 資源文件本地化 419
14.4.1 圖片資源文件本地化 419
14.4.2 聲音資源文件本地化 420
14.5 小結 421
第15章 iOS 9中訪問通訊錄 422
15.1 通訊錄的安全訪問設置 422
15.2 使用Contacts框架讀取聯係人信息 423
15.2.1 查詢聯係人 423
15.2.2 讀取單值屬性 426
15.2.3 讀取多值屬性 428
15.2.4 讀取圖片屬性 430
15.3 使用Contacts框架寫入聯係人信息 430
15.3.1 創建聯係人 431
15.3.2 修改聯係人 433
15.3.3 刪除聯係人 434
15.4 使用係統提供界麵 435
15.4.1 選擇聯係人 435
15.4.2 顯示和修改聯係人 438
15.4.3 創建聯係人 441
15.5 小結 444
第16章 數據交換格式 445
16.1 XML數據交換格式 446
16.1.1 XML文檔結構 446
16.1.2 解析XML文檔 447
16.2 實例:MyNotes應用XML 448
16.2.1 使用NSXML解析 450
16.2.2 使用TBXML解析 453
16.3 JSON數據交換格式 459
16.3.1 JSON文檔結構 459
16.3.2 JSON數據編碼/解碼 460
16.4 實例:MyNotes應用JSON解碼 461
16.5 小結 462
第17章 REST Web Service 463
17.1 概述 463
17.2 使用NSURLSession 464
17.2.1 NSURLSession API 464
17.2.2 簡單會話實現GET請求 465
17.2.3 默認會話實現GET請求 468
17.2.4 實現POST請求 469
17.2.5 下載數據 470
17.3 實例:使用NSURLSession重構MyNotes案例 473
17.3.1 插入方法調用 473
17.3.2 修改方法調用 474
17.3.3 刪除方法調用 475
17.4 使用AFNetworking框架 477
17.4.1 比較ASIHTTPRequest、AFNetworking和MKNetworkKit 477
17.4.2 安裝和配置AFNetworking框架 478
17.4.3 實現GET請求 479
17.4.4 實現POST請求 480
17.4.5 下載數據 481
17.4.6 上傳數據 482
17.5 使用為Swift設計的網絡框架:Alamofire 484
17.5.1 安裝和配置Alamofire框架 484
17.5.2 實現GET請求 485
17.5.3 實現POST請求 486
17.5.4 下載數據 487
17.5.5 上傳數據 488
17.6 反饋網絡信息改善用戶體驗 489
17.6.1 使用下拉刷新控件改善用戶體驗 489
17.6.2 使用活動指示器控件 492
17.6.3 使用網絡活動指示器 494
17.7 小結 494
第18章 定位服務 495
18.1 定位服務概述 495
18.1.1 定位服務編程 496
18.1.2 測試定位服務 499
18.2 管理定位服務 503
18.2.1 應用啓動與停止下的定位服務管理 504
18.2.2 視圖切換下的定位服務管理 504
18.2.3 應用前後颱切換下的定位服務管理 505
18.2.4 設置自動暫停位置服務 507
18.2.5 iOS 9後颱位置服務管理 507
18.3 地理信息編碼與反編碼 508
18.3.1 地理信息反編碼 508
18.3.2 實例:地理信息反編碼 509
18.3.3 地理信息編碼查詢 510
18.3.4 實例:地理信息編碼查詢 510
18.4 微定位技術iBeacon 512
18.4.1 微定位與地理圍欄 512
18.4.2 iBeacon技術概述 512
18.4.3 實例:使用iBeacon技術實現微定位 513
18.5 小結 519
第19章 蘋果地圖應用 520
19.1 使用iOS蘋果地圖 520
19.1.1 顯示地圖 520
19.1.2 顯示3D地圖 524
19.2 添加標注 525
19.2.1 實現查詢 526
19.2.2 在地圖上添加標注 528
19.3 跟蹤用戶位置變化 529
19.4 使用程序外地圖 530
19.5 小結 533
第四部分 測試、調試和優化篇
第20章 找齣程序中的bug——調試 536
20.1 Xcode調試工具 536
20.1.1 定位編譯錯誤 536
20.1.2 查看和顯示日誌 537
20.1.3 設置和查看斷點 539
20.1.4 調試工具 544
20.1.5 輸齣窗口 545
20.1.6 變量查看窗口 546
20.1.7 查看綫程 547
20.2 LLDB調試工具 548
20.2.1 斷點命令 548
20.2.2 觀察點命令 550
20.2.3 查看變量和計算錶達式命令 552
20.3 日誌與斷言輸齣 554
20.3.1 使用NSLog函數 554
20.3.2 使用斷言 555
20.4 異常棧報告分析 556
20.4.1 跟蹤異常棧 556
20.4.2 分析棧報告 558
20.5 在iOS設備上調試 559
20.5.1 Xcode設置 559
20.5.2 設備設置 560
20.6 Xcode設備管理工具 562
20.6.1 查看設備上的應用程序 562
20.6.2 設備日誌 564
20.7 小結 564
第21章 iOS測試驅動與單元測試 565
21.1 測試驅動的軟件開發概述 565
21.1.1 測試驅動的軟件開發流程 565
21.1.2 測試驅動的軟件開發案例 566
21.1.3 iOS單元測試框架 567
21.2 使用XCTest測試框架 568
21.2.1 添加XCTest到工程 568
21.2.2 Swift版本中設置編譯目標成員 570
21.2.3 編寫XCTest測試方法 570
21.2.4 運行測試用例目標 573
21.2.5 分析測試報告 575
21.3 異步單元測試 576
21.4 性能測試 580
21.4.1 Swift版本中配置測試環境 580
21.4.2 測試用例代碼 580
21.4.3 分析測試結果 581
21.5 iOS單元測試最佳實踐 583
21.5.1 配置測試數據持久層 583
21.5.2 編寫數據持久層測試用例 584
21.5.3 運行測試數據持久層測試用例 587
21.5.4 配置測試業務邏輯層 588
21.5.5 編寫業務邏輯層測試用例 588
21.6 小結 589
第22章 iOS應用UI測試 590
22.1 UI測試概述 590
22.2 添加UI測試到工程 590
22.2.1 創建工程時添加UI測試框架 590
22.2.2 在現有工程中添加UI測試用例目標 591
22.3 錄製腳本 593
22.3.1 錄製之前的準備 593
22.3.2 錄製過程 593
22.3.3 修改錄製腳本 595
22.4 訪問UI元素 595
22.4.1 UI元素層次結構樹 595
22.4.2 UI測試中相關API 597
22.5 錶示層測試最佳實踐 598
22.5.1 配置UI測試用例目標 598
22.5.2 編寫UI測試用例 599
22.6 小結 602
第23章 讓你的程序“飛”起來——性能優化 603
23.1 內存優化 603
23.1.1 內存管理 603
23.1.2 使用Analyze工具檢查內存泄漏 603
23.1.3 使用Instruments工具檢查內存泄漏 608
23.1.4 使用Instruments工具檢查僵屍對象 612
23.1.5 autorelease的使用問題 615
23.1.6 響應內存警告 616
23.2 優化資源文件 617
23.2.1 圖片文件優化 618
23.2.2 音頻文件優化 619
23.3 延遲加載 620
23.3.1 資源文件的延遲加載 620
23.3.2 故事闆文件的延遲加載 624
23.3.3 XIB文件的延遲加載 626
23.4 數據持久化的優化 628
23.4.1 使用文件 628
23.4.2 使用SQLite數據庫 631
23.4.3 使用Core Data 632
23.5 可重用對象的使用 634
23.5.1 錶視圖中的可重用對象 635
23.5.2 集閤視圖中的可重用對象 636
23.5.3 地圖視圖中的可重用對象 638
23.6 並發處理與多核CPU 638
23.6.1 主綫程阻塞問題 638
23.6.2 選擇NSThread還是GCD 639
23.7 小結 640
第五部分 實 戰 篇
第24章 管理好你的程序代碼——代碼版本控製 642
24.1 概述 642
24.1.1 版本控製曆史 642
24.1.2 基本概念 643
24.2 Git代碼版本控製 643
24.2.1 服務器搭建 643
24.2.2 Gitolite服務器管理 645
24.2.3 Git常用命令 647
24.2.4 Git分支 649
24.2.5 Git協同開發 653
24.2.6 Xcode中Git的配置與使用 656
24.3 GitHub代碼托管服務 663
24.3.1 創建和配置GitHub賬號 663
24.3.2 創建代碼庫 666
24.3.3 刪除代碼庫 668
24.3.4 派生代碼庫 669
24.3.5 使用GitHub協同開發 671
24.3.6 管理組織 677
24.4 小結 680
第25章 項目依賴管理 681
25.1 使用CocoaPods工具管理依賴 681
25.1.1 安裝CocoaPods 681
25.1.2 搜索庫 682
25.1.3 項目與第三方庫搭配形式 683
25.1.4 示例:靜態鏈接庫形式管理依賴 684
25.1.5 示例:框架形式管理依賴 686
25.2 使用Carthage工具管理依賴 687
25.2.1 安裝Carthage 688
25.2.2 項目與第三方庫搭配形式 688
25.2.3 Cartfile文件 688
25.2.4 示例:重構MyNotes依賴關係 689
25.3 小結 691
第26章 重構MyNotes應用——iOS網絡通信中的設計模式與架構設計 692
26.1 移動網絡通信應用的分層架構設計 692
26.2 Objective-C版本:在數據持久層中添加和配置AFNetworking 693
26.2.1 用CocoaPods工具管理依賴 693
26.2.2 測試依賴 693
26.3 Swift版本:在數據持久層中添加和配置Alamofire 694
26.3.1 用Carthage工具管理依賴 694
26.3.2 測試依賴 695
26.4 基於委托模式實現 695
26.4.1 網絡通信與委托模式 696
26.4.2 在異步網絡通信中使用委托模式實現分層架構設計 696
26.4.3 類圖 697
26.4.4 時序圖 699
26.4.5 數據持久層重構(Objective-C版本) 702
26.4.6 數據持久層重構(Swift版本) 705
26.4.7 業務邏輯層的代碼實現 707
26.4.8 錶示層的代碼實現 710
26.5 基於觀察者模式的通知機製實現 716
26.5.1 觀察者模式的通知機製迴顧 716
26.5.2 異步網絡通信中通知機製的分層架構設計 716
26.5.3 類圖 717
26.5.4 時序圖 719
26.5.5 數據持久層重構(Objective-C版本) 722
26.5.6 數據持久層重構(Swift版本) 723
26.5.7 業務邏輯層的代碼實現 725
26.5.8 錶示層的代碼實現 726
26.6 小結 731
第27章 把你的應用放到App Store上 732
27.1 收官 732
27.1.1 在Xcode 中添加圖標 732
27.1.2 在Xcode中添加啓動界麵 734
27.1.3 調整Identity和Deployment Info屬性 738
27.2 為發布進行編譯 739
27.2.1 創建開發者證書 739
27.2.2 創建App ID 744
27.2.3 創建描述文件 745
27.2.4 發布編譯 748
27.3 發布上架 750
27.3.1 創建應用 750
27.3.2 應用定價 753
27.3.3 基本信息輸入 754
27.3.4 上傳應用 757
27.3.5 提交審核 759
27.4 常見審核不通過的原因 761
27.4.1 功能問題 761
27.4.2 用戶界麵問題 761
27.4.3 商業問題 761
27.4.4 不當內容 761
27.4.5 其他問題 762
27.5 小結 762
第28章 iOS敏捷開發項目實戰——2016裏約熱內盧奧運會應用開發及App Store發布 763
28.1 應用分析與設計 763
28.1.1 應用概述 763
28.1.2 需求分析 763
28.1.3 原型設計 764
28.1.4 數據庫設計 765
28.1.5 架構設計 766
28.2 iOS敏捷開發 766
28.2.1 敏捷開發宣言 766
28.2.2 iOS適閤敏捷開發? 767
28.2.3 iOS敏捷開發最佳實踐 767
28.3 任務1:創建應用工作空間和工程 769
28.3.1 迭代1.1:創建工作空間 769
28.3.2 迭代1.2:發布到GitHub 769
28.4 任務2:信息係統層與持久層開發 770
28.4.1 迭代2.1:編寫數據庫DDL腳本 770
28.4.2 迭代2.2:插入初始數據到數據庫 770
28.4.3 迭代2.3:數據庫版本控製 771
28.4.4 迭代2.4:配置持久層工程PersistenceLayer 771
28.4.5 迭代2.5:編寫實體類 772
28.4.6 迭代2.6:編寫DAO類單元測試用例類 773
28.4.7 迭代2.7:編寫DAO類 775
28.4.8 迭代2.8:數據庫幫助類DBHelper 779
28.4.9 迭代2.9:配置及運行持久層測試用例目標 781
28.4.10 迭代2.10:發布到GitHub 782
28.5 任務3:業務邏輯層開發 782
28.5.1 迭代3.1:比賽項目業務邏輯類XCTest單元測試 783
28.5.2 迭代3.2:編寫比賽項目業務邏輯類 784
28.5.3 迭代3.3:比賽日程業務邏輯類XCTest單元測試 785
28.5.4 迭代3.4:編寫比賽日程業務邏輯類 786
28.5.5 迭代3.5:發布到GitHub 787
28.6 任務4:錶示層開發 788
28.6.1 迭代4.1:使用資源目錄管理圖片和圖標資源 788
28.6.2 迭代4.2:根據原型設計初步設計故事闆 789
28.6.3 迭代4.3:“首頁”模塊 790
28.6.4 迭代4.4:“比賽項目”模塊 791
28.6.5 迭代4.5:“比賽日程”模塊 795
28.6.6 迭代4.6:“倒計時”模塊錶示層 797
28.6.7 迭代4.7:“關於我們”模塊錶示層 800
28.6.8 迭代4.8:發布到GitHub 800
28.7 任務5:收工 800
28.7.1 迭代5.1:添加圖標 800
28.7.2 迭代5.2:設計和添加啓動界麵 801
28.7.3 迭代5.3:性能測試與改善 801
28.7.4 迭代5.4:發布到GitHub上 802
28.7.5 迭代5.5:在App Store上發布應用 802
28.8 小結 802
· · · · · · (
收起)