第1章 开发准备 1
1.1 iOS移动开发现状 2
1.1.1 iOS的历史 2
1.1.2 iOS 10的十大变化 4
1.1.3 iOS应用开发的八个特点 5
1.2 iOS 10的新功能 5
1.2.1 SiriKit 6
1.2.2 Proactive Suggestions(预建议) 6
1.2.3 Integrating with the MessagesApp 7
1.2.4 User Notifications 7
1.2.5 Speech Recognition 8
1.2.6 Wide Color 9
1.2.7 Adapting to the True ToneDisplay 9
1.2.8 Widget Enhancements 9
1.2.9 Securi and Privacy Enhancements 9
1.3成为一名iOS开发者 11
1.3.1硬件上的需求 11
1.3.2加入Apple开发者计划 11
1.3.3下载安装Xcode和模拟器 13
1.3.4创建开发和发布配置文件Provisioning Profile 14
1.4创建一个基本的iOS项目 17
1.4.1项目的创建 17
1.4.2设置项目的信息 19
1.4.3设置应用的Icon图标 19
1.4.4设置应用的Launch图片 20
1.4.5编译并运行项目 22
1.5 iOS应用的生命周期 23
1.5.1 iOS应用程序的状态 24
1.5.2演示iOS应用程序的各种状态 25
1.6小结 26
第2章Xcode 8 IDE和iOS模拟器 27
2.1 Xcode 8的使用 28
2.1.1工具栏的使用 28
2.1.2导航器的功能介绍 29
2.1.3项目导航器中的内容 30
2.1.4创建一个组和Swift文件 30
2.1.5在项目中搜索文件 33
2.1.6代码的查找和替换 36
2.1.7代码的Debug调试 36
2.2 iOS模拟器的使用 39
2.2.1使用多种iOS模拟器 39
2.2.2 iOS模拟器方向的切换 40
2.2.3 iOS模拟器语言的切换 40
2.2.4截取模拟器屏幕 41
2.2.5应用程序的退出和删除 41
2.3小结 42
第3章Swift 3.0的基础知识 43
3.1 Swift的基本概念 44
3.1.1 Swift语言的特点 44
3.1.2 Swift常量和变量的定义 45
3.1.3常量和变量的输出 46
3.1.4注释 47
3.1.5 Playground 47
3.2数据类型与运算 49
3.2.1布尔类型 49
3.2.2 Int类型及实例属性 50
3.2.3浮点类型及实例属性 51
3.2.4字符和字符串 51
3.2.5元组类型 54
3.2.6一元、二元和三元运算符 55
3.2.7比较运算符 56
3.3循环语句和条件判断语句 57
3.3.1 for循环 57
3.3.2 while循环语句 58
3.3.3 repeat-while循环语句 59
3.3.4 if条件判断语句 60
3.3.5 switch条件判断语句 60
3.3.6 continue语句和forthrough语句 61
3.4数组和字典 62
3.4.1数组 62
3.4.2多维数组 64
3.4.3数组的遍历 65
3.4.4字典 66
3.5小结 68
第4章Swift 3.0的进阶内容 69
4.1函数 70
4.1.1函数的定义和调用 70
4.1.2为参数设置默认值 71
4.1.3设置可变的函数参数数量 71
4.1.4函数作为参数和返回类型 72
4.1.5元组作为函数的返回类型,实现多个返回值 74
4.1.6使用函数类型 74
4.1.7函数的输入输出参数 75
4.1.8函数的嵌套 76
4.1.9函数的递归用法 76
4.1.10常用的内置函数 77
4.2枚举和结构体 79
4.2.1枚举 79
4.2.2结构体 83
4.3类 85
4.3.1类的创建 85
4.3.2类属性的set和get方法 88
4.3.3类属性的willSet和didSet方法 89
4.3.4类的静态方法 90
4.3.5类的析构 91
4.3.6类的继承 92
4.3.7类的延迟加载属性lazy 93
4.3.8类的引用特征 95
4.3.9类型检查 95
4.3.10 Any和Anyobject 98
4.4扩展、协议和其他 99
4.4.1扩展 99
4.4.2协议 101
4.4.3问号?和感叹号! 103
4.5小结 105
第5章 视图UIView和层CALayer 106
5.1视图UIView 107
5.1.1 UIView概述 107
5.1.2 UIView的外观属性 109
5.1.3 UIView的几何属性 112
5.1.4 UIView的嵌套和层次关系 114
5.1.5 UIView的交互属性 116
5.1.6 UIView的变形操作 118
5.1.7自定义UIView视图 120
5.2 CALayer层 124
5.2.1 CALayer边框 124
5.2.2 CALayer阴影 125
5.2.3 CALayer圆角 126
5.2.4 CALayer渐变 127
5.3小结 129
第6章 视图控制器U IViewController 130
6.1UIViewController视图控制器概述 131
6.1.1视图控制器与MV C 131
6.1.2创建一个视图控制器 132
6.1.3以模态方式弹出视图控制器 136
6.1.4视图控制器的生命周期 139
6.1.5视图控制器和UIScrollView 141
6.2 UITabBarController 145
6.2.1创建一个UITabBarController 145
6.2.2改变Tab bar的位置 147
6.2.3改变UITabBarController索引 149
6.2.4在Tab图标上显示角标 149
6.3 UINavigationController 150
6.3.1创建一个UINavigationController 151
6.3.2 UINavigationController视图入栈和出栈 153
6.3.3导航栏和工具栏的显示和隐藏 157
6.3.4导航栏样式的修改 157
6.4导航控制器和标签控制器 158
6.5小结 161
第7章 常用经典控件 162
7.1控件概述 163
7.1.1何为Target-Action机制 163
7.1.2 UIControl类的方法和属性 165
7.1.3让我们一起动手来实现一个UIControl吧 167
7.2 UIButton的概述 168
7.3 UILabel文本视图 171
7.3.1 UILabel的创建和文案显示 172
7.3.2 UILabel处理过长的文案 173
7.3.3 UILabel的阴影 174
7.4 UISwitch开关视图 175
7.4.1 UISwitch的创建 175
7.4.2 UISwitch的开关使用 176
7.5 UIRefreshControl刷新控件 176
7.6 UITextField文本框控件 178
7.6.1 UITextField的创建和基本应用 179
7.6.2 UITextField的背景图 180
7.6.3 UITextField的浮动视图(Overlay view) 181
7.6.4 UITextField的代理UITextFieldDelegate 183
7.7小结 185
第8章UITableView和UICollectionView 186
8.1 UITableView概述 187
8.1.1 UITableViewCell单元格 187
8.1.2创建一个简单的表格 189
8.1.3自定义单元格UITableViewCell 193
8.1.4自定义单元格的高度 196
8.1.5给表格添加章节和索引 198
8.1.6单元格的选择与取消选择 201
8.1.7单元格的插入和删除 204
8.1.8移动单元格的位置 209
8.1.9表格之间的嵌套 213
8.2 UICollectionView概述 219
8.2.1 UICollectionView的实现原理 220
8.2.2创建一个UICollectionView对象并添加点击事件 221
8.3小结 225
第9章 触屏事件和触摸手势 226
9.1触摸事件的监测 227
9.1.1对触摸事件阶段的监测 227
9.1.2监测是否触摸到某个视图 229
9.1.3实现图像视图的拖动 231
9.2触摸手势的使用 232
9.2.1实现单点触摸手势 233
9.2.2实现双击触摸手势 235
9.2.3实现长按手势的监测 236
9.2.4捏合手势的监测 238
9.3 3D Touch的使用 239
9.4小结 242
第10章 动画、声音与视频 243
10.1制作动画 244
10.1.1 UIView的动画 244
10.1.2使用UIImageView播放帧动画 249
10.1.3位移关键帧动画的制作 251
10.2音频的播放 254
10.2.1使用System Sound Services播放简短声音 255
10.2.2使用AVAudioPlayer播放音乐 256
10.3视频的播放 260
10.3.1使用AVPlayer播放影片 260
10.3.2实现影片的画中画功能 262
10.4小结 265
第11章Alamofire网络请求框架 266
11.1Alamofire的前世今生 267
11.1.1 Alamofire的手动集成 267
11.1.2 Alamofire的网络是否联通和连接方式 269
11.1.3 Alamofire的GET和POST请求 272
11.1.4 Alamofire的文件上传及进度显示 274
11.1.5 Alamofire的文件下载及进度显示 278
11.2小结 279
第12章U IWebView与HTML 5技术 280
12.1 UIWebView的使用 281
12.1.1使用UIWebView加载网页 281
12.1.2使用UIWebView加载HTML字符串和GIF动画 283
12.1.3使用UIWebView加载本地网页 286
12.1.4使用Javascript回调原生程序 289
12.2创建一个简单的笔记本 292
12.2.1创建一个可编辑的div 292
12.2.2设置网页的CSS样式 293
12.2.3添加插入笔记图片的方法 294
12.2.4添加删除图片和获得笔记的方法 295
12.2.5实现笔记本的用户界面 296
12.3小结 298
第13章 数据的持久化 299
13.1解析plist文件 300
13.1.1创建和解析plist文件 300
13.1.2将信息写入plist文件 303
13.2使用CoreData进行数据的持久化 304
13.2.1创建Core Data实体并插入数据 306
13.2.2检索Core Data中的数据 308
13.2.3修改和删除Core Data数据 310
13.3小结 312
第14章 多线程技术 313
14.1多线程的概念 314
14.1.1任务、进程和线程 314
14.1.2线程的Stack space 315
14.1.3线程的优先级 315
14.1.4线程的生命周期 315
14.1.5线程和Run loop 316
14.2使用Thread 316
14.2.1创建Thread下载图片 317
14.2.2给Thread加锁使线程同步 319
14.3 Operation技术的使用 322
14.4 Grand Central Dispatch的使用 325
14.4.1使用GCD查询IP地址信息 326
14.4.2 DispatchGroup调度组的使用 328
14.5小结 329
第15章MapKit地图 330
15.1 Map Kit的概念 331
15.1.1 MKMapView的显示区域 331
15.1.2 MKMapView的跟踪和定位 332
15.1.3 MKMapView的交互选项和装饰物 333
15.1.4创建一个MKMapView地图 333
15.1.5 MKMapView代理的使用 335
15.1.6自定义annotationView和calloutV iew 337
15.1.7 Camera相机的使用 341
15.2小结 342
第16章iOS的图文混排技术 343
16.1 Core Text的使用 344
16.1.1文字排版方面的一些基本概念 344
16.1.2列出设备中的所有字体 346
16.1.3富文本的创建 347
16.1.4图文混排的实现 350
16.2 Text Kit的使用 354
16.2.1使用Text Kit对文字进行分栏 354
16.2.2使用Text Kit制作图文混排效果 357
16.3小结 359
第17章iOS的图像和视频处理技术 360
17.1 Core Image概述 361
17.1.1使用Core Image的三个类制作单色调效果 362
17.1.2使用Core Image给图片添加马赛克 363
17.1.3使用Core Image处理视频画面 364
17.1.4输出Core Image的所有滤镜 369
17.1.5使用CIDetector和CIFeature进行人脸检测 370
17.2 UIBlurEffect和CGB1endMode 372
17.2.1使用UIBlurEffect实现毛玻璃效果 372
17.2.2使用CGB1endMode实现颜色混合效果 373
17.3小结 376
第18章iOS常用设备的使用 377
18.1Photos和Camera的使用 378
18.1.1读取Photos中的图片 378
18.1.2调用相机拍摄照片 382
18.2定位设备的使用 384
18.2.1使用定位设备获取设备地理位置 385
18.2.2将地理坐标转换为实际地名 388
18.3陀螺仪和加速计设备的使用 390
18.3.1陀螺仪的原理和应用 390
18.3.2加速计的原理和应用 390
18.3.3检测iOS设备的晃动 391
18.4小结 393
第19章Storyboard故事板的使用 394
19.1Storyboard概述 395
19.1.1 Storyboard的优缺点 395
19.1.2故事板的组织形式 396
19.1.3创建一个Storyboard 397
19.1.4更改故事板的初始视图控制器 398
19.2在Storyboard中使用标准控件 400
19.2.1添加三个控件 400
19.2.2对控件进行连接 402
19.3在Storyboard中使用表格控件 405
19.3.1在故事板中添加Table View 405
19.3.2添加Table View Cell 405
19.3.3设置Table View的数据源 407
19.3.4修改ViewController.swift文件 408
19.4在Storyboard中使用集合控件 409
19.4.1添加Collection View 409
19.4.2设置Collection View Cell 409
19.4.3设置Collection View的数据源和代理 411
19.4.4修改ViewController.swift文件 412
19.5 Storyboard常见的层次结构 413
19.6 Storyboard之间的页面跳转和参数传递 417
19.6.1单个Storyboard中页面间的参数传递 417
19.6.2多个Storyboard中的页面跳转及参数传递 420
19.7使用约束功能适配多分辨率 424
19.7.1打开并运行示例项目 424
19.7.2给父视图MainView添加约束 426
19.7.3给三个分隔线添加约束 428
19.7.4给两个小箭头添加约束 429
19.7.5给添加新会员按钮添加约束 431
19.7.6给无数据图标添加约束 432
19.8小结 433
第20章 界面测试和自动化测试 434
20.1单元测试概述 435
20.1.1 Xocde的XCTest框架 435
20.1.2对其他类的方法进行单元测试 438
20.1.3使用XCTest框架进行性能测试 441
20.2 UI Testing界面测试 442
20.2.1往项目中插入UI Testing 443
20.2.2制作UI测试的程序 444
20.2.3录制UI Testing步骤 446
20.2.4播放UI Testing的录制步骤 446
20.3使用UIAutomation进行自动化测试 447
20.3.1使用UIAutomation录制自动化测试代码 447
20.3.2测试脚本的保存和加载 449
20.4小结 449
第21章iOS应用程序内存泄露的检测 451
21.1Allocations工具的使用 452
21.2 Leaks工具的使用 458
21.3小结 461
第22章iOS应用程序的本地化 462
22.1应用程序的本地化 463
22.1.1应用程序名称的本地化 463
22.1.2应用程序文字内容的本地化 468
22.1.3 Storyboard的本地化 471
22.1.4图片素材的本地化 474
22.2小结 477
第23章 加密与安全 478
23.1加密与安全 479
23.1.1对称加密和非对称加密 479
23.1.2 3DES加密 480
23.1.3 SHA1加密 485
23.1.4 MD5加密 487
23.1.5越狱情况的判断 490
23.2小结 492
第24章 开源框架CocoaPods 493
24.1CocoaPods、 SPM和Carthage简介 494
24.1.1为什么使用CocoaPods 494
24.1.2 CocoaPods的安装及淘宝的镜像使用 495
24.1.3 Podspec的镜像使用 496
24.1.4 CocoaPods的实践 497
24.1.5 pod install和pod update的使用 497
24.1.6 CocoaPods的卸载 498
24.2 CocoaPods-app的使用 498
24.2.1为新项目加入CocoaPods 499
24.2.2对Podfile的pod install和pod update 500
24.2.3删除工程中的CocoaPods 501
24.2.4安装命令行 502
24.3小结 502
第25章Git版本控制及GitHub社会化编程实践 503
25.1Git前奏曲 504
25.1.1什么是版本控制 504
25.1.2版本控制简史 504
25.1.3 Git原理 506
25.1.4 Git的安装、配置、别名和帮助 508
25.2 Git基础曲 510
25.2.1创建本地仓库和关联远程仓库 510
25.2.2文件在工作区、暂存区和Git本地仓库中的操作 513
25.2.3查看提交历史 515
25.2.4撤销操作 515
25.2.5标签 516
25.3小结 519
第26章 项目案例的架构搭建 520
26.1多人协作的工作流程 521
26.2技术选型 522
26.3 MVC及工程结构 523
26.4 UITabbarController、 UINavigationContller 和Assets.xcassets的搭建 525
26.4.1 UITabbarController和 UINavigationController 525
26.4.2 Assets.xcassets管理 527
26.5小结 529
第27章Model层相关框架 530
27.1 XML、 Plist、 JSON数据格式 531
27.2开启ATS 532
27.3 AlamofireObjectMapper 533
27.3.1 AlamofireObjectMapper的安装 533
27.3.2 AlamofireObjectMapper的使用 533
27.4 ObjectMapper 535
27.4.1 ObjectMapper的安装 535
27.4.2 ObjectMapper中Model与JSON的转换 536
27.5 Moya 536
27.5.1 Moya的安装 537
27.5.2 Moya的使用 537
27.6小结 540
第28章 与众平台联姻 541
28.1ShareSDK联合登录 542
28.1.1获取AppKey 542
28.1.2下载SDK 542
28.1.3快速集成 542
28.1.4新建Header File并建立桥接 543
28.1.5打开桥接文件(Bridging-Header.h) 544
28.1.6添加URL Types 546
28.1.7查看open.qq.com应用的审核进度 546
28.2 ShareSDK分享 548
28.2.1增加QQ平台分享支持 548
28.2.2增加微信平台分享支持 548
28.2.3 QQ和微信平台分享的代码实现 549
28.3聚合数据和LeanCloud 550
28.3.1聚合数据 550
28.3.2 LeanCloud 551
28.4 TalkingData统计 551
28.5小结 554
第29章 开发SwiftNews新闻客户端App 555
29.1SwiftNews App概述 556
29.1.1修改App Name 556
29.1.2修改App ICON 557
29.1.3欢迎页面 558
29.1.4启动页面 559
29.1.5 Debug模式下的print 561
29.1.6桥联SVProgressHUD 562
29.1.7自定义Cell 563
29.1.8国内和国际新闻模块 564
29.1.9图片加圆角和助手类 567
29.2小结 569
第30章 应用程序的打包和发布 570
30.1 iOS应用商店概述 571
30.1.1 App Store的重大更新 571
30.1.2在iTunes Connect创建一个App 573
30.1.3打包App为IPA文件 576
30.1.4自动化打包App 577
30.1.5上传App至App Store 580
30.1.6配置构建版本并提交审核 580
30.2小结 582