第1章 介绍iOS 8应用程序开发和Swift 1
1.1 简介 1
1.2 iPhone和iPad的销售数据 2
1.3 手势 2
1.4 传感器 3
1.5 辅助功能 4
1.6 iPhone 6和iPhone 6 Plus 5
1.7 关于iOS操作系统的历史和相关特性 5
1.7.1 iPhone操作系统 5
1.7.2 iPhone OS 2:引入了第三方应用程序和应用程序商店 6
1.7.3 iPhone OS 3 6
1.7.4 iOS 4 6
1.7.5 iOS 5 7
1.7.6 iOS 6 8
1.7.7 iOS 7 9
1.8 iOS 8 10
1.9 Apple Watch 11
1.10 应用商店 11
1.11 Objective-C 12
1.12 Swift:苹果公司未来的编程语言 13
1.12.1 关键特性 13
1.12.2 性能 14
1.12.3 避免错误 14
1.12.4 Swift标准库 14
1.12.5 Swift应用程序和Cocoa框架以及Cocoa Touch框架 15
1.12.6 Swift和Objective-C的相互调用 15
1.12.7 其他苹果公司的Swift资源 15
1.13 能够只使用Swift吗 16
1.13.1 Objective-C程序员利用Swift开发新App 16
1.13.2 Objective-C程序员使用Swift增强现有App功能 16
1.13.3 刚开始开发iOS应用程序的Java、C++和C#程序员 16
1.13.4 快速发展的愿景 16
1.13.5 混合Swift和Objective-C代码 17
1.14 CocoaTouch框架 17
1.15 Xcode 6集成开发环境 21
1.16 面向对象编程回顾 23
1.16.1 把汽车当作一个对象 23
1.16.2 方法和类 23
1.16.3 实例化 23
1.16.4 重用 24
1.16.5 消息和方法调用 24
1.16.6 特性和属性 24
1.16.7 封装和信息隐藏 24
1.16.8 继承 24
1.16.9 协议 24
1.16.10 设计模式 25
1.17 在iPhone和iPad模拟器上测试小费计算器(Tip Calculator)应用程序 25
1.18 是什么成就一个伟大的应用程序 27
1.19 iOS安全 28
1.20 iOS出版物和论坛 29
1.21 小结 29
第2章 欢迎应用程序 31
2.1 介绍 31
2.2 技术概要 32
2.2.1 Xcode和Interface Builder 32
2.2.2 标签和图片视图 32
2.2.3 资源目录和图片集 33
2.2.4 运行应用程序 33
2.2.5 辅助功能 33
2.2.6 国际化 33
2.3 用Xcode创建一个通用应用程序 33
2.3.1 运行Xcode 34
2.3.2 工程和应用程序模板 34
2.3.3 创建和配置一个工程 35
2.4 Xcode的工作台窗口 36
2.4.1 导航区域 36
2.4.2 编辑区域 37
2.4.3 工具区域和查看器 37
2.4.4 调试区域 37
2.4.5 Xcode工具栏 37
2.4.6 工程导航栏 38
2.4.7 键盘快捷键 38
2.5 使用Storyboard创建欢迎应用程序的用户界面 38
2.5.1 给应用程序配置横竖屏 38
2.5.2 提供应用程序图标 39
2.5.3 为应用程序的图片创建一个图片集 41
2.5.4 Storyboard概述和Xcode的工具区域 41
2.5.5 添加一个图片视图到用户界面 43
2.5.6 用查看器配置图片视图 44
2.5.7 添加并配置标签 45
2.5.8 使用自动布局支持不同尺寸的屏幕和方向 47
2.6 运行欢迎应用程序 48
2.6.1 在iOS模拟器上测试 48
2.6.2 在设备上测试(只有付费苹果公司开发者成员才可以) 49
2.7 为应用程序添加辅助功能 50
2.7.1 打开图片视图的辅助功能 50
2.7.2 用模拟器的辅助功能查看器配置辅助功能文本 51
2.8 国际化应用程序 52
2.8.1 在翻译过程中锁定用户界面 52
2.8.2 导出用户界面的字符串资源 53
2.8.3 翻译字符串资源 54
2.8.4 导入和翻译字符串资源 54
2.8.5 用西班牙语测试应用程序 54
2.9 小结 55
第3章 小费计算器 57
3.1 介绍 57
3.2 技术概览 58
3.2.1 Swift语言 58
3.2.2 Swift应用程序和CocoaTouch框架 58
3.2.3 在Swift中使用UIKit和Foundation框架 59
3.2.4 用Interface Builder创建标签、文本输入框和滑动条 60
3.2.5 视图控制器 60
3.2.6 在用户界面控件和Swift代码之间建立连接 60
3.2.7 视图加载之后运行的任务 60
3.2.8 用NSDecimalNumber做财务计算 61
3.2.9 根据特定地区的货币和比率来格式化数字 62
3.2.10 Swift和Objective-C类型之间的桥接 62
3.2.11 Swift操作符重载 63
3.2.12 变量初始化和Swift可选值(Optional)类型 63
3.2.13 值类型和引用类型 63
3.2.14 代码编辑器中的代码补全提示 64
3.3 创建应用程序的用户界面 65
3.3.1 创建工程 65
3.3.2 通过配置Size Classes来设计一个竖屏iPhone应用程序 66
3.3.3 添加UI控件 67
3.3.4 添加自动布局约束 71
3.4 用Interface Builder创建Outlet 73
3.5 用Interface Builder创建行为(Action) 75
3.6 ViewController类 77
3.6.1 import声明 77
3.6.2 ViewController类定义 77
3.6.3 ViewController的@IBOutlet属性 78
3.6.4 ViewController的其他属性 79
3.6.5 覆写UIViewController的viewDidLoad方法 79
3.6.6 ViewController的calculateTip动作方法 80
3.6.7 ViewController.swift文件中定义的全局工具函数 83
3.7 小结 84
第4章 Twitter搜索应用程序 86
4.1 介绍 86
4.2 测试应用程序 87
4.3 技术概述 93
4.3.1 主-从应用程序模板 93
4.3.2 网页视图——在应用程序中展示网页内容 93
4.3.3 Swift:数组和字典集合 93
4.3.4 NSUserDefaults——为应用程序设置存储本地键-值对 95
4.3.5 使用NSUbiquitousKeyValueStore类在iCloud中存储键-值对 95
4.3.6 社交框架 96
4.3.7 模型-视图-视图控制器(MVC)设计模式 96
4.3.8 Swift:遵循协议 97
4.3.9 Swift:暴露方法给CocoaTouch库 97
4.3.10 用于提醒对话框的UIAlertController类 97
4.3.11 长按手势 98
4.3.12 这个应用程序中使用到的iOS设计模式 98
4.3.13 Swift:外部参数名 99
4.3.14 Swift:闭包 99
4.4 创建应用程序的用户界面 101
4.4.1 创建工程 101
4.4.2 检查默认的主-从应用程序 101
4.4.3 配置主视图和详情视图 103
4.4.4 创建模型类 103
4.5 模型类 104
4.5.1 ModelDelegate协议 104
4.5.2 模型类的属性 104
4.5.3 Model类的初始化和同步方法 105
4.5.4 tagAtIndex、queryForTag、queryForTagAtIndex方法和数量属性 107
4.5.5 deleteSearchAtIndex方法 108
4.5.6 moveTagAtIndex方法 109
4.5.7 updateUserDefaults方法 109
4.5.8 updateSearches方法 110
4.5.9 perfonnUpdates方法 111
4.5.10 saveQuery方法 112
4.6 MasterViewController类 112
4.6.1 MasterViewController类的属性和modelDataChanged方法 112
4.6.2 awakeFromNib方法 113
4.6.3 覆写UIViewController类的viewDidLoad方法和addButtonPressed方法 114
4.6.4 tableViewCellLongPressed和displayLongPressOptions方法 115
4.6.5 displayAddEditSearchAlert方法 117
4.6.6 shareSearch方法 119
4.6.7 覆写UIViewController类的prepareForSegue方法 120
4.6.8 urlEncodeString方法 121
4.6.9 UITableViewDataSource的回调方法 121
4.7 DetailViewController类 124
4.7.1 覆写UIViewController类的viewDidLoad方法 125
4.7.2 覆写UIViewController类的viewDidAppear方法 125
4.7.3 覆写UIViewController类的viewWillDisappear方法 125
4.7.4 UIWebViewDelegate协议方法 126
4.8 小结 126
第5章 国旗竞猜应用程序 128
5.1 介绍 128
5.2 测试国旗竞猜应用程序 130
5.3 技术预览 132
5.3.1 从头开始设计一个Storyboard 132
5.3.2 UINavigationController类 132
5.3.3 Storyboard连线(Segues) 132
5.3.4 UISegmentedControl控件 133
5.3.5 UISwitch控件 133
5.3.6 Outlet集合 133
5.3.7 使用应用程序的主NSBundle获取图片名称列表 133
5.3.8 使用Grand Central Dispatch在未来执行任务 133
5.3.9 给视图添加一个动画 134
5.3.10 Darwin模块——使用预先定义的C函数 134
5.3.11 生成随机数 134
5.3.12 介绍Swift的一些特性 135
5.4 创建图形用户界面 137
5.4.1 创建工程 137
5.4.2 设计Storyboard 137
5.4.3 配置视图控制器类 139
5.4.4 为QuizViewController类创建用户界面 139
5.4.5 为QuizViewController类的用户界面设置自动布局 141
5.4.6 QuizViewController的Outlet属性和相关的行为方法 141
5.4.7 创建SettingsViewController的用户界面 141
5.4.8 SettingsViewController类的Outlet和行为方法 143
5.4.9 创建Model类 143
5.4.10 添加国旗图片到应用程序 143
5.5 Model类 143
5.5.1 ModelDelegate协议 144
5.5.2 Model类的属性 144
5.5.3 Model类的初始化和regionsChanged方法 145
5.5.4 Model类的计算属性 147
5.5.5 Model类的toggleRegion、setNumberOfGuesses和notifyDelegate方法 147
5.5.6 Model类的newQuizCountries方法 148
5.6 QuizViewController类 149
5.6.1 属性 149
5.6.2 覆写UIViewController的viewDidLoad方法并介绍settingsChanged和resetQuiz方法 150
5.6.3 nextQuestion和countryFromFilename方法 151
5.6.4 submitGuess方法 153
5.6.5 shakeFlag方法 154
5.6.6 displayQuizResults方法 155
5.6.7 覆写UIViewController类的prepareForSegue方法 156
5.6.8 数组的扩展方法shuffle 156
5.7 SettingsViewController类 157
5.7.1 属性 157
5.7.2 覆写UIViewController类的viewDidLoad方法 158
5.7.3 事件处理和displayErrorDialog方法 158
5.7.4 覆写UIViewController的viewWillDisappear方法 160
5.8 小结 160
第6章 大炮游戏应用程序 162
6.1 介绍 162
6.2 测试大炮游戏应用程序 164
6.3 技术预览 165
6.3.1 Xcode游戏模板和SpriteKit 165
6.3.2 使用AVFoundation框架和AVAudioPlayer类给游戏添加声音 166
6.3.3 SpriteKit框架类 166
6.3.4 SpriteKit的游戏循环和动画帧 167
6.3.5 物理 168
6.3.6 冲突检测和SKPhysicsContactDelegate协议 168
6.3.7 CGGeometry结构体和相关函数 169
6.3.8 覆写UIResponder的touchesBegan方法 169
6.3.9 根据屏幕的大小确定游戏元素的大小和速度 170
6.3.10 Swift语言的特性 170
6.3.11 NSLocalizedString函数 170
6.4 创建工程和类 171
6.5 GameViewController类 172
6.5.1 覆写UIViewController的viewDidLoad方法 173
6.5.2 为什么AVAudioPlaye是全局变量 174
6.5.3 删除GameViewController类中自动生成的方法 174
6.6 拦截器类 175
6.6.1 BlockerSize枚举和拦截器类的属性 175
6.6.2 拦截器的初始化方法 175
6.6.3 startMoving、playHitSound和blockerTimePenalty方法 178
6.7 目标(Target)类 178
6.7.1 TargetSize和TargetColor枚举类 179
6.7.2 目标类的属性 179
6.7.3 目标类的初始化 180
6.7.4 startMoving、playHitSound和targetTimeBonus方法 181
6.8 大炮类 181
6.8.1 大炮类的属性 181
6.8.2 大炮类的初始化 182
6.8.3 rotateToPointAndFire方法 183
6.8.4 fireCannonball和createCannonball方法 184
6.9 游戏场景类 185
6.9.1 CollisionCategory结构体 186
6.9.2 场景类的定义以及它的相关属性 186
6.9.3 覆写SKScene类的didMoveToView方法 187
6.9.4 createLabels方法 189
6.9.5 SKPhysicsContactDelegate协议的didBeginContact和支持方法 190
6.9.6 覆写UIResponder的touchesBegan方法 192
6.9.7 覆写SKScene的update和gameOver方法 192
6.10 GameOverScene类 194
6.11 可编程的国际化 196
6.12 小结 199
第7章 涂鸦应用程序 201
7.1 介绍 201
7.2 测试涂鸦应用程序 202
7.3 技术总览 205
7.3.1 用UIView的子类,drawRect方法、UIBezierPath类和UIKit图形系统来进行绘图 205
7.3.2 处理多点触摸事件 206
7.3.3 监听移动事件 206
7.3.4 将绘制作为一个图片进行显示 207
7.3.5 Storyboard加载初始化 207
7.4 创建应用程序的用户界面和添加自定义类 207
7.4.1 创建工程 207
7.4.2 创建初始化视图控制器的用户界面 208
7.4.3 创建颜色视图控制器的用户界面 209
7.4.4 创建画笔视图控制器的用户界面 211
7.4.5 添加涂鸦类 212
7.5 ViewController类 212
7.5.1 ViewController类的定义、属性和委托方法 212
7.5.2 覆写UIViewController类的prepareForSeque方法 213
7.5.3 ViewController类的undoButtonPressed、clearButtonPressed和displayEraseDialog方法 214
7.5.4 覆写UIResponder的motionEnded方法 215
7.5.5 ViewController类的actionButtonPressed方法 215
7.6 Squiggle类 216
7.7 DoodleView类 217
7.7.1 DoodleView的属性 217
7.7.2 DoodleView的初始化方法 217
7.7.3 DoodleView类的undo和clear方法 217
7.7.4 覆写UIView的drawRect方法 218
7.7.5 覆写UIResponder类的处理触摸事件的方法 218
7.7.6 DoodleView的图片计算属性 220
7.8 ColorViewController类 221
7.8.1 ColorViewControllerDelegate协议和ColorViewController类的开始部分 221
7.8.2 覆写UIViewController类的viewDidLoad方法 222
7.8.3 ColorViewController的colorChanged和done方法 222
7.9 StrokeViewController类 223
7.9.1 UIView的SampleLineView子类 223
7.9.2 StrokeViewControllerDelegate协议和StrokeViewController类的开始部分 224
7.9.3 覆写UIViewController类的viewDidLoad方法 224
7.9.4 StrokeViewController类的lineWidthChanged和done方法 225
7.10 小结 225
第8章 地址簿应用程序 227
8.1 介绍 227
8.2 测试地址簿应用程序 229
8.3 技术预览 231
8.3.1 添加Core Data支持 231
8.3.2 数据模型和Xcode的数据模型编辑器 232
8.3.3 Core Data框架的类和协议 232
8.3.4 UITableViewController的单元格样式 232
8.3.5 包含静态单元格的UITableViewController 233
8.3.6 监听表示键盘显示和隐藏的通知 233
8.3.7 通过编程的方式来滑动一个UITableView 233
8.3.8 UITextFieldDelegate协议的相关方法 233
8.4 创建工程并配置数据模型 233
8.4.1 创建工程 233
8.4.2 编辑数据模型 234
8.4.3 生成NSManagedObject的子类联系人类 235
8.5 创建用户界面 236
8.5.1 自定义MasterViewController类 236
8.5.2 自定义DetailViewController类 237
8.5.3 添加AddEditViewController类 237
8.5.4 添加InstructionsViewController类 238
8.6 MasterViewController类 239
8.6.1 MasterViewController类、属性和awakeFromNib方法 239
8.6.2 覆写UIViewController类的viewWillAppear方法和displayFirstContact-OrInstruction方法 240
8.6.3 覆写UIViewController类的viewDidLoad方法 241
8.6.4 覆写UIViewController类的prepareForSegue方法 242
8.6.5 AddEditTableViewControllerDelegate协议的didSaveContact方法 243
8.6.6 DetailViewControllerDelegate协议的didEditContact方法 244
8.6.7 displayError方法 245
8.6.8 UITableViewDelegate协议的相关方法 245
8.6.9 自动生成的NSFetchedResultsController对象和NSFetchedResults ControllerDelegate协议的相关方法 247
8.7 DetailViewController类 249
8.7.1 DetailViewControllerDelegate协议 249
8.7.2 DetailViewController类的属性 250
8.7.3 覆写UIViewController类的viewDidLoad和displayContact方法 251
8.7.4 AddEditTableViewControllerDelegate协议的didSaveContact方法 251
8.7.5 覆写UIViewController类的prepareForSegue方法 252
8.8 AddEditTableViewController类 252
8.8.1 AddEditTableViewControllerDelegate协议 252
8.8.2 AddEditTableViewController类的属性 253
8.8.3 覆写UIViewController类的viewWillAppear和viewWillDisappear方法 254
8.8.4 覆写UIViewController类的viewDidLoad方法 255
8.8.5 keyboardWillShow和keyboardWillHide方法 255
8.8.6 UITextFieldDelegate协议的textFieldShouldRetum方法 256
8.8.7 返回值为@IBAction的saveButtonPressed方法 257
8.9 AppDelegate类 258
8.9.1 UIApplicationDelegate协议的application:didFinishLaunchingWithOptions:方法 258
8.9.2 UISplitViewControllerDelegate协议的相关方法 258
8.9.3 支持应用程序的Core Data功能的一些属性和方法 259
8.10 小结 259
第9章 应用商店和应用业务问题 261
9.1 介绍 261
9.2 iOS开发者计划:为了测试和提交应用程序,设置用户的开发者账号 262
9.2.1 设置你的开发者团队 262
9.2.2 为测试应用程序配置一个设备 263
9.2.3 使用TestFlight进行Beta测试 264
9.2.4 创建明确的应用程序ID 264
9.3 iOS人机界面指南 265
9.4 通过iTunes Connect提交应用程序 266
9.5 给应用程序定价:收费还是免费 268
9.5.1 付费的应用程序 269
9.5.2 免费的应用程序 269
9.6 应用程序如何赚钱 270
9.6.1 使用应用内购买来销售虚拟商品 270
9.6.2 应用内广告服务iAd 272
9.6.3 App Bundles 272
9.6.4 为企业开发定制应用程序 272
9.7 用iTunes Connect管理应用程序 273
9.8 iTunes Connect需要的一些信息 274
9.9 iTunes Connect开发者指南:提交应用程序到苹果公司的步骤 275
9.10 推广应用程序 276
9.11 其他一些流行的移动应用平台 280
9.12 跨平台的应用程序开发工具 280
9.13 小结 281