macOS应用开发基础教程

macOS应用开发基础教程
分享
扫描下方二维码分享到微信
打开微信,点击右上角”+“,
使用”扫一扫“即可将网页分享到朋友圈。
作者: ,
2018-09
版次: 1
ISBN: 9787115486400
定价: 108.00
装帧: 平装
开本: 16开
纸张: 胶版纸
页数: 586页
正文语种: 简体中文
41人买过
  • 本书是Swift版本的macOS应用开发教程。本书全面介绍和说明了macOS平台中应用开发的系统控件,详细阐述和探讨了应用开发的常用组件、系统框架、应用沙盒处理、上架流程、生产力工具开发等内容,并配有丰富的示例讲解。书中还介绍了几个小型的演示项目,剖析了开发过程、开发思路和关键流程代码,力求让读者从基础知识和项目实践等多个维度去理解和掌握macOS平台的应用开发。

    本书立足普及基本的macOS应用开发知识,力求每个知识点的讲解都简明扼要,并通过代码示例演示让读者尽快学以致用,非常适合macOS应用开发的初学者阅读。但是,本书中并没有介绍Swift的基础语法,阅读本书需要读者了解Swift的知识。 赵君卫(微博@剑指人心),中国早期的iOSkai发者,负责开发了zhu名的LBS交友App“飘信”,曾担任苏宁易购移动技术团队负责人、途牛金融移动技术总监;2014年开始接触macOS应用开发,独立开发了macOS平台上UI设计工具AppX;创建了macOS应用开发网站macdev,汇聚与macOS相关的开发资源,崇尚自动化开发的理念,打造先进的生产力工具。

    张帆(微博@AB人生-东门吹牛西门吹雪),留美博士,专注于计算机和互联网技术在诸如信息安全、通信电子、医疗健康等特定行业的应用,擅长iOS和.NET开发;曾在美国微软总部和飞利浦医疗北美总部任职;入选浙江省“千人计划”;曾任新加坡国立大学访问学者,现任浙江大学信息与电子工程学院和浙江大学网络空间安全研究中心副教授,同时也是新加坡科技设计大学访问教授。 第 1章 准备工作 1

    1.1 Mac电脑 1

    1.2 Xcode使用介绍 1

    1.2.1 Xcode工作区 2

    1.2.2 xib界面设计相关的工作区和菜单 3

    1.3 工程结构 5

    1.3.1 使用xib方式创建的工程 5

    1.3.2 使用storyboard方式创建的工程 11

    第 2章 窗口对象 13

    2.1 窗口界面的组成 14

    2.2 模态窗口 16

    2.2.1 模态窗口 16

    2.2.2 模态会话窗口 16

    2.3 编程控制窗口 17

    2.3.1 创建窗口对象 17

    2.3.2 窗口通知 18

    2.3.3 NSWindow的contentView 18

    2.3.4 设置窗口的image和title 19

    2.3.5 设置窗口的背景颜色 19

    2.3.6 关闭窗口时终止应用 19

    2.3.7 在窗口标题区域增加视图 20

    2.3.8 NSWindow如何正确地保证居中显示 21

    2.3.9 窗口显示位置控制 21

    2.3.10 应用关闭后点击Dock菜单再次 打开应用 21

    2.4 窗口的创建和管理 21

    第3章 视图和滚动条 23

    3.1 基本视图 23

    3.1.1 坐标系统 23

    3.1.2 frame和bounds 24

    3.1.3 坐标转换 25

    3.1.4 视图管理 25

    3.1.5 视图查找 25

    3.1.6 视图的autoSize控制 25

    3.1.7 视图的layer属性 27

    3.1.8 视图绘制 27

    3.1.9 事件响应 28

    3.1.10 视图的frame/bounds变化通知 28

    3.2 增效视图 29

    3.3 滚动条视图 31

    3.3.1 滚动条视图工作原理 31

    3.3.2 用代码创建滚动条视图 32

    3.3.3 滚动到zhi定的位置 32

    3.3.4 用代码实现文本视图滚动的示例 33

    3.3.5 滚动条的显示控制 34

    第4章 基本控件 35

    4.1 控件的分类 35

    4.2 控件家族类图谱 35

    4.2.1 NSResponder 37

    4.2.2 NSView 38

    4.2.3 NSControl 38

    4.2.4 NSCell 38

    4.2.5 小结 39

    4.3 文本框 39

    4.3.1 UI属性说明 40

    4.3.2 事件响应 40

    4.3.3 文本内容的读取或修改 41

    4.3.4 特殊按键响应处理 41

    4.4 文本视图 42

    4.4.1 UI属性说明 42

    4.4.2 事件响应 43

    4.4.3 文本的格式化显示 43

    4.4.4 文本框高度根据文字高度自适应增长 44

    4.5 文本搜索框 44

    4.6 文本标签 46

    4.6.1 UI属性说明 46

    4.6.2 用代码创建文本标签 46

    4.7 按钮 48

    4.7.1 UI属性说明 48

    4.7.2 事件响应 48

    4.7.3 连接事件 49

    4.7.4 用代码创建按钮 49

    4.7.5 图片按钮的创建 49

    4.8 复选框 50

    4.8.1 UI属性说明 51

    4.8.2 事件响应 51

    4.9 单选按钮 51

    4.9.1 UI属性说明 51

    4.9.2 事件响应 52

    4.10 分段选择控件 52

    4.10.1 UI属性说明 53

    4.10.2 事件响应 53

    4.10.3 分段大小的控制 53

    4.10.4 分段样式风格的控制 53

    4.11 组合框 54

    4.11.1 UI属性说明 54

    4.11.2 事件响应 55

    4.11.3 动态增加列表内容 55

    4.11.4 使用数据源和代理 55

    4.12 弹出式按钮 56

    4.12.1 UI属性说明 56

    4.12.2 动态列表项配置 56

    4.12.3 事件响应 57

    4.13 滑杆 57

    4.13.1 属性设置 57

    4.13.2 水平和垂直方向设置 57

    4.13.3 事件绑定 58

    4.14 日期选择器 58

    4.14.1 UI属性说明 58

    4.14.2 获取日期 59

    4.14.3 日期变化的事件 59

    4.15 步进器 59

    4.15.1 UI属性说明 60

    4.15.2 事件响应 60

    4.15.3 文本框数据与步进器保持同步 60

    4.16 进度指示器 60

    4.16.1 UI属性说明 61

    4.16.2 启动指示器动画 61

    4.16.3 更新指示器进度 61

    4.16.4 停止指示器动画 61

    4.16.5 用代码创建进度指示器 62

    4.17 图像视图 62

    4.17.1 UI属性说明 62

    4.17.2 圆角处理 62

    4.18 分组框 63

    4.18.1 UI属性说明 63

    4.18.2 用代码创建分组框 63

    4.19 分栏视图 64

    4.19.1 重要属性和方法说明 64

    4.19.2 用代码创建分栏视图 65

    4.19.3 自定义分栏视图样式风格 65

    4.19.4 分栏视图中的子视图控制 66

    4.19.5 分栏视图子视图的隐藏和显示 68

    4.20 集合视图 68

    4.20.1 集合视图的content 69

    4.20.2 NSCollectionViewItem 69

    4.20.3 绑定模型到视图 70

    4.20.4 使用数据源方式管理集合视图 71

    4.20.5 实现集合视图的高亮选择 73

    4.20.6 集合视图的背景设置 75

    4.20.7 集合视图的布局管理器 75

    4.20.8 设置集合视图的顶部头和底部尾 77

    4.20.9 用代码创建集合视图 79

    4.21 选项卡视图 79

    4.21.1 UI属性说明 80

    4.21.2 代理协议NSTabViewDelegate 80

    4.21.3 动态增加选项卡 80

    4.21.4 用无边风格的选项卡进行切换控制 81

    4.22 弹出式气泡 82

    4.22.1 重要属性 82

    4.22.2 使用示例 83

    第5章 面板和警告框 84

    5.1 面板 84

    5.1.1 UI属性说明 85

    5.1.2 显示面板 85

    5.1.3 隐藏面板 86

    5.1.4 文件打开面板 86

    5.1.5 文件保存面板 88

    5.1.6 颜色选择面板 88

    5.1.7 字体选择面板 89

    5.2 警告框 89

    5.2.1 UI属性说明 89

    5.2.2 添加按钮 90

    5.2.3 使用示例 90

    5.3 使用独立的xib文件创建面板类 91

    第6章 工具栏和菜单 94

    6.1 工具栏 94

    6.1.1 创建工具栏 94

    6.1.2 UI属性说明 95

    6.1.3 NSToolbarItem的属性说明 96

    6.1.4 事件响应 96

    6.1.5 创建非标准的工具栏项 97

    6.1.6 验证工具栏项 97

    6.1.7 用代码创建工具栏 98

    6.1.8 工具栏与窗口控制按钮融合显示 99

    6.2 菜单 99

    6.2.1 UI属性说明 100

    6.2.2 增加菜单 101

    6.2.3 弹出式菜单 101

    6.2.4 设置上下文菜单 102

    6.2.5 Dock菜单 102

    6.2.6 用代码创建菜单 103

    6.2.7 获取应用默认的菜单 104

    6.2.8 菜单有效性验证 104

    6.3 状态条 105

    6.3.1 NSStatusBar类的对象关系 105

    6.3.2 NSStatusBar的使用方式 105

    6.3.3 状态条增加弹出视图 107

    第7章 表视图 109

    7.1 表视图 109

    7.1.1 使用xib创建表格 109

    7.1.2 表格样式设置 112

    7.1.3 表格数据显示配置 112

    7.1.4 表格事件 119

    7.1.5 创建表格上下文菜单 120

    7.1.6 数据排序 120

    7.1.7 数据拖放 121

    7.1.8 表格数据获取 121

    7.1.9 编辑表格内容 121

    7.1.10 动态增加/删除表格行 122

    7.1.11 用代码创建表格 123

    7.1.12 代码控制选中行 125

    7.1.13 表格行选中颜色定制 126

    7.2 大纲视图控件 126

    7.2.1 节点模型定义 127

    7.2.2 初始化模型数据 128

    7.2.3 实现数据源协议 128

    7.2.4 实现代理方法,绑定数据到节点视图 129

    7.2.5 节点选择的变化事件通知 129

    7.2.6 动态增加节点 130

    7.2.7 动态删除节点 130

    7.2.8 代码控制行的展开和选中 131

    7.2.9 修改节点展开关闭的默认图标 132

    7.2.10 鼠标右键上下文菜单 133

    第8章 自动布局 134

    8.1 自动布局的原理 134

    8.1.1 传统的布局 134

    8.1.2 自动布局 135

    8.2 栈视图 137

    8.3 Xcode中的自动布局设置 138

    8.3.1 Stack 139

    8.3.2 Align 140

    8.3.3 Pin 140

    8.3.4 Resolve 141

    8.4 自动布局的多种解决方案 141

    8.4.1 一个问题的多种解决方案 142

    8.4.2 约束选择的原则和建议 144

    8.5 自动布局使用示例 144

    8.5.1 两个视图大小相同 144

    8.5.2 3个View大小相同 145

    8.5.3 文本标签和输入框 145

    8.5.4 文本标签动态字体和输入框 146

    8.5.5 多行文本标签和输入框 146

    8.5.6 多行文本标签动态字体和输入框 147

    8.5.7 两个视图大小相同、水平方向的间距相同 148

    8.5.8 简单的Stack View 149

    8.5.9 复杂界面未使用栈视图 150

    8.5.10 复杂界面使用多个嵌套栈视图 151

    8.6 滚动条视图使用自动布局 151

    8.7 通过代码设置自动布局约束 153

    8.7.1 使用NSLayoutConstraint类 153

    8.7.2 使用NSLayoutAnchor 155

    8.7.3 使用VFL定义约束关系 155

    8.7.4 使用第三方库AutoLayoutX 155

    第9章 窗口控制器 157

    9.1 xib中窗口的加载创建过程 157

    9.2 手工创建窗口需要注意的问题 160

    9.3 窗口控制器和窗口的关系 161

    9.4 将AppDelegate中窗口的管理功能分离 161

    9.5 窗口切换后对象失去焦点问题 163

    第 10章 视图控制器 164

    10.1 视图控制器 164

    10.1.1 视图生命周期过程 165

    10.1.2 创建视图控制器的3种方式 166

    10.1.3 representedObject属性 167

    10.1.4 子视图控制器管理 168

    10.1.5 两个视图控制器之间的切换方法 169

    10.1.6 Storyboard中的视图控制 172

    10.1.7 视图中手势识别 174

    10.2 选项卡控制器 175

    10.2.1 使用NSTabView创建选项卡视图 175

    10.2.2 使用NSTabViewController管理选项卡视图 176

    10.2.3 使用Storyboard方式创建 176

    10.2.4 选项卡选中事件 177

    10.3 分栏视图控制器 178

    10.3.1 控制器的几个重要的属性和方法 178

    10.3.2 NSSplitViewItem 179

    10.3.3 NSSplitView 179

    10.3.4 使用Storyboard创建分栏视图控制器 179

    10.3.5 用代码创建分栏视图控制器 180

    10.3.6 可折叠的视图控制 181

    10.4 视图控制器与窗口控制器的关系 183

    10.4.1 视图与窗口 183

    10.4.2 视图控制器与窗口控制器 183

    10.4.3 不依赖xib和storyboard,纯代码实现应用 184

    10.5 使用窗口控制器和视图控制器实现简单登录流程 186

    10.5.1 登录流程的基本工程实现 186

    10.5.2 代码控制启动的控制器 190

    10.5.3 登录页面使用效果美化 190

    10.5.4 登录页面纯代码实现 192

    10.5.5 整个工程纯代码实现 195

    10.6 滚动条视图gao级用法 195

    10.6.1 滚动条视图显示多个按钮 195

    10.6.2 滚动条视图处理分页滑动 199

    第 11章 鼠标和键盘事件 206

    11.1 事件的分发过程 206

    11.2 事件中的两个核心类 207

    11.2.1 NSResponder 207

    11.2.2 NSEvent 207

    11.3 鼠标事件 208

    11.3.1 鼠标点击 208

    11.3.2 鼠标拖放 209

    11.3.3 鼠标区域跟踪 210

    11.3.4 模拟鼠标点击选中 212

    11.4 键盘事件 213

    11.4.1 快捷键 213

    11.4.2 控制键 214

    11.5 按键绑定事件 215

    11.5.1 系统绑定的按键事件 215

    11.5.2 文字输入 216

    11.6 事件监控 218

    11.7 动作消息 218

    11.8 在视图控制器中处理事件 219

    第 12章 撤销/重做操作 220

    12.1 撤销/重做流程分析 220

    12.2 实现原理 222

    12.3 撤销/重做动作的管理 223

    12.3.1 NSUndoManager的创建 223

    12.3.2 注册撤销动作 223

    12.3.3 清除撤销动作 224

    12.3.4 禁止注册撤销动作 224

    12.3.5 撤销动作命名 224

    12.3.6 撤销组 224

    12.4 撤销栈的深度 224

    12.5 撤销/重做通知消息 225

    12.6 撤销/重做编程示例 225

    第 13章 拖放操作 227

    13.1 拖放开始 227

    13.1.1 拖放数据定义 227

    13.1.2 拖放的可视化图像设置 229

    13.1.3 拖放源事件 229

    13.1.4 拖放源协议NSDraggingSource 230

    13.2 拖放接收 231

    13.2.1 注册接收的拖放类型 231

    13.2.2 拖放目标方协议 231

    13.2.3 拖放接收方处理过程 231

    13.3 拖放端到端编程 232

    13.3.1 拖放源类DragSourceView 232

    13.3.2 拖放目标类 233

    13.3.3 视图控制器中拖放源初始化 235

    13.4 常见的拖放示例 236

    13.4.1 文件拖放处理 236

    13.4.2 表格视图的拖放处理 237

    13.4.3 大纲视图的数据拖放处理 239

    第 14章 Cocoa数据绑定 243

    14.1 KVC 243

    14.1.1 KVC属性读写接口 244

    14.1.2 KVC路径访问相关接口 244

    14.1.3 批量属性访问接口 244

    14.2 KVO 245

    14.2.1 KVO相关接口 245

    14.2.2 手工管理KVO 246

    14.2.3 KVO的简单例子 247

    14.3 KVB 248

    14.3.1 传统的数据更新流程 249

    14.3.2 使用绑定技术简化更新流程 249

    14.3.3 实现绑定依赖的关键点 252

    14.3.4 KVB绑定的处理流程 253

    14.3.5 使用NSArrayController管理数据 254

    14.3.6 使用NSTreeController管理数据 256

    第 15章 蓝牙框架 261

    15.1 蓝牙数据交换流程 261

    15.2 蓝牙框架中的相关类 262

    15.2.1 外围设备相关 263

    15.2.2 数据中心相关 263

    15.2.3 服务相关 263

    15.2.4 特征值相关 263

    15.3 外围设备的工作流程 263

    15.3.1 系统初始化上电 263

    15.3.2 创建服务 264

    15.3.3 创建特征值 264

    15.3.4 服务与特征值关联 264

    15.3.5 发布服务 264

    15.3.6 广播服务 265

    15.3.7 数据读写请求 265

    15.3.8 订阅请求处理 266

    15.4 数据中心工作流程 266

    15.4.1 系统初始化上电 266

    15.4.2 搜索外围设备 267

    15.4.3 建立连接 267

    15.4.4 查询服务 267

    15.4.5 查询服务特征值 267

    15.4.6 服务特征读请求 268

    15.4.7 服务特征值写 268

    15.4.8 服务订阅 269

    第 16章 Bonjour协议 270

    16.1 Bonjour服务命名规则 271

    16.2 Bonjour协议API栈 271

    16.3 Bonjour核心流程 271

    16.3.1 服务发布 272

    16.3.2 服务发现 272

    16.3.3 地址解析 273

    16.4 Bonjour编程 273

    16.4.1 服务发布 273

    16.4.2 服务发现 274

    16.4.3 直接使用Bonjour进行数据发送 274

    16.4.4 需要注意的问题 275

    第 17章 系统服务 276

    17.1 服务处理流程 277

    17.2 服务定义 277

    17.3 服务提供方编程 279

    17.3.1 实现服务功能接口 279

    17.3.2 声明服务 280

    17.3.3 注册服务 281

    17.3.4 测试服务功能 281

    17.4 服务使用方编程 282

    17.4.1 注册数据类型 282

    17.4.2 菜单有效性校验 282

    17.4.3 发送数据到剪贴板 283

    17.4.4 从剪贴板读取结果数据 283

    第 18章 XPC服务 284

    18.1 XPC架构 284

    18.2 XPC编程实现 285

    18.2.1 XPC服务接口对象 285

    18.2.2 XPC服务方编程 285

    18.2.3 XPC服务请求方编程 287

    18.2.4 XPC服务接口反向调用 288

    第 19章 消息推送 290

    19.1 本地消息通知 290

    19.1.1 注册本地消息通知 290

    19.1.2 实现本地消息代理协议方法 291

    19.1.3 取消本地通知 291

    19.1.4 程序控制发送消息通知 292

    19.2 远程消息通知 292

    19.2.1 推送消息的处理流程 292

    19.2.2 请求消息推送注册 293

    19.2.3 设备 293

    19.2.4 推送消息接收 293

    19.2.5 提供者消息发送 294

    19.2.6 消息格式 294

    19.2.7 Feedback服务 295

    19.2.8 消息推送环境的证书配置 295

    19.2.9 推送消息的发送 296

    第 20章 多文档应用 298

    20.1 文档应用中的关键对象 298

    20.1.1 文档控制器 298

    20.1.2 文档模型 299

    20.1.3 文档窗口控制器 299

    20.2 创建基于文档的工程 299

    20.2.1 Document Types 300

    20.2.2 Exported UTIs 301

    20.2.3 文档编程模板工程 301

    20.3 wrapper方式读取文件 303

    20.3.1 创建NSFileWrapper管理文件 304

    20.3.2 从NSFileWrapper实例读取内容 304

    20.3.3 支持NSFileWrapper文件的工程配置 305

    20.3.4 完整的FileWrapper工程示例 305

    20.4 文档处理流程 309

    20.4.1 新建文档流程 309

    20.4.2 打开文档流程 309

    20.4.3 保存文档流程 310

    20.4.4 导出文件流程 310

    20.5 文档应用开发步骤 310

    20.6 文档应用中的撤销/重做支持 311

    20.7 文档应用管理个人档案 312

    20.7.1 个人档案数据模型 312

    20.7.2 文档数据以普通文件方式存储 313

    20.7.3 文档数据以wrapper方式存储 316

    第 21章 iCloud同步 320

    21.1 容器 320

    21.2 iCloud数据存储 321

    21.2.1 iCloud文档数据处理流程 321

    21.2.2 iCloud文档本地目录 323

    21.3 键值存储 324

    21.3.1 键值存储接口 324

    21.3.2 键值存储限制 324

    21.3.3 键值存储数据变化通知 325

    21.3.4 键值存储处理流程 325

    21.4 iCloud开发前准备工作 325

    21.5 容器数据在多个App间共享 327

    21.5.1 键值存储数据的App间共享访问 327

    21.5.2 文档数据的App间共享访问 328

    21.6 数据冲突 328

    21.6.1 键值数据冲突 328

    21.6.2 文档类型数据冲突 328

    第 22章 CloudKit 329

    22.1 使用Dashboard后台管理数据 330

    22.2 容器共享 332

    22.3 创建记录结构 333

    22.4 CloudKit数据操作 334

    22.4.1 保存数据 334

    22.4.2 删除数据 336

    22.4.3 查询数据 336

    22.4.4 数据关联reference 337

    22.4.5 批量查询数据操作 337

    22.5 订阅数据变化通知 338

    22.5.1 创建订阅 338

    22.5.2 注册消息推送 338

    22.6 生产环境部署 339

    第 23章 Core Data 340

    23.1 Core Data对象栈 341

    23.2 在项目中使用Core Data 341

    23.2.1 数据增加 345

    23.2.2 数据删除 346

    23.2.3 数据修改 346

    23.2.4 数据查询 346

    23.3 模型间关系 347

    23.3.1 一对一 347

    23.3.2 一对多 348

    23.3.3 多对多 348

    23.4 使用Bindings绑定管理对象 350

    23.5 撤销/重做操作的支持 353

    23.6 版本升级迁移 354

    23.6.1 轻量级迁移 354

    23.6.2 基于模型映射的迁移 357

    第 24章 HTTP网络编程 360

    24.1 简单的数据请求 361

    24.1.1 使用系统默认方式创建URLSession 361

    24.1.2 使用自定义的代理方法创建URLSession 362

    24.1.3 创建URLSession使用POST方式传递数据 363

    24.2 文件下载 364

    24.2.1 创建下载任务 364

    24.2.2 实现下载代理协议 364

    24.3 文件上传 365

    24.3.1 流式文件上传客户端代码编写 365

    24.3.2 表单文件上传客户端代码编写 366

    24.4 缓存 368

    24.5 Cookie管理 369

    24.5.1 Cookie编程 370

    24.5.2 Cookie的一些使用场景 370

    24.6 断点续传 371

    24.7 基于URLSessionDataTask封装的网络处理工具类 372

    24.7.1 网络处理工具类实现分析 372

    24.7.2 HTTPClient工具类实现 373

    第 25章 多线程 377

    25.1 GCD 377

    25.1.1 分发队列 377

    25.1.2 GCD多线程编程 378

    25.1.3 GCD实际使用的例子 382

    25.2 OperationQueue 384

    25.2.1 BlockOperation 384

    25.2.2 Operation 385

    25.2.3 设置任务间的依赖 386

    25.2.4 设置Operation执行完的回调 387

    25.2.5 取消任务 387

    25.2.6 暂停或恢复队列的执行 387

    25.2.7 任务执行的优先级 387

    25.3 Thread 388

    25.3.1 线程创建方式 388

    25.3.2 Thread类中的关键方法和属性 389

    25.3.3 线程中的共享资源保护 390

    第 26章 事件循环 393

    26.1 RunLoop的模式 393

    26.2 RunLoop类 394

    26.3 RunLoop的活动状态 395

    26.4 定时器 396

    26.5 RunLoop中的输入源 397

    26.6 RunLoop事件处理流程 398

    26.7 RunLoop使用场景 398

    第 27章 绘图技术 399

    27.1 绘图上下文 399

    27.2 坐标系统 399

    27.2.1 笛卡儿坐标 399

    27.2.2 屏幕坐标与本地坐标 400

    27.2.3 坐标变换 400

    27.3 颜色与透明度 403

    27.3.1 颜色模型和颜色空间 403

    27.3.2 创建颜色 403

    27.3.3 在绘图上下文中使用颜色 404

    27.3.4 从系统颜色面板获取颜色的方式 404

    27.4 绘图状态 405

    27.5 图像 406

    27.5.1 图像内部缓存 406

    27.5.2 图像大小 406

    27.5.3 图像的坐标系统 406

    27.5.4 图像绘制方法 407

    27.5.5 图像创建或加载 407

    27.5.6 屏幕图像的捕获 408

    27.5.7 图像的格式转换 409

    27.6 阴影和渐变 409

    27.6.1 阴影 409

    27.6.2 渐变 410

    27.7 文本绘制 413

    27.7.1 文本属性参数 413

    27.7.2 String的绘制方法 413

    27.8 使用路径绘图 414

    27.8.1 路径的样式 415

    27.8.2 点 418

    27.8.3 线 418

    27.8.4 多边形 418

    27.8.5 矩形 418

    27.8.6 圆角矩形 419

    27.8.7 圆和椭圆 419

    27.8.8 弧形 419

    27.8.9 贝塞尔曲线 420

    27.9 绘图的性能优化 420

    第 28章 核心动画 422

    28.1 动画的产生过程 422

    28.2 层 423

    28.2.1 视图和层 423

    28.2.2 层的坐标系统 424

    28.2.3 层的时间系统 425

    28.2.4 层的对象树 425

    28.2.5 层级管理方法 426

    28.2.6 层的内容 426

    28.2.7 层的深度 427

    28.2.8 层的透视投影 427

    28.3 层动画 428

    28.3.1 隐式动画 428

    28.3.2 显式动画 429

    28.4 核心动画对象 430

    28.4.1 动画相关类 431

    28.4.2 协议 433

    28.4.3 辅助类 435

    28.4.4 事务 436

    28.5 动画的控制 437

    28.5.1 隐式动画的产生过程 437

    28.5.2 隐式动画的动作定义 438

    28.5.3 动画结束通知 438

    28.5.4 动画的暂停和恢复 439

    28.6 macOS中的属性动画 439

    28.6.1 属性动画 440

    28.6.2 动画上下文对象 440

    28.6.3 自动布局动画 441

    28.7 系统动画与核心动画的对比 441

    28.8 动画编程示例 442

    28.8.1 关键帧动画 442

    28.8.2 分组动画 444

    28.8.3 转场动画 444

    28.9 动画性能 445

    28.10 系统专有层 446

    28.10.1 渐变层 446

    28.10.2 形状层 447

    28.10.3 文本层 448

    28.10.4 分片层 448

    28.10.5 副本层 449

    28.10.6 发射层 450

    28.10.7 变换层 452

    第 29章 多代理 455

    29.1 多代理与代理和通知的比较 455

    29.1.1 代理方式实现 455

    29.1.2 通知 456

    29.1.3 多代理 456

    29.2 多代理的实现 457

    29.2.1 Objective-C中多代理实现技术 457

    29.2.2 使用消息转发机制进行优化 457

    29.2.3 XMPPFramework 458

    29.3 聊天列表示例 459

    29.3.1 主要的视图控制器 459

    29.3.2 联系人模型类 460

    29.3.3 多代理管理类 460

    29.3.4 多代理的注册 461

    29.3.5 多代理的通知 462

    第30章 数据转换 464

    30.1 转换器基类 465

    30.2 系统实现的转换器 465

    30.3 绑定中使用的转换器 466

    30.3.1 类型转换器的实现和注册 466

    30.3.2 实现模型类 467

    30.3.3 绑定Combo Box控件到模型类 468

    30.4 实现自定义转换器的步骤 469

    30.5 使用转换器分离数据转换逻辑 469

    第31章 框架 471

    31.1 框架与静态库 471

    31.2 创建框架工程 471

    31.2.1 接口定义 471

    31.2.2 头文件引用声明 472

    31.2.3 使用框架 473

    31.2.4 框架的加载路径 476

    31.2.5 框架的签名问题 478

    第32章 应用沙盒化 479

    32.1 macOS沙盒机制 479

    32.2 应用沙盒配置信息 479

    32.3 文件沙盒编程 481

    32.3.1 设计界面 481

    32.3.2 App启动处理 481

    32.3.3 打开文件处理流程 482

    32.3.4 保存文件 483

    32.3.5 应用沙盒配置 483

    32.3.6 作用域安全的书签 484

    32.3.7 保存打开的文件URL的书签 484

    32.3.8 应用启动时通过URL的书签获取文件shou权 484

    第33章 数据导航视图 487

    33.1 DataNavigationItem的设计 487

    33.1.1 DataNavigationItem基类 488

    33.1.2 DataNavigationButtonItem 488

    33.1.3 DataNavigationTextItem 488

    33.1.4 DataNavigationFlexibleItem 489

    33.2 DataNavigationView接口和属性 489

    33.2.1 接口 489

    33.2.2 内部属性 489

    33.3 DataNavigationView代码实现 490

    33.3.1 item配置 490

    33.3.2 创建视图 491

    33.3.3 自动布局 492

    33.3.4 更新文本视图的方法 494

    33.4 使用DataNavigationView 494

    第34章 表格数据管理控制器 497

    34.1 表格列的动态配置 497

    34.1.1 表列定义的模型 498

    34.1.2 NSTableColumn类的扩展 499

    34.1.3 NSTableView类的扩展 499

    34.1.4 代码动态配置表列的表数据导航控制器 500

    34.2 实现用代码创建的表格和用xib创建表格的兼容 504

    34.3 表格的数据代理 505

    34.3.1 数据集管理操作接口 505

    34.3.2 数据源实现 507

    34.3.3 动态创建表格内容的数据代理方法 507

    34.3.4 表内容的编辑处理 511

    34.3.5 TableDataDelegate的使用 512

    34.4 数据列排序 513

    34.5 数据行拖放交换顺序 514

    34.6 数据分页显示控制 515

    34.6.1 分页控制器 515

    34.6.2 分页导航视图 517

    34.6.3 分页数据获取 519

    34.7 表格数据的增删编辑操作 519

    34.7.1 增加数据 519

    34.7.2 删除数据 520

    34.7.3 编辑表数据 521

    第35章 自动化小工具 522

    35.1 图片资源适配自动化工具 522

    35.1.1 实现思路 522

    35.1.2 工程实现 524

    35.2 国际化 527

    35.2.1 App语言国际化的过程 527

    35.2.2 自动化的思路 530

    35.2.3 Xcode工程文件的编辑和修改 531

    第36章 iPhone利用蓝牙控制Mac 534

    36.1 控制的主要流程分析 534

    36.2 macOS服务器端 535

    36.2.1 XXXPeripheralService服务类 535

    36.2.2 macOS端界面开发 537

    36.2.3 Mac锁屏状态通知 538

    36.2.4 控制Mac电脑的系统命令和脚本 539

    36.2.5 macOS端接收iOS端的命令处理 540

    36.3 iOS控制端 541

    36.3.1 XXXCentralClient类 541

    36.3.2 iOS界面开发 543

    第37章 SQLite数据库编程 546

    37.1 FMDB介绍 546

    37.2 数据库操作接口封装 548

    37.2.1 数据库管理对象 548

    37.2.2 数据访问对象 549

    37.2.3 MDAO对象 551

    37.2.4 数据模型对象 552

    37.2.5 具体使用 553

    37.3 数据库加密 554

    37.3.1 获取支持加密的SQLite3版本 554

    37.3.2 加密数据库 555

    37.3.3 操作加密数据库 556

    37.4 获取SQLite元数据 556

    37.5 模板引擎 559

    37.5.1 Xcode中的模板 560

    37.5.2 模板引擎处理流程 560

    37.6 表模型自动化代码生成 561

    37.6.1 模板文件定义 561

    37.6.2 代码实现 562

    第38章 开发一个完整的macOS应用 564

    38.1 制定目标 564

    38.2 开发自己的应用 564

    38.3 主界面设计 564

    38.3.1 主窗口控制器 565

    38.3.2 分栏页面控制器 566

    38.3.3 左边导航列表页的设计与实现 567

    38.3.4 分栏右部界面 570

    38.3.5 详细界面设计 571

    38.4 工具栏设计 572

    38.5 菜单设计 574

    38.5.1 系统菜单 574

    38.5.2 上下文菜单 575

    38.6 应用偏好设置 577

    38.7 页面控制器的核心流程 578

    38.8 用户体验的一点改进 582

    38.9 发布应用准备 583

    38.9.1 发布到非应用商店渠道 583

    38.9.2 发布到应用商店 584

    后记 586
  • 内容简介:
    本书是Swift版本的macOS应用开发教程。本书全面介绍和说明了macOS平台中应用开发的系统控件,详细阐述和探讨了应用开发的常用组件、系统框架、应用沙盒处理、上架流程、生产力工具开发等内容,并配有丰富的示例讲解。书中还介绍了几个小型的演示项目,剖析了开发过程、开发思路和关键流程代码,力求让读者从基础知识和项目实践等多个维度去理解和掌握macOS平台的应用开发。

    本书立足普及基本的macOS应用开发知识,力求每个知识点的讲解都简明扼要,并通过代码示例演示让读者尽快学以致用,非常适合macOS应用开发的初学者阅读。但是,本书中并没有介绍Swift的基础语法,阅读本书需要读者了解Swift的知识。
  • 作者简介:
    赵君卫(微博@剑指人心),中国早期的iOSkai发者,负责开发了zhu名的LBS交友App“飘信”,曾担任苏宁易购移动技术团队负责人、途牛金融移动技术总监;2014年开始接触macOS应用开发,独立开发了macOS平台上UI设计工具AppX;创建了macOS应用开发网站macdev,汇聚与macOS相关的开发资源,崇尚自动化开发的理念,打造先进的生产力工具。

    张帆(微博@AB人生-东门吹牛西门吹雪),留美博士,专注于计算机和互联网技术在诸如信息安全、通信电子、医疗健康等特定行业的应用,擅长iOS和.NET开发;曾在美国微软总部和飞利浦医疗北美总部任职;入选浙江省“千人计划”;曾任新加坡国立大学访问学者,现任浙江大学信息与电子工程学院和浙江大学网络空间安全研究中心副教授,同时也是新加坡科技设计大学访问教授。
  • 目录:
    第 1章 准备工作 1

    1.1 Mac电脑 1

    1.2 Xcode使用介绍 1

    1.2.1 Xcode工作区 2

    1.2.2 xib界面设计相关的工作区和菜单 3

    1.3 工程结构 5

    1.3.1 使用xib方式创建的工程 5

    1.3.2 使用storyboard方式创建的工程 11

    第 2章 窗口对象 13

    2.1 窗口界面的组成 14

    2.2 模态窗口 16

    2.2.1 模态窗口 16

    2.2.2 模态会话窗口 16

    2.3 编程控制窗口 17

    2.3.1 创建窗口对象 17

    2.3.2 窗口通知 18

    2.3.3 NSWindow的contentView 18

    2.3.4 设置窗口的image和title 19

    2.3.5 设置窗口的背景颜色 19

    2.3.6 关闭窗口时终止应用 19

    2.3.7 在窗口标题区域增加视图 20

    2.3.8 NSWindow如何正确地保证居中显示 21

    2.3.9 窗口显示位置控制 21

    2.3.10 应用关闭后点击Dock菜单再次 打开应用 21

    2.4 窗口的创建和管理 21

    第3章 视图和滚动条 23

    3.1 基本视图 23

    3.1.1 坐标系统 23

    3.1.2 frame和bounds 24

    3.1.3 坐标转换 25

    3.1.4 视图管理 25

    3.1.5 视图查找 25

    3.1.6 视图的autoSize控制 25

    3.1.7 视图的layer属性 27

    3.1.8 视图绘制 27

    3.1.9 事件响应 28

    3.1.10 视图的frame/bounds变化通知 28

    3.2 增效视图 29

    3.3 滚动条视图 31

    3.3.1 滚动条视图工作原理 31

    3.3.2 用代码创建滚动条视图 32

    3.3.3 滚动到zhi定的位置 32

    3.3.4 用代码实现文本视图滚动的示例 33

    3.3.5 滚动条的显示控制 34

    第4章 基本控件 35

    4.1 控件的分类 35

    4.2 控件家族类图谱 35

    4.2.1 NSResponder 37

    4.2.2 NSView 38

    4.2.3 NSControl 38

    4.2.4 NSCell 38

    4.2.5 小结 39

    4.3 文本框 39

    4.3.1 UI属性说明 40

    4.3.2 事件响应 40

    4.3.3 文本内容的读取或修改 41

    4.3.4 特殊按键响应处理 41

    4.4 文本视图 42

    4.4.1 UI属性说明 42

    4.4.2 事件响应 43

    4.4.3 文本的格式化显示 43

    4.4.4 文本框高度根据文字高度自适应增长 44

    4.5 文本搜索框 44

    4.6 文本标签 46

    4.6.1 UI属性说明 46

    4.6.2 用代码创建文本标签 46

    4.7 按钮 48

    4.7.1 UI属性说明 48

    4.7.2 事件响应 48

    4.7.3 连接事件 49

    4.7.4 用代码创建按钮 49

    4.7.5 图片按钮的创建 49

    4.8 复选框 50

    4.8.1 UI属性说明 51

    4.8.2 事件响应 51

    4.9 单选按钮 51

    4.9.1 UI属性说明 51

    4.9.2 事件响应 52

    4.10 分段选择控件 52

    4.10.1 UI属性说明 53

    4.10.2 事件响应 53

    4.10.3 分段大小的控制 53

    4.10.4 分段样式风格的控制 53

    4.11 组合框 54

    4.11.1 UI属性说明 54

    4.11.2 事件响应 55

    4.11.3 动态增加列表内容 55

    4.11.4 使用数据源和代理 55

    4.12 弹出式按钮 56

    4.12.1 UI属性说明 56

    4.12.2 动态列表项配置 56

    4.12.3 事件响应 57

    4.13 滑杆 57

    4.13.1 属性设置 57

    4.13.2 水平和垂直方向设置 57

    4.13.3 事件绑定 58

    4.14 日期选择器 58

    4.14.1 UI属性说明 58

    4.14.2 获取日期 59

    4.14.3 日期变化的事件 59

    4.15 步进器 59

    4.15.1 UI属性说明 60

    4.15.2 事件响应 60

    4.15.3 文本框数据与步进器保持同步 60

    4.16 进度指示器 60

    4.16.1 UI属性说明 61

    4.16.2 启动指示器动画 61

    4.16.3 更新指示器进度 61

    4.16.4 停止指示器动画 61

    4.16.5 用代码创建进度指示器 62

    4.17 图像视图 62

    4.17.1 UI属性说明 62

    4.17.2 圆角处理 62

    4.18 分组框 63

    4.18.1 UI属性说明 63

    4.18.2 用代码创建分组框 63

    4.19 分栏视图 64

    4.19.1 重要属性和方法说明 64

    4.19.2 用代码创建分栏视图 65

    4.19.3 自定义分栏视图样式风格 65

    4.19.4 分栏视图中的子视图控制 66

    4.19.5 分栏视图子视图的隐藏和显示 68

    4.20 集合视图 68

    4.20.1 集合视图的content 69

    4.20.2 NSCollectionViewItem 69

    4.20.3 绑定模型到视图 70

    4.20.4 使用数据源方式管理集合视图 71

    4.20.5 实现集合视图的高亮选择 73

    4.20.6 集合视图的背景设置 75

    4.20.7 集合视图的布局管理器 75

    4.20.8 设置集合视图的顶部头和底部尾 77

    4.20.9 用代码创建集合视图 79

    4.21 选项卡视图 79

    4.21.1 UI属性说明 80

    4.21.2 代理协议NSTabViewDelegate 80

    4.21.3 动态增加选项卡 80

    4.21.4 用无边风格的选项卡进行切换控制 81

    4.22 弹出式气泡 82

    4.22.1 重要属性 82

    4.22.2 使用示例 83

    第5章 面板和警告框 84

    5.1 面板 84

    5.1.1 UI属性说明 85

    5.1.2 显示面板 85

    5.1.3 隐藏面板 86

    5.1.4 文件打开面板 86

    5.1.5 文件保存面板 88

    5.1.6 颜色选择面板 88

    5.1.7 字体选择面板 89

    5.2 警告框 89

    5.2.1 UI属性说明 89

    5.2.2 添加按钮 90

    5.2.3 使用示例 90

    5.3 使用独立的xib文件创建面板类 91

    第6章 工具栏和菜单 94

    6.1 工具栏 94

    6.1.1 创建工具栏 94

    6.1.2 UI属性说明 95

    6.1.3 NSToolbarItem的属性说明 96

    6.1.4 事件响应 96

    6.1.5 创建非标准的工具栏项 97

    6.1.6 验证工具栏项 97

    6.1.7 用代码创建工具栏 98

    6.1.8 工具栏与窗口控制按钮融合显示 99

    6.2 菜单 99

    6.2.1 UI属性说明 100

    6.2.2 增加菜单 101

    6.2.3 弹出式菜单 101

    6.2.4 设置上下文菜单 102

    6.2.5 Dock菜单 102

    6.2.6 用代码创建菜单 103

    6.2.7 获取应用默认的菜单 104

    6.2.8 菜单有效性验证 104

    6.3 状态条 105

    6.3.1 NSStatusBar类的对象关系 105

    6.3.2 NSStatusBar的使用方式 105

    6.3.3 状态条增加弹出视图 107

    第7章 表视图 109

    7.1 表视图 109

    7.1.1 使用xib创建表格 109

    7.1.2 表格样式设置 112

    7.1.3 表格数据显示配置 112

    7.1.4 表格事件 119

    7.1.5 创建表格上下文菜单 120

    7.1.6 数据排序 120

    7.1.7 数据拖放 121

    7.1.8 表格数据获取 121

    7.1.9 编辑表格内容 121

    7.1.10 动态增加/删除表格行 122

    7.1.11 用代码创建表格 123

    7.1.12 代码控制选中行 125

    7.1.13 表格行选中颜色定制 126

    7.2 大纲视图控件 126

    7.2.1 节点模型定义 127

    7.2.2 初始化模型数据 128

    7.2.3 实现数据源协议 128

    7.2.4 实现代理方法,绑定数据到节点视图 129

    7.2.5 节点选择的变化事件通知 129

    7.2.6 动态增加节点 130

    7.2.7 动态删除节点 130

    7.2.8 代码控制行的展开和选中 131

    7.2.9 修改节点展开关闭的默认图标 132

    7.2.10 鼠标右键上下文菜单 133

    第8章 自动布局 134

    8.1 自动布局的原理 134

    8.1.1 传统的布局 134

    8.1.2 自动布局 135

    8.2 栈视图 137

    8.3 Xcode中的自动布局设置 138

    8.3.1 Stack 139

    8.3.2 Align 140

    8.3.3 Pin 140

    8.3.4 Resolve 141

    8.4 自动布局的多种解决方案 141

    8.4.1 一个问题的多种解决方案 142

    8.4.2 约束选择的原则和建议 144

    8.5 自动布局使用示例 144

    8.5.1 两个视图大小相同 144

    8.5.2 3个View大小相同 145

    8.5.3 文本标签和输入框 145

    8.5.4 文本标签动态字体和输入框 146

    8.5.5 多行文本标签和输入框 146

    8.5.6 多行文本标签动态字体和输入框 147

    8.5.7 两个视图大小相同、水平方向的间距相同 148

    8.5.8 简单的Stack View 149

    8.5.9 复杂界面未使用栈视图 150

    8.5.10 复杂界面使用多个嵌套栈视图 151

    8.6 滚动条视图使用自动布局 151

    8.7 通过代码设置自动布局约束 153

    8.7.1 使用NSLayoutConstraint类 153

    8.7.2 使用NSLayoutAnchor 155

    8.7.3 使用VFL定义约束关系 155

    8.7.4 使用第三方库AutoLayoutX 155

    第9章 窗口控制器 157

    9.1 xib中窗口的加载创建过程 157

    9.2 手工创建窗口需要注意的问题 160

    9.3 窗口控制器和窗口的关系 161

    9.4 将AppDelegate中窗口的管理功能分离 161

    9.5 窗口切换后对象失去焦点问题 163

    第 10章 视图控制器 164

    10.1 视图控制器 164

    10.1.1 视图生命周期过程 165

    10.1.2 创建视图控制器的3种方式 166

    10.1.3 representedObject属性 167

    10.1.4 子视图控制器管理 168

    10.1.5 两个视图控制器之间的切换方法 169

    10.1.6 Storyboard中的视图控制 172

    10.1.7 视图中手势识别 174

    10.2 选项卡控制器 175

    10.2.1 使用NSTabView创建选项卡视图 175

    10.2.2 使用NSTabViewController管理选项卡视图 176

    10.2.3 使用Storyboard方式创建 176

    10.2.4 选项卡选中事件 177

    10.3 分栏视图控制器 178

    10.3.1 控制器的几个重要的属性和方法 178

    10.3.2 NSSplitViewItem 179

    10.3.3 NSSplitView 179

    10.3.4 使用Storyboard创建分栏视图控制器 179

    10.3.5 用代码创建分栏视图控制器 180

    10.3.6 可折叠的视图控制 181

    10.4 视图控制器与窗口控制器的关系 183

    10.4.1 视图与窗口 183

    10.4.2 视图控制器与窗口控制器 183

    10.4.3 不依赖xib和storyboard,纯代码实现应用 184

    10.5 使用窗口控制器和视图控制器实现简单登录流程 186

    10.5.1 登录流程的基本工程实现 186

    10.5.2 代码控制启动的控制器 190

    10.5.3 登录页面使用效果美化 190

    10.5.4 登录页面纯代码实现 192

    10.5.5 整个工程纯代码实现 195

    10.6 滚动条视图gao级用法 195

    10.6.1 滚动条视图显示多个按钮 195

    10.6.2 滚动条视图处理分页滑动 199

    第 11章 鼠标和键盘事件 206

    11.1 事件的分发过程 206

    11.2 事件中的两个核心类 207

    11.2.1 NSResponder 207

    11.2.2 NSEvent 207

    11.3 鼠标事件 208

    11.3.1 鼠标点击 208

    11.3.2 鼠标拖放 209

    11.3.3 鼠标区域跟踪 210

    11.3.4 模拟鼠标点击选中 212

    11.4 键盘事件 213

    11.4.1 快捷键 213

    11.4.2 控制键 214

    11.5 按键绑定事件 215

    11.5.1 系统绑定的按键事件 215

    11.5.2 文字输入 216

    11.6 事件监控 218

    11.7 动作消息 218

    11.8 在视图控制器中处理事件 219

    第 12章 撤销/重做操作 220

    12.1 撤销/重做流程分析 220

    12.2 实现原理 222

    12.3 撤销/重做动作的管理 223

    12.3.1 NSUndoManager的创建 223

    12.3.2 注册撤销动作 223

    12.3.3 清除撤销动作 224

    12.3.4 禁止注册撤销动作 224

    12.3.5 撤销动作命名 224

    12.3.6 撤销组 224

    12.4 撤销栈的深度 224

    12.5 撤销/重做通知消息 225

    12.6 撤销/重做编程示例 225

    第 13章 拖放操作 227

    13.1 拖放开始 227

    13.1.1 拖放数据定义 227

    13.1.2 拖放的可视化图像设置 229

    13.1.3 拖放源事件 229

    13.1.4 拖放源协议NSDraggingSource 230

    13.2 拖放接收 231

    13.2.1 注册接收的拖放类型 231

    13.2.2 拖放目标方协议 231

    13.2.3 拖放接收方处理过程 231

    13.3 拖放端到端编程 232

    13.3.1 拖放源类DragSourceView 232

    13.3.2 拖放目标类 233

    13.3.3 视图控制器中拖放源初始化 235

    13.4 常见的拖放示例 236

    13.4.1 文件拖放处理 236

    13.4.2 表格视图的拖放处理 237

    13.4.3 大纲视图的数据拖放处理 239

    第 14章 Cocoa数据绑定 243

    14.1 KVC 243

    14.1.1 KVC属性读写接口 244

    14.1.2 KVC路径访问相关接口 244

    14.1.3 批量属性访问接口 244

    14.2 KVO 245

    14.2.1 KVO相关接口 245

    14.2.2 手工管理KVO 246

    14.2.3 KVO的简单例子 247

    14.3 KVB 248

    14.3.1 传统的数据更新流程 249

    14.3.2 使用绑定技术简化更新流程 249

    14.3.3 实现绑定依赖的关键点 252

    14.3.4 KVB绑定的处理流程 253

    14.3.5 使用NSArrayController管理数据 254

    14.3.6 使用NSTreeController管理数据 256

    第 15章 蓝牙框架 261

    15.1 蓝牙数据交换流程 261

    15.2 蓝牙框架中的相关类 262

    15.2.1 外围设备相关 263

    15.2.2 数据中心相关 263

    15.2.3 服务相关 263

    15.2.4 特征值相关 263

    15.3 外围设备的工作流程 263

    15.3.1 系统初始化上电 263

    15.3.2 创建服务 264

    15.3.3 创建特征值 264

    15.3.4 服务与特征值关联 264

    15.3.5 发布服务 264

    15.3.6 广播服务 265

    15.3.7 数据读写请求 265

    15.3.8 订阅请求处理 266

    15.4 数据中心工作流程 266

    15.4.1 系统初始化上电 266

    15.4.2 搜索外围设备 267

    15.4.3 建立连接 267

    15.4.4 查询服务 267

    15.4.5 查询服务特征值 267

    15.4.6 服务特征读请求 268

    15.4.7 服务特征值写 268

    15.4.8 服务订阅 269

    第 16章 Bonjour协议 270

    16.1 Bonjour服务命名规则 271

    16.2 Bonjour协议API栈 271

    16.3 Bonjour核心流程 271

    16.3.1 服务发布 272

    16.3.2 服务发现 272

    16.3.3 地址解析 273

    16.4 Bonjour编程 273

    16.4.1 服务发布 273

    16.4.2 服务发现 274

    16.4.3 直接使用Bonjour进行数据发送 274

    16.4.4 需要注意的问题 275

    第 17章 系统服务 276

    17.1 服务处理流程 277

    17.2 服务定义 277

    17.3 服务提供方编程 279

    17.3.1 实现服务功能接口 279

    17.3.2 声明服务 280

    17.3.3 注册服务 281

    17.3.4 测试服务功能 281

    17.4 服务使用方编程 282

    17.4.1 注册数据类型 282

    17.4.2 菜单有效性校验 282

    17.4.3 发送数据到剪贴板 283

    17.4.4 从剪贴板读取结果数据 283

    第 18章 XPC服务 284

    18.1 XPC架构 284

    18.2 XPC编程实现 285

    18.2.1 XPC服务接口对象 285

    18.2.2 XPC服务方编程 285

    18.2.3 XPC服务请求方编程 287

    18.2.4 XPC服务接口反向调用 288

    第 19章 消息推送 290

    19.1 本地消息通知 290

    19.1.1 注册本地消息通知 290

    19.1.2 实现本地消息代理协议方法 291

    19.1.3 取消本地通知 291

    19.1.4 程序控制发送消息通知 292

    19.2 远程消息通知 292

    19.2.1 推送消息的处理流程 292

    19.2.2 请求消息推送注册 293

    19.2.3 设备 293

    19.2.4 推送消息接收 293

    19.2.5 提供者消息发送 294

    19.2.6 消息格式 294

    19.2.7 Feedback服务 295

    19.2.8 消息推送环境的证书配置 295

    19.2.9 推送消息的发送 296

    第 20章 多文档应用 298

    20.1 文档应用中的关键对象 298

    20.1.1 文档控制器 298

    20.1.2 文档模型 299

    20.1.3 文档窗口控制器 299

    20.2 创建基于文档的工程 299

    20.2.1 Document Types 300

    20.2.2 Exported UTIs 301

    20.2.3 文档编程模板工程 301

    20.3 wrapper方式读取文件 303

    20.3.1 创建NSFileWrapper管理文件 304

    20.3.2 从NSFileWrapper实例读取内容 304

    20.3.3 支持NSFileWrapper文件的工程配置 305

    20.3.4 完整的FileWrapper工程示例 305

    20.4 文档处理流程 309

    20.4.1 新建文档流程 309

    20.4.2 打开文档流程 309

    20.4.3 保存文档流程 310

    20.4.4 导出文件流程 310

    20.5 文档应用开发步骤 310

    20.6 文档应用中的撤销/重做支持 311

    20.7 文档应用管理个人档案 312

    20.7.1 个人档案数据模型 312

    20.7.2 文档数据以普通文件方式存储 313

    20.7.3 文档数据以wrapper方式存储 316

    第 21章 iCloud同步 320

    21.1 容器 320

    21.2 iCloud数据存储 321

    21.2.1 iCloud文档数据处理流程 321

    21.2.2 iCloud文档本地目录 323

    21.3 键值存储 324

    21.3.1 键值存储接口 324

    21.3.2 键值存储限制 324

    21.3.3 键值存储数据变化通知 325

    21.3.4 键值存储处理流程 325

    21.4 iCloud开发前准备工作 325

    21.5 容器数据在多个App间共享 327

    21.5.1 键值存储数据的App间共享访问 327

    21.5.2 文档数据的App间共享访问 328

    21.6 数据冲突 328

    21.6.1 键值数据冲突 328

    21.6.2 文档类型数据冲突 328

    第 22章 CloudKit 329

    22.1 使用Dashboard后台管理数据 330

    22.2 容器共享 332

    22.3 创建记录结构 333

    22.4 CloudKit数据操作 334

    22.4.1 保存数据 334

    22.4.2 删除数据 336

    22.4.3 查询数据 336

    22.4.4 数据关联reference 337

    22.4.5 批量查询数据操作 337

    22.5 订阅数据变化通知 338

    22.5.1 创建订阅 338

    22.5.2 注册消息推送 338

    22.6 生产环境部署 339

    第 23章 Core Data 340

    23.1 Core Data对象栈 341

    23.2 在项目中使用Core Data 341

    23.2.1 数据增加 345

    23.2.2 数据删除 346

    23.2.3 数据修改 346

    23.2.4 数据查询 346

    23.3 模型间关系 347

    23.3.1 一对一 347

    23.3.2 一对多 348

    23.3.3 多对多 348

    23.4 使用Bindings绑定管理对象 350

    23.5 撤销/重做操作的支持 353

    23.6 版本升级迁移 354

    23.6.1 轻量级迁移 354

    23.6.2 基于模型映射的迁移 357

    第 24章 HTTP网络编程 360

    24.1 简单的数据请求 361

    24.1.1 使用系统默认方式创建URLSession 361

    24.1.2 使用自定义的代理方法创建URLSession 362

    24.1.3 创建URLSession使用POST方式传递数据 363

    24.2 文件下载 364

    24.2.1 创建下载任务 364

    24.2.2 实现下载代理协议 364

    24.3 文件上传 365

    24.3.1 流式文件上传客户端代码编写 365

    24.3.2 表单文件上传客户端代码编写 366

    24.4 缓存 368

    24.5 Cookie管理 369

    24.5.1 Cookie编程 370

    24.5.2 Cookie的一些使用场景 370

    24.6 断点续传 371

    24.7 基于URLSessionDataTask封装的网络处理工具类 372

    24.7.1 网络处理工具类实现分析 372

    24.7.2 HTTPClient工具类实现 373

    第 25章 多线程 377

    25.1 GCD 377

    25.1.1 分发队列 377

    25.1.2 GCD多线程编程 378

    25.1.3 GCD实际使用的例子 382

    25.2 OperationQueue 384

    25.2.1 BlockOperation 384

    25.2.2 Operation 385

    25.2.3 设置任务间的依赖 386

    25.2.4 设置Operation执行完的回调 387

    25.2.5 取消任务 387

    25.2.6 暂停或恢复队列的执行 387

    25.2.7 任务执行的优先级 387

    25.3 Thread 388

    25.3.1 线程创建方式 388

    25.3.2 Thread类中的关键方法和属性 389

    25.3.3 线程中的共享资源保护 390

    第 26章 事件循环 393

    26.1 RunLoop的模式 393

    26.2 RunLoop类 394

    26.3 RunLoop的活动状态 395

    26.4 定时器 396

    26.5 RunLoop中的输入源 397

    26.6 RunLoop事件处理流程 398

    26.7 RunLoop使用场景 398

    第 27章 绘图技术 399

    27.1 绘图上下文 399

    27.2 坐标系统 399

    27.2.1 笛卡儿坐标 399

    27.2.2 屏幕坐标与本地坐标 400

    27.2.3 坐标变换 400

    27.3 颜色与透明度 403

    27.3.1 颜色模型和颜色空间 403

    27.3.2 创建颜色 403

    27.3.3 在绘图上下文中使用颜色 404

    27.3.4 从系统颜色面板获取颜色的方式 404

    27.4 绘图状态 405

    27.5 图像 406

    27.5.1 图像内部缓存 406

    27.5.2 图像大小 406

    27.5.3 图像的坐标系统 406

    27.5.4 图像绘制方法 407

    27.5.5 图像创建或加载 407

    27.5.6 屏幕图像的捕获 408

    27.5.7 图像的格式转换 409

    27.6 阴影和渐变 409

    27.6.1 阴影 409

    27.6.2 渐变 410

    27.7 文本绘制 413

    27.7.1 文本属性参数 413

    27.7.2 String的绘制方法 413

    27.8 使用路径绘图 414

    27.8.1 路径的样式 415

    27.8.2 点 418

    27.8.3 线 418

    27.8.4 多边形 418

    27.8.5 矩形 418

    27.8.6 圆角矩形 419

    27.8.7 圆和椭圆 419

    27.8.8 弧形 419

    27.8.9 贝塞尔曲线 420

    27.9 绘图的性能优化 420

    第 28章 核心动画 422

    28.1 动画的产生过程 422

    28.2 层 423

    28.2.1 视图和层 423

    28.2.2 层的坐标系统 424

    28.2.3 层的时间系统 425

    28.2.4 层的对象树 425

    28.2.5 层级管理方法 426

    28.2.6 层的内容 426

    28.2.7 层的深度 427

    28.2.8 层的透视投影 427

    28.3 层动画 428

    28.3.1 隐式动画 428

    28.3.2 显式动画 429

    28.4 核心动画对象 430

    28.4.1 动画相关类 431

    28.4.2 协议 433

    28.4.3 辅助类 435

    28.4.4 事务 436

    28.5 动画的控制 437

    28.5.1 隐式动画的产生过程 437

    28.5.2 隐式动画的动作定义 438

    28.5.3 动画结束通知 438

    28.5.4 动画的暂停和恢复 439

    28.6 macOS中的属性动画 439

    28.6.1 属性动画 440

    28.6.2 动画上下文对象 440

    28.6.3 自动布局动画 441

    28.7 系统动画与核心动画的对比 441

    28.8 动画编程示例 442

    28.8.1 关键帧动画 442

    28.8.2 分组动画 444

    28.8.3 转场动画 444

    28.9 动画性能 445

    28.10 系统专有层 446

    28.10.1 渐变层 446

    28.10.2 形状层 447

    28.10.3 文本层 448

    28.10.4 分片层 448

    28.10.5 副本层 449

    28.10.6 发射层 450

    28.10.7 变换层 452

    第 29章 多代理 455

    29.1 多代理与代理和通知的比较 455

    29.1.1 代理方式实现 455

    29.1.2 通知 456

    29.1.3 多代理 456

    29.2 多代理的实现 457

    29.2.1 Objective-C中多代理实现技术 457

    29.2.2 使用消息转发机制进行优化 457

    29.2.3 XMPPFramework 458

    29.3 聊天列表示例 459

    29.3.1 主要的视图控制器 459

    29.3.2 联系人模型类 460

    29.3.3 多代理管理类 460

    29.3.4 多代理的注册 461

    29.3.5 多代理的通知 462

    第30章 数据转换 464

    30.1 转换器基类 465

    30.2 系统实现的转换器 465

    30.3 绑定中使用的转换器 466

    30.3.1 类型转换器的实现和注册 466

    30.3.2 实现模型类 467

    30.3.3 绑定Combo Box控件到模型类 468

    30.4 实现自定义转换器的步骤 469

    30.5 使用转换器分离数据转换逻辑 469

    第31章 框架 471

    31.1 框架与静态库 471

    31.2 创建框架工程 471

    31.2.1 接口定义 471

    31.2.2 头文件引用声明 472

    31.2.3 使用框架 473

    31.2.4 框架的加载路径 476

    31.2.5 框架的签名问题 478

    第32章 应用沙盒化 479

    32.1 macOS沙盒机制 479

    32.2 应用沙盒配置信息 479

    32.3 文件沙盒编程 481

    32.3.1 设计界面 481

    32.3.2 App启动处理 481

    32.3.3 打开文件处理流程 482

    32.3.4 保存文件 483

    32.3.5 应用沙盒配置 483

    32.3.6 作用域安全的书签 484

    32.3.7 保存打开的文件URL的书签 484

    32.3.8 应用启动时通过URL的书签获取文件shou权 484

    第33章 数据导航视图 487

    33.1 DataNavigationItem的设计 487

    33.1.1 DataNavigationItem基类 488

    33.1.2 DataNavigationButtonItem 488

    33.1.3 DataNavigationTextItem 488

    33.1.4 DataNavigationFlexibleItem 489

    33.2 DataNavigationView接口和属性 489

    33.2.1 接口 489

    33.2.2 内部属性 489

    33.3 DataNavigationView代码实现 490

    33.3.1 item配置 490

    33.3.2 创建视图 491

    33.3.3 自动布局 492

    33.3.4 更新文本视图的方法 494

    33.4 使用DataNavigationView 494

    第34章 表格数据管理控制器 497

    34.1 表格列的动态配置 497

    34.1.1 表列定义的模型 498

    34.1.2 NSTableColumn类的扩展 499

    34.1.3 NSTableView类的扩展 499

    34.1.4 代码动态配置表列的表数据导航控制器 500

    34.2 实现用代码创建的表格和用xib创建表格的兼容 504

    34.3 表格的数据代理 505

    34.3.1 数据集管理操作接口 505

    34.3.2 数据源实现 507

    34.3.3 动态创建表格内容的数据代理方法 507

    34.3.4 表内容的编辑处理 511

    34.3.5 TableDataDelegate的使用 512

    34.4 数据列排序 513

    34.5 数据行拖放交换顺序 514

    34.6 数据分页显示控制 515

    34.6.1 分页控制器 515

    34.6.2 分页导航视图 517

    34.6.3 分页数据获取 519

    34.7 表格数据的增删编辑操作 519

    34.7.1 增加数据 519

    34.7.2 删除数据 520

    34.7.3 编辑表数据 521

    第35章 自动化小工具 522

    35.1 图片资源适配自动化工具 522

    35.1.1 实现思路 522

    35.1.2 工程实现 524

    35.2 国际化 527

    35.2.1 App语言国际化的过程 527

    35.2.2 自动化的思路 530

    35.2.3 Xcode工程文件的编辑和修改 531

    第36章 iPhone利用蓝牙控制Mac 534

    36.1 控制的主要流程分析 534

    36.2 macOS服务器端 535

    36.2.1 XXXPeripheralService服务类 535

    36.2.2 macOS端界面开发 537

    36.2.3 Mac锁屏状态通知 538

    36.2.4 控制Mac电脑的系统命令和脚本 539

    36.2.5 macOS端接收iOS端的命令处理 540

    36.3 iOS控制端 541

    36.3.1 XXXCentralClient类 541

    36.3.2 iOS界面开发 543

    第37章 SQLite数据库编程 546

    37.1 FMDB介绍 546

    37.2 数据库操作接口封装 548

    37.2.1 数据库管理对象 548

    37.2.2 数据访问对象 549

    37.2.3 MDAO对象 551

    37.2.4 数据模型对象 552

    37.2.5 具体使用 553

    37.3 数据库加密 554

    37.3.1 获取支持加密的SQLite3版本 554

    37.3.2 加密数据库 555

    37.3.3 操作加密数据库 556

    37.4 获取SQLite元数据 556

    37.5 模板引擎 559

    37.5.1 Xcode中的模板 560

    37.5.2 模板引擎处理流程 560

    37.6 表模型自动化代码生成 561

    37.6.1 模板文件定义 561

    37.6.2 代码实现 562

    第38章 开发一个完整的macOS应用 564

    38.1 制定目标 564

    38.2 开发自己的应用 564

    38.3 主界面设计 564

    38.3.1 主窗口控制器 565

    38.3.2 分栏页面控制器 566

    38.3.3 左边导航列表页的设计与实现 567

    38.3.4 分栏右部界面 570

    38.3.5 详细界面设计 571

    38.4 工具栏设计 572

    38.5 菜单设计 574

    38.5.1 系统菜单 574

    38.5.2 上下文菜单 575

    38.6 应用偏好设置 577

    38.7 页面控制器的核心流程 578

    38.8 用户体验的一点改进 582

    38.9 发布应用准备 583

    38.9.1 发布到非应用商店渠道 583

    38.9.2 发布到应用商店 584

    后记 586
查看详情
12
相关图书 / 更多
macOS应用开发基础教程
marrying buddha:我的禅
Wei Hui;卫慧
macOS应用开发基础教程
making it real:My soccer skills book
david beckham
macOS应用开发基础教程
mario botta:Mario Botta (Obras y Proyectos / Works and Projects) (Paperback)
Emilio Pizzi
macOS应用开发基础教程
macOS效率手册
少数派 著
macOS应用开发基础教程
manabeibi:眞鍋かをり写真集
木村晴
macOS应用开发基础教程
matplotlib数据可视化实战
洪锦魁
macOS应用开发基础教程
macOS软件安全与逆向分析
丰生强、邢俊杰 著
macOS应用开发基础教程
macromediaFLASHProfessional8标准培训教材
Adobe公司北京代表处、DDC传媒 编;胡海;章精设;赵育倩
macOS应用开发基础教程
masks:The Art of Expression
Mack;John
macOS应用开发基础教程
macromedia FLASH 5标准教程
Unions工作室 编著
macOS应用开发基础教程
macromedia DREAMWEAVER MX 标准案例教材(含盘)
刘时燕 编;陈青
macOS应用开发基础教程
macromedia DREAMWEAVER 4.02中文版标准教程
Unions工作室 编著