下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922
读书 > 移动开发 >IOS > Xcode实战:Apple平台开发实用技术、技巧及最佳流程

Xcode实战:Apple平台开发实用技术、技巧及最佳流程

综合评级:★★★★★

定价:99.00

作者:[美]弗里茨·安德森

出版社:机械工业出版社

出版日期:2016年1月

页数:486

字数:512000

ISBN:9787111525509

书籍介绍
本书将会帮助你使用Xcode6工具提高工作效率,编写优秀的代码并能使用**的iOS8和OSXYosemite特性,包括Apple**的Swift编程语言。这是**一本专注于介绍需要深入掌握且每天都要使用的Xcode6书籍。作者发现了更佳的方法介绍storyboard、instrument、构建和编译代码,帮助你应用新特性:从InterfaceBuilderLiveRendering到ViewDebugging和XCTestPerformanceTesting。
相关课程
目录
Contents?目 录

译者序

前 言

**部分 起步

第1章 获取Xcode 2

1.1 开始之前 2

1.2 安装Xcode 3

1.3 移除Xcode 4

1.4 Apple开发者计划 5

1.5 下载Xcode 6

1.6 额外需要下载的内容 7

1.7 小结 8

第2章 初识Xcode 9

2.1 启动Xcode 9

2.2 Hello World 11

2.2.1 新建项目 11

2.2.2 让Xcode安静下来 13

2.2.3 构建和运行 14

2.2.4 货真价实的程序 15

2.3 删除项目 15

2.4 小结 15

第3章 简单的工作流程和被动调试 16

3.1 创建项目 16

3.2 构建 19

3.3 运行 21

3.4 简单调试 22

3.5 小结 23

第4章 主动调试 24

4.1 一个简单的测试用例 24

4.2 开始主动调试 24

4.2.1 设置断点 25

4.2.2 变量窗格 26

4.2.3?单步调试 27

4.3 解决这个问题 28

4.3.1 行为 28

4.3.2 解决方法 31

4.4 小结 31

第5章 编译 32

5.1 编译 32

5.2 动态载入 38

5.3 Xcode和Clang 38

5.3.1 本地分析 39

5.3.2 跨函数分析 41

5.3.3 索引 42

5.4 Swift 43

5.5 编译产品 47

5.5.1 中间产品 47

5.5.2 预编译 49

5.6 小结 51

第6章 添加库target 52

6.1 添加target 52

6.2 target关系 54

6.2.1 添加文件到target中 54

6.2.2 target中的头文件 56

6.3 从属target 56

6.3.1 添加库 57

6.3.2 调试依赖target 59

6.4 小结 59

第7章 版本控制 60

7.1 采取控制 61

7.2 文件状态 63

7.3 首次提交 65

7.4 使用远程版本库 66

7.4.1 本地建立一个“远程”版本库 68

7.4.2 将文件推送到远程服务器 69

7.5 合并与冲突 70

7.5.1 User A 70

7.5.2 User B 73

7.5.3 返回User A 75

7.6 版本编辑器 78

7.6.1 Comparison 78

7.6.2 Blame 80

7.6.3 Log 81

7.7 分支 81

7.8 小结 83

第二部分 iOS应用程序的生命周期

第8章 开始制作iOS应用程序 86

8.1 规划应用程序 86

8.1.1 模型–视图–控制器 86

8.1.2 模型 87

8.1.3?视图 87

8.1.4 控制器 88

8.2 开始制作一个全新的iOS项目 89

8.3 项目中都包含什么 91

8.4 小结 93

第9章 iOS应用程序:模型 94

9.1 实现模型 94

9.1.1 实体 95

9.1.2 属性 95

9.1.3 关系 97

9.2 托管对象类 100

9.2.1 创建类——错误的方法 100

9.2.2 为什么按照Xcode的方式做是个错误 102

9.2.3 正确的方法——使用mogenerator 102

9.3 准备 105

9.3.1 Utilities 105

9.3.2 扩展类 105

9.3.3 passer_rating 107

9.4 定制Core Data类 108

9.4.1 在项目中添加Game数据 108

9.4.2 在项目中添加Passer数据 109

9.4.3 一些测试数据 110

9.4.4 源代码控制和产品文件 112

9.5 让模型更容易调试 114

9.6 小结 115

第10章 iOS应用程序:控制器 116

10.1 Objective-C中的符号重命名 116

10.1.1 重构Objective-C方法名 117

10.1.2 重构类名 117

10.2 在Swift中重命名类 118

10.3 编辑View Controller 119

10.3.1 表视图 120

10.3.2 构建Passer List 121

10.3.3 新建Passer 121

10.4 生命周期问题及处理方法 122

10.5 真正的Passer Rating 123

10.5.1 另外一个bug 123

10.5.2 运行Passer Rating 127

10.6 小结 128

第11章 构建新视图 129

11.1 下一个视图控制器 129

11.1.1 如果想要添加新视图控制器 129

11.1.2 storyboard、scene和segue 130

11.2 创建视图 133

11.2.1 Passing中的Outlet和Assistant 134

11.2.2 Billboard视图 136

11.2.3 链接视图与视图控制器 137

11.2.4?特定场合下的自动布局 138

11.2.5?各种标签 140

11.2.6 清理 142

11.3 表视图 144

11.4 outlet 145

11.4.1 连接outlet 146

11.4.2 检查连接 147

11.4.3 连接GameListController 148

11.4.4 代码补全和片段 149

11.4.5 代码片段 150

11.5 测试Billboard View 152

11.6 小结 153

第12章 新视图的自动布局 154

12.1 为什么选择自动布局 154

12.1.1 Autoresizing的局限 155

12.1.2 Auto Layout 155

12.1.3 需要牢记的问题 155

12.2 重新制作Player Billboard 156

12.3 重构子视图布局 157

12.3.1 Playground 158

12.3.2 StatView 160

12.3.3 安装StatView 164

12.4 设计约束 165

12.5 两行、两个标签 167

12.6 实际的约束 169

12.6.1 默认(Any/Any) 170

12.6.2 Any Height(非Compact) 170

12.6.3 Landscape(wAny/hCompact) 171

12.6.4 解决问题 171

12.6.5 细节修改 171

12.7 小结 172

第13章 添加表格单元格 173

13.1 Game表 173

13.1.1 Table View中的outlet 173

13.1.2 添加所需的Protocol方法 174

13.1.3 添加Model-to-View的支持 175

13.1.4 原型元素 176

13.2 Game Table:**次运行 177

13.3 自定义表格单元格 179

13.4 添加一些图形 182

13.4.1 带有图片的单元格 182

13.4.2 将Image视图与图片联系在一起 182

13.4.3?Assets目录 183

13.4.4 向Assets Catalog中添加图片 184

13.4.5 图标和启动图片 186

13.5 小结 188

第14章 添加编辑器 189

14.1 计划 189

14.2 添加模型场景 189

14.2.1 嵌入的View Controller 191

14.2.2 将Passer List与Editor相连 193

14.2.3 Static Table Cells 194

14.3 编辑器视图控制器 195

14.3.1 编辑器表 195

14.3.2 将数据传递给编辑器 197

14.3.3 从编辑器中获得数据 198

14.4 segue 200

14.5 小结 201

第15章 单元测试 202

15.1 Test Navigator 203

15.2 测试CSV Reader 204

15.2.1 CSV 测试代码 205

15.2.2 测试数据 209

15.2.3 运行测试程序 210

15.3 测试和调试器 211

15.4 添加测试类 213

15.5 异步测试 216

15.5.1 测试异步代码 217

15.5.2 文档 217

15.6 XCTest断言 218

15.6.1 简单测试 218

15.6.2 等价 219

15.6.3 异常 219

15.7 小结 220

第16章 度量和分析 221

16.1 速度 221

16.1.1 Debug 调试器 222

16.1.2 Instruments 224

16.2 XCTest和性能 231

16.3 内存 232

16.4 小结 233

第17章 iOS扩展 234

17.1 添加Today Target 235

17.2 设计挂件 235

17.3 框架内的共享库 239

17.4 Today扩展 244

17.5 构建依赖 247

17.6 结果 248

17.7 小结 248

第18章 配置 249

18.1 Apple开发者计划 249

18.1.1 通用(App Store)计划 250

18.1.2 企业计划 250

18.2 iOS的配置 251

18.2.1 你会看到什么 251

18.2.2 注册你的App 253

18.2.3 保护资源 254

18.2.4 提交iOS应用程序 255

18.3?功能编辑器 257

18.3.1 OS X独有的功能 257

18.3.2 iOS和OS X中都有的功能 257

18.3.3 iOS功能 258

18.4 OS X沙箱 259

18.4.1 为什么要选择沙箱 261

18.4.2?沙箱的缺点 261

18.5 Gatekeeper 和Developer ID 262

18.5.1 获取Developer ID 262

18.5.2 使用 Developer ID 263

18.5.3 限制 264

18.6 发布构建 264

18.6.1 基本的构建设置 265

18.6.2 调整构建设置 265

18.6.3 构建 267

18.7 小结 268

第三部分 Mac OSX开发中的Xcode

第19章 开始制作OS X应用程序 270

19.1 目标 270

19.2 开始 271

19.3 模型 274

19.3.1 从iOS移植 274

19.3.2 添加实体 275

19.4 制作菜单 278

19.4.1 Target/Action 279

19.4.2 First Responder 280

19.4.3 将数据载入LeagueDocument 281

19.4.4 适应托管文档 281

19.4.5 测试命令 283

19.4.6 为League 数据确定一个类型 284

19.4.7 确定App如何处理League文件 285

19.4.8 应用程序和文档图标 286

19.5 小结   287

第20章 绑定:连接OS X 应用程序 288

20.1 OS X中的Storyboard Segue 288

20.2 构建文档窗口 290

20.2.1 载入窗口 290

20.2.2 表视图 291

20.3 填充表——绑定 294

20.3.1 对象控制器 294

20.3.2 将表绑定到Team 296

20.3.3 将列绑定到Team属性 297

20.4 League文档数据的结构 299

20.4.1 从League表到Source List 299

20.4.2 捕获Team的选择 301

20.4.3 从Team到表 303

20.4.4 Passer部分 304

20.5 小结 311

第21章 本地化 312

21.1 本地化的工作原理 312

21.2 添加本地化 313

21.2.1 Base Localization 313

21.2.2 为什么需要 Base Localization 314

21.3 哪些需要本地化 315

21.3.1 游戏细节视图:布局 315

21.3.2 游戏细节视图:代码 317

21.3.3 模块和命名空间 319

21.4 法语本地化 320

21.4.1 添加语言环境 320

21.4.2 由简入繁:Credits.rtf 323

21.4.3 本地化Main.storyboard 325

21.4.4 本地化资源 328

21.4.5 本地化程序字符串 329

21.4.6 genstrings 330

21.4.7 xliff文件 331

21.4.8 其他 332

21.5 本地化系统字符串 332

21.6 小结 334

第22章 程序包 335

22.1 简单的包:RTFD 335

22.2 bundle 336

22.3 应用程序的bundle 337

22.4 Info.plist File 338

22.5 Info.plist中用于应用程序的键 340

22.5.1 用于iOS和OS X的键 340

22.5.2 OS X中使用的键 342

22.5.3 iOS中使用的键 345

22.6 小结 347

第23章 属性列表 348

23.1 属性列表数据类型 348

23.2 编辑属性列表 350

23.2.1 属性列表编辑器 352

23.2.2 为什么不使用属性列表编辑器 356

23.3 其他格式 358

23.3.1 文本属性列表 358

23.3.2 二进制属性列表 359

23.3.3 JSON 360

23.4 特殊的属性列表 361

23.5 小结 362

第四部分 Xcode任务集

第24章 Xcode中的文档 364

24.1 Quick Help 364

24.1.1 Inspector 364

24.1.2 弹出窗口 365

24.2 快速打开 366

24.3 帮助 367

24.4 文档窗口 368

24.4.1 侧边导航栏 368

24.4.2 侧边栏的内容表 368

24.4.3 类信息 368

24.4.4 查找和导航 369

24.5 保持同步 371

24.6 自定义的Quick Help 373

24.6.1 C语言系列的文档 373

24.6.2 Doxygen 375

24.6.3 运行Doxygen 380

24.6.4 安装文档集合 380

24.7 Swift和reStructuredText 381

24.8 小结 383

第25章 Xcode构建系统 384

25.1 Xcode如何组织构建过程 384

25.2 构建变量 387

25.3 设置的层级 388

25.4 编辑构建变量 389

25.5 配置 390

25.6 配置文件 392

25.6.1 创建配置文件 392

25.6.2 SDK和指定的架构设置 393

25.6.3 预处理xcconfig文件 393

25.7 命令行工具 394

25.7.1 xcodebuild 394

25.7.2 xcode-select 395

25.7.3 xcrun 396

25.8 自定义构建规则 397

25.9 构建日志 398

25.10 简单的构建记录 400

25.11 小结 408

第26章 Instruments 409

26.1 Instruments是什么 409

26.2 运行Instruments 410

26.3 记录文档窗口 411

26.3.1 工具栏 412

26.3.2 记录区域 414

26.3.3 Detail区域 415

26.3.4 Extended Detail区域 415

26.3.5 库 418

26.4 追踪 419

26.4.1 记录 419

26.4.2 保存和重新打开 422

26.4.3 不启动instrument记录 422

26.5 Instruments 422

26.5.1 Behavior 423

26.5.2 Core Data 423

26.5.3 Dispatch 423

26.5.4 Filesystem 423

26.5.5 Graphics 424

26.5.6 Input/Output 424

26.5.7 Master Tracks 424

26.5.8 Memory 425

26.5.9 系统 425

26.5.10 System-iOS Energy Instruments 427

26.5.11 线程/锁 427

26.5.12 记录 428

26.5.13 UI Automation 428

26.5.14 用户界面 428

26.6 自定义Instruments 429

26.7 模板 430

26.7.1 全部平台 430

26.7.2 仅限iOS 430

26.7.3 仅限Mac 431

26.8 小结 431

第27章 调试 432

27.1 Scheme选项 432

27.1.1 Info 432

27.1.2 参数 433

27.1.3 选项 433

27.1.4 诊断 435

27.2 使用断点做更多的工作 435

27.3 视图层级 437

27.4 lldb命令行 439

27.5 小技巧 441

27.6 小结 444

第28章 零散的知识 445

28.1 技巧 445

28.1.1 一般技巧 445

28.1.2 代码折叠 449

28.1.3 Assistant编辑器 450

28.1.4 Instruments和调试 452

28.1.5 构建 452

28.2 陷阱 454

第五部分 附录

附录A 一些构建变量 460

附录B 资源 474

前言
前 言?Preface欢迎阅读本书。本书将展示如何使用Apple的集成开发环境在进行高质量产品开发的过程中达到事半功倍的效果。

Xcode 6是一个开发工具家族的后裔,这些开发工具*早可以追溯到20年前NeXT的ProjectBuilder。它*初是一个集文本编辑器、用户界面设计器和UNIX前端开发为一体的工具集。现在Xcode 6已经发展成为一个复杂的系统,用于构建应用程序和系统软件。它充分利用了全面的索引系统和精确的增量解析器的功能,可以用来帮助你在项目中集成正确的代码,并一次性让这些代码执行成功。

这种强大的功能会让人望而生畏。本书旨在揭开Xcode的神秘面纱,通过一些案例用循序渐进的方式展示如何在日常工作中使用它。不要被一般的方法蒙蔽了双眼:本书将会揭示Xcode完整开发流程的**实践。本书不涵盖“高级话题”,我会在开发过程的恰当时机介绍版本控制和单元测试相关的内容。

本书的组织方式首先,对我的计划进行一个整体概括:这是一本关于开发者工具的书。如果它教会了你如何使用Cocoa框架或者一些关于编程的知识,那也不错,不过这些内容都是用来介绍Xcode工作流程所附带的内容。学习各种框架有众多优秀的书籍和资源,在附录B中你可以找到大量这类资源。

每一段旅程都需要有一条路线,同样每一堂课都需要一个故事作为引线。本书前3部分通过3个应用程序来介绍Xcode,这3个程序是:一个命令行程序、一个iOS应用程序以及一个OS X应用程序,它们的功能是计算和展示美国橄榄球比赛中的部分统计信息。这些应用程序都不实用,图形应用几乎全部基于示例数据。但是在这3个应用程序的制作过程中,需要用到很多开发工具,能让你充分了解如何使用这些工具。

Xcode支持一些技术,如:Core Data和OS X绑定(binding),这些技术都不是针对入门读者的。本书直接深入这些技术内部,忽略了从概念上讲更简单的方法,这样我可以解释清楚Xcode的工作原理。其他一些“高级”技术,比如单元测试和版本控制,都会在实践中需要它们的时候才会介绍。这就是Xcode支持的工作流程。

第二部分和第三部分分别使用iOS和OS X应用程序作为示例程序,即使你仅对其中一个平台感兴趣,也应该阅读另外一个平台对应的内容。这些应用程序的制作不过是一个引子,相应的技术两个平台都适用。

**步**部分会介绍Xcode的安装,然后通过一些基本的调试技巧运行**个项目。你将会完成一个小型的命令行应用程序。这个应用程序可能很简单,但是你会学到在制作复杂的图形应用程序之前必备的一些基本技术。

第1章,获取Xcode——下载Xcode 6之前需要考虑的一些问题,两种下载和安装方法。

第2章,初识Xcode——初步了解Xcode,建立一个小项目并运行。

第3章,简单的工作流程和被动调试——编写、构建并运行一个简单的应用程序,再对崩溃做出处理。

第4章,主动调试——在程序中设置断点(breakpoint)和追踪(tracing)来负责调试。该章会展示如何组织工作空间(workspace)。

第5章,编译——停下来介绍应用程序的构建流程。

第6章,添加库target——在项目中添加一个库target,然后学习如何从多个目标(target)构建产品。

第7章,版本控制——揭示为什么源代码管理这么重要,如何通过Git和Subversion充分利用Xcode内置的版本管理。

iOS应用程序的生命周期第二部分介绍一个小型iPhone应用程序,以及如何使用Apple开发者工具构建这个应用程序。它会引领你使用图形编辑器制作用户界面,展示如何配置应用程序以优化应用程序的速度和内存负荷。

第8章,开始制作iOS应用程序——从创建一个iOS项目开始,学习iOS Cocoa框架中的模型–视图–控制器(Model-View-Controller)设计思想,这个思想也适用于OS X。

第9章,iOS应用程序:模型——设计一个Core Data计划(schema),并在自己的代码中支持它。

第10章,iOS应用程序:控制器——创建一个将模型与界面视图链接在一起的控制器。同时,该章会讲解有关重构以及Xcode持续错误检查的知识。

第11章,构建新视图——使用集成在Xcode中的Interface Builder为应用程序设计用户界面视图,充分利用源代码的自动补全功能。

第12章,新视图的自动布局——在Xcode 6中,自动布局(Autolayout)更多的是帮助完成工作而不是与工具做斗争。学习如何运用Cocoa布局得到你想要的效果。

第13章,添加表格单元格——当向应用程序添加一个界面内组件(in-screen component)的时候,你将会调试内存管理,并通过Scheme编辑器控制Xcode对应用程序的编译、运行以及测试过程。

第14章,添加编辑器——添加一个编辑器视图,深入学习Storyboard。

第15章,单元测试——单元测试会加快开发进程并让应用程序更稳定。该章将会介绍Xcode是如何将单元测试作为开发过程中头等重要的部分的。

第16章,度量和分析——使用Instruments追踪性能和内存问题。

第17章,iOS扩展——创建一个系统级别的扩展和共享库,提升应用程序的价值。

第18章,配置——完成开发后,获取Apple的许可让应用程序运行在Apple设备上的流程复杂且易变。该章将会介绍如何使用Xcode减少绝大部分麻烦,并给出一些避免陷阱的小技巧。

Mac OS X开发中的Xcode第三部分将焦点转移到OS X开发上。有一些概念在OS X中比在iOS中更重要,不过你也会学到一些与开发平台无关的技术。

第19章,开始制作OS X应用程序——将iOS组件移植到OS X上;介绍什么是响应链(responder chain),以及Interface Builder如何让它更易于使用。

第20章,绑定:连接OS X应用程序——当构建一个弹出窗口(popover window)的时候,你将会使用OS X绑定来简化数据与界面之间的链接。你还会使用自动调整大小的功能,这是一种布局视图结构的传统技术。

第21章,本地化——如何将Mac和iOS应用程序翻译成其他语言。

第22章,程序包——你将会掌握大部分Mac和iOS产品的基本结构,以及在这两个平台上,如何使用Info.plist文件将应用程序与操作系统相匹配。

第23章,属性列表——学习基本的类JSON的文件类型,用于在OS X和iOS平台上存储数据。

Xcode 任务集当看到这里的时候,你已经学习了深入了解Xcode工具集内部细节的基础知识。第四部分将会学习一些比第二部分和第三部分更需要认真对待的内容。

第24章,Xcode中的文档——该章将会介绍Xcode如何为你提供API的即时帮助,并浏览Cocoa开发中概念的细节,揭示如何向系统中添加你自己的文档。

第25章,Xcode构建系统——该章将会介绍Xcode将源文件转化为可执行文件的过程背后所使用的工具和规则。

第26章,Instruments——使用Apple的timeline profiler,你可以超越基本的性能和内存诊断,从整体上观察程序如何使用它的资源。

第27章,调试——如何使用断点和条件来减少内部代码诊断。你也可以找到一个关于11db调试器命令集的教程,以更进一步地掌控自己的代码。

第28章,零散的知识——综合介绍一些开发工具中会遇到的小技巧、陷阱以及特性。

附录第五部分的附录包含帮助你掌握构建系统的参考信息,还有寻找帮助和支持的途径。

附录A,一些构建变量——Xcode构建系统中*重要的配置和环境变量。

附录B,资源——介绍能在开发过程中助你一臂之力的书、工具和网络资源。

关于版本本书基于OS X 10.10、iOS 8.2和Xcode 6.2编写而成。

关于代码本书中有很多可执行的示例代码,Xcode 6是一个创建并运行代码的系统。本书旨在教授工作流程。代码本身是学习工作流程时附带的内容。尤其要注意:本书中绝大部分代码在一开始都无法正常运行。本书是一本介绍开发流程的书,大部分内容都涉及寻找和解决bug。如果不学着处理所碰到的问题,你就无法学习整个工作流程。

所以本书给出的都是一些有问题的代码。可能你会发现这些代码难以阅读,并且如果你尝试运行这些代码,也会感觉很痛苦。相信我,这么做肯定是有原因的。

本书的示例代码都可以在华章公司网站下载:www.hzbook.com。如果你在阅读的过程中使用示例代码,并用Git(或者Subversion)作为工作中的代码版本管理工具,那么需要将更改复制到自己的工作目录中。如果直接用示例文件夹替换自己的文件夹,将会导致自己的版本信息丢失。

约定本书中命令行的部分内容可能会比一页书还要宽,所以我遵循在行末尾添加\\\\来换行的约定。大段的输出内容将会简单地将它们分成若干行,之后的每行都会缩进。当输出行包含很长的文件路径的时候,我会用省略号(……)来替代不重要的部分,仅仅留下重要的部分。

Macintosh在其*初的20年中就使用单按键的鼠标(不要笑,很多购买者都不知道这是什么样的鼠标,会在一个古老的Mac鼠标上按错误的按键)。现在它有4种方法可以实现鼠标点击的效果:在一个实际鼠标上点击右键(或者点击虚拟鼠标的某个代表右键点击的角落);按住Ctrl键同时进行普通的点击操作;用两个手指敲击多点触摸屏(即便在台式机上这个操作也越来越常见);或者点击多点触摸屏指定角落。在“系统偏好”(System Preferences)中有更多可以设置的选项。除非差别特别大,否则我会统称这些操作为“右击”(right-click),由你自己选择到底使用哪个操作。

致谢当你拿到这本书的时候,其实文字编撰只占出版过程的一部分内容。我要感谢那些在背后默默奉献的人,没有他们本书就无法与读者见面。大部分人名都会出现在正式的制作人员列表中,但是他们应当收获比正式感谢更多的褒奖。

Trina MacDonald面对有诸多更改的Xcode,克服了巨大的困难,完成了本书的再版。这并不是一件保证能够完成的工作,但是她做到了。谢谢她。

Lori Hughes凭借丰富的幽默细胞给我们开了个好头,为我们安排了严谨的日程表。Julie Nahil,我们的产品经理,很早就开始运作,让工作能够按照日程表的计划进行,而且在本书从手稿到成书的过程中还做了很多份外之事。

Olivia Basegio确保了所有的合同、公文往来(包括提升薪水)的正常沟通。她还组织评审人员在本书还处于未装订阶段就开始了审阅工作。

审阅人Chris Zahn、Gene Backlin和Josh Day悉心审阅了本书,让整本书的质量与*开始相比提高了不少。当然可能还有一些错误,有一些是无意造成的,有一些是我自身水平导致的,无论怎样,都是我的问题。

文字编辑Stephanie Geels完成了文字、语法错误的相关检查,并为特定的文字找到了对应的字体,其中的过程很有意思。

全职工作对作者来说不是件好事(除了能拿全职工资以外)。Alan Takaoka,芝加哥大学IT Services中Web Service部门的负责人,在我写作期间,让我每周休息三四天。我保证在撰写本书的过程中参加所有的会议并在截止日期之前完成所有的工作。不过很少有工作会安排在周一或者周五。Cornelia Bailey帮我管理了绝大多数项目,并合理地重新安排进度。

Bess和Kate带给我的麻烦比我撰写本书时遇到的怀疑和沮丧更多,但却让我对本书将会写得更好充满了信心,这也许就是这两个小家伙的心意。

热门图书
推荐新闻
技术文库
论坛推荐